打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
mapgis6.7二次开发vc6

mapgis6.7二次开发vc6_demo 之一(主窗体构架)

本文根据mapgis6.7 sdk开发包中实例程序和help.chm帮助文件

进行的学习心得总结:

//stdafx.h文件内容如下所示 :

#include  <windows.h>


//#include "demo.h" 文件内容如下所示 :

  1. //#include "demo.h"  
  2. #if !defined(AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_)  
  3.   
  4. #define AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_  
  5.   
  6. #if _MSC_VER > 1000  
  7.   
  8. #pragma once  
  9.   
  10. #endif // _MSC_VER > 1000  
  11.   
  12. #include "resource.h"  
  13.   
  14. #include "string.h"  
  15. #include <iostream>  
  16. #include <comutil.h>  
  17. using namespace std;  
  18.   
  19. //定义函数声明  
  20.   
  21. int DoWMCommand( HWND hWnd, WPARAM wParam, LPARAM lParam);  
  22.   
  23. LRESULT CALLBACK  WndProc(HWND, UINT, WPARAM, LPARAM);  
  24. LRESULT CALLBACK  GrpProc(HWND, UINT, WPARAM, LPARAM);  
  25.   
  26. BOOL _InitWindow(int nCmdShow);  
  27. BOOL _InitWindowFirst(void);  
  28. BOOL _InitWindowEvery(int nCmdShow);  
  29.   
  30. void _EnableWinMenu(void);  
  31.   
  32. short LoadFiles(short type);  
  33. short SaveFiles(short type);  
  34. short SaveFilesAs(short type);  
  35. short CloseFiles(short type);  
  36. void DispADotLable(HDC hdc,long i);  
  37. void DispAllDotLable(HDC hdc);  
  38. void _DispAbout(void);  
  39. //  
  40. void _ProcLBUTTONDOWN(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);  
  41. void _ProcLBUTTONUP(  HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);  
  42. void _ProcMOUSEMOVE(  HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);  
  43. void _ProcRBUTTONUP(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);  
  44. void _ProcSETCURSOR(HWND hWnd,WPARAM wParam, LPARAM lParam);  
  45.   
  46. //  
  47. void ShowMsg(char* msg);  
  48. void Vct_Export();  
  49. void D2A_test();  
  50.   
  51. //common op  function  公共操作函数  
  52. char* i2cp(int n);  
  53. char* l2cp(long n);  
  54. char* d2cp(double value);  
  55. char* short2cp(short value);  
  56. char* getdir_lc(char* s,const char* d);  
  57. char* getfilename_lc(char* s,const char* d);  
  58. //  
  59. char* GetDiskSpace_lc(unsigned char dsk);  
  60. //  
  61. char* GetCurDir(void);  
  62. int WriteToLog(char* str);  
  63. int WriteToLog(const char* str);  
  64. int WriteToLog_f_delete(void);  
  65. char* UnionStr(const char* A,const char* B);  
  66. char* strcat_lc(const char* A,const char* B);  
  67. const char* StrCopy(const char* src);  
  68. char* strcpy_lc(const char* src);  
  69. bool EqStr(const char* A,const char* B);  
  70. bool IsNumber(string str);  
  71. //file op function 文件操作函数  
  72. //----------------------------  
  73. //文件操作方法  
  74. void f_SetFilePath(char* pfilepath);  
  75. int f_delete(char* pfilepath);  
  76. bool f_OpenFile_r(void);  
  77. bool f_OpenFile_w(void);  
  78. int f_EndFile(void);  
  79. char* f_NextLine();  
  80. int f_WriteLine(char* line);  
  81. int f_FlushFile(void);  
  82. int f_CloseFile(void);  
  83. //----------------------------  
  84. bool OutVctHeadBeginEnd();                        //输出vct文件头  
  85. bool OutVctFeatureCodeBeginEnd(short* ptALst);    //输出vct要素代码  
  86. bool OutVctTableStructureBeginEnd(short* ptALst); //输出vct表结构   
  87. //输出线坐标 OK   
  88. bool OutVctLineBeginEnd(short ai);  
  89. //输出属性值 OK  
  90. bool OutVctAttributeBeginEnd(short ai);  
  91. //----------------------------  
  92.   
  93. #endif // !defined(AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_)  


//Resource.h文件内容如下所示 :
  1. //{{NO_DEPENDENCIES}}  
  2. // Microsoft Developer Studio generated include file.  
  3. // Used by demo.rc  
  4. //  
  5. #define IDMN_NULL                       0x0000  
  6. #define PAINTING                        0x0004  
  7. #define IDD_DIALOG_VCT_EXP              102  
  8. #define IDR_MENU1                       132  
  9. #define IDC_DEMO                        132  
  10. #define IDC_LIST1                       1000  
  11. #define IDC_EDIT1                       1001  
  12. #define IDC_BTN_SAVEVCTAS               1002  
  13. #define IDMN_LOAD_PNT                   32771  
  14. #define IDMN_SAVE_PNT                   32772  
  15. #define IDMN_SAVE_PNT_AS                32773  
  16. #define IDMN_CLOSE_PNT                  32774  
  17. #define IDMN_LOAD_LIN                   32775  
  18. #define IDMN_SAVE_LIN                   32776  
  19. #define IDMN_SAVE_LIN_AS                32777  
  20. #define IDMN_CLOSE_LIN                  32778  
  21. #define IDMN_LOAD_REG                   32779  
  22. #define IDMN_SAVE_REG                   32780  
  23. #define IDMN_SAVE_REG_AS                32781  
  24. #define IDMN_CLOSE_REG                  32782  
  25. #define IDMN_CLOSE_FILE                 32783  
  26. #define IDMN_EXIT                       32784  
  27. #define IDMN_MOD_ENV                    32791  
  28. #define IDMN_DOT_VIEWABLE               32792  
  29. #define IDMN_ARC_VIEWABLE               32793  
  30. #define IDMN_ORIGNAL_DISP               32794  
  31. #define IDMN_ABOUT                      32795  
  32. #define IDMN_VCT_EXPORT                 40001  
  33. #define IDMN_ENLG_WIN_C                 40002  
  34. #define IDMN_REDU_WIN_C                 40003  
  35. #define IDMN_MOVE_WIN_C                 40004  
  36. #define IDMN_REST_WIN_C                 40005  
  37. #define IDMN_UPDT_WIN_C                 40006  
  38. #define IDMN_CLEA_WIN_C                 40007  
  39. #define IDMN_D2A                        40008  
  40.   
  41. // Next default values for new objects  
  42. //   
  43. #ifdef APSTUDIO_INVOKED  
  44. #ifndef APSTUDIO_READONLY_SYMBOLS  
  45. #define _APS_NEXT_RESOURCE_VALUE        103  
  46. #define _APS_NEXT_COMMAND_VALUE         40009  
  47. #define _APS_NEXT_CONTROL_VALUE         1003  
  48. #define _APS_NEXT_SYMED_VALUE           101  
  49. #endif  
  50. #endif  

//demo.rc文件内容如下所示:主窗体的资源文件内容 菜单的定义
  1. //Microsoft Developer Studio generated resource script.  
  2. //  
  3. #include "resource.h"  
  4.   
  5. #define APSTUDIO_READONLY_SYMBOLS  
  6. /////////////////////////////////////////////////////////////////////////////  
  7. //  
  8. // Generated from the TEXTINCLUDE 2 resource.  
  9. //  
  10. #include "afxres.h"  
  11.   
  12. /////////////////////////////////////////////////////////////////////////////  
  13. #undef APSTUDIO_READONLY_SYMBOLS  
  14.   
  15. /////////////////////////////////////////////////////////////////////////////  
  16. // Chinese (中国) resources  
  17.   
  18. #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)  
  19. #ifdef _WIN32  
  20. LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED  
  21. #pragma code_page(936)  
  22. #endif //_WIN32  
  23.   
  24. /////////////////////////////////////////////////////////////////////////////  
  25. //  
  26. // Menu  
  27. //  
  28.   
  29. IDC_DEMO MENU DISCARDABLE   
  30. BEGIN  
  31.     POPUP "&F文件"  
  32.     BEGIN  
  33.         MENUITEM "&P装入点",                    IDMN_LOAD_PNT  
  34.         MENUITEM "存   点",                     IDMN_SAVE_PNT  
  35.         MENUITEM "换名存点",                    IDMN_SAVE_PNT_AS  
  36.         MENUITEM "关闭点文件",                  IDMN_CLOSE_PNT  
  37.         MENUITEM SEPARATOR  
  38.         MENUITEM "&L装入线",                    IDMN_LOAD_LIN  
  39.         MENUITEM "存   线",                     IDMN_SAVE_LIN  
  40.         MENUITEM "换名存线",                    IDMN_SAVE_LIN_AS  
  41.         MENUITEM "关闭线文件",                  IDMN_CLOSE_LIN  
  42.         MENUITEM SEPARATOR  
  43.         MENUITEM "&R装入区",                    IDMN_LOAD_REG  
  44.         MENUITEM "存   区",                     IDMN_SAVE_REG  
  45.         MENUITEM "换名存区",                    IDMN_SAVE_REG_AS  
  46.         MENUITEM "关闭区文件",                  IDMN_CLOSE_REG  
  47.         MENUITEM SEPARATOR  
  48.         MENUITEM "关闭文件",                    IDMN_CLOSE_FILE, GRAYED  
  49.         MENUITEM "&X退  出",                    IDMN_EXIT  
  50.     END  
  51.     POPUP "&W窗口"  
  52.     BEGIN  
  53.         MENUITEM "&L放大窗口",                  IDMN_ENLG_WIN_C, GRAYED  
  54.         MENUITEM "&S缩小窗口",                  IDMN_REDU_WIN_C, GRAYED  
  55.         MENUITEM "&M移动窗口",                  IDMN_MOVE_WIN_C, GRAYED  
  56.         MENUITEM "&R复位窗口",                  IDMN_REST_WIN_C, GRAYED  
  57.         MENUITEM "&U更新窗口",                  IDMN_UPDT_WIN_C, GRAYED  
  58.         MENUITEM "&C清窗口",                    IDMN_CLEA_WIN_C, GRAYED  
  59.     END  
  60.     POPUP "&O选择"  
  61.     BEGIN  
  62.         MENUITEM "&V修改环境",                  IDMN_MOD_ENV  
  63.         MENUITEM SEPARATOR  
  64.         MENUITEM "&S坐标点可见?",               IDMN_DOT_VIEWABLE  
  65.         MENUITEM "&A弧段可见?",                 IDMN_ARC_VIEWABLE  
  66.         MENUITEM "&O还原显示?",                 IDMN_ORIGNAL_DISP  
  67.     END  
  68.     POPUP "&H帮助"  
  69.     BEGIN  
  70.         MENUITEM "关于系统",                    IDMN_ABOUT  
  71.     END  
  72.     POPUP "&T常用工具"  
  73.     BEGIN  
  74.         MENUITEM "输出VCT top0",                IDMN_VCT_EXPORT  
  75.         MENUITEM "doubleToString一个实例",      IDMN_D2A  
  76.     END  
  77. END  
  78.   
  79.   
  80. #ifdef APSTUDIO_INVOKED  
  81. /////////////////////////////////////////////////////////////////////////////  
  82. //  
  83. // TEXTINCLUDE  
  84. //  
  85.   
  86. 1 TEXTINCLUDE DISCARDABLE   
  87. BEGIN  
  88.     "resource.h\0"  
  89. END  
  90.   
  91. 2 TEXTINCLUDE DISCARDABLE   
  92. BEGIN  
  93.     "#include ""afxres.h""\r\n"  
  94.     "\0"  
  95. END  
  96.   
  97. 3 TEXTINCLUDE DISCARDABLE   
  98. BEGIN  
  99.     "\r\n"  
  100.     "\0"  
  101. END  
  102.   
  103. #endif    // APSTUDIO_INVOKED  
  104.   
  105.   
  106. /////////////////////////////////////////////////////////////////////////////  
  107. //  
  108. // Dialog  
  109. //  
  110.   
  111. IDD_DIALOG_VCT_EXP DIALOG DISCARDABLE  0, 0, 216, 166  
  112. STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU  
  113. CAPTION "VCT导出功能"  
  114. FONT 10, "System"  
  115. BEGIN  
  116.     DEFPUSHBUTTON   "确定",IDOK,78,145,50,14  
  117.     PUSHBUTTON      "关闭",IDCANCEL,159,145,50,14  
  118.     GROUPBOX        "请选择要输出的图层:",IDC_STATIC,7,7,202,99  
  119.     CONTROL         "List1",IDC_LIST1,"SysListView32",LVS_REPORT |   
  120.                     LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_AUTOARRANGE |   
  121.                     WS_BORDER | WS_GROUP | WS_TABSTOP,13,18,190,84  
  122.     LTEXT           "输出vct文件路径:",IDC_STATIC,13,110,94,10  
  123.     EDITTEXT        IDC_EDIT1,14,122,192,10,ES_AUTOHSCROLL  
  124.     PUSHBUTTON      "...",IDC_BTN_SAVEVCTAS,176,110,29,12  
  125. END  
  126.   
  127.   
  128. /////////////////////////////////////////////////////////////////////////////  
  129. //  
  130. // DESIGNINFO  
  131. //  
  132.   
  133. #ifdef APSTUDIO_INVOKED  
  134. GUIDELINES DESIGNINFO DISCARDABLE   
  135. BEGIN  
  136.     IDD_DIALOG_VCT_EXP, DIALOG  
  137.     BEGIN  
  138.         LEFTMARGIN, 7  
  139.         RIGHTMARGIN, 209  
  140.         TOPMARGIN, 7  
  141.         BOTTOMMARGIN, 159  
  142.     END  
  143. END  
  144. #endif    // APSTUDIO_INVOKED  
  145.   
  146. #endif    // Chinese (中国) resources  
  147. /////////////////////////////////////////////////////////////////////////////  
  148.   
  149.   
  150.   
  151. #ifndef APSTUDIO_INVOKED  
  152. /////////////////////////////////////////////////////////////////////////////  
  153. //  
  154. // Generated from the TEXTINCLUDE 3 resource.  
  155. //  
  156.   
  157.   
  158. /////////////////////////////////////////////////////////////////////////////  
  159. #endif    // not APSTUDIO_INVOKED  

//MainFrm.cpp文件内容如下所示:
  1. #include "stdafx.h"  
  2. #include "resource.h"  
  3. #include <stdio.h>  
  4. //引用mapgis库头文件  
  5. #include "win_area.h"  
  6. #include "win_oper.h"  
  7. #include "map_out.h"  
  8. //  
  9. #include "demo.h"  
  10. //应用程序标题  
  11. char* AppTitle="mapgis6.7二次开发vc6_demo";  
  12. //  
  13. HINSTANCE     HInst;                       //实例句柄  
  14. HWND          MainWnd=NULL;                //主窗口句柄  
  15. HWND          GrpWnd=NULL;                 //图形窗口句柄  
  16. HCURSOR       DefHCursor=NULL;             //绘图窗口缺省光标  
  17. HCURSOR       LargeHCursor=NULL;           //绘图窗口放大光标  
  18. HCURSOR       ReduceHCursor=NULL;          //绘图窗口缩小光标  
  19. HCURSOR       CrossHCursor=NULL;           //绘图窗口十字光标  
  20. int           ComState=0;                  //菜单命令状态  
  21. int           CurState=0;                  //当前操作状态  
  22. AREA_HINST    AHInst;  
  23.   
  24. //==============   启动入口   ================//  
  25. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,  
  26.                      LPSTR lpszCmdLine, int nCmdShow )  
  27. {  
  28.      MSG        msg;  
  29.      HACCEL hlpAccel=NULL;                  //加速键表  
  30.      if(hPrevInstance)        return(FALSE);  
  31.      //初始化工作区  
  32.     AHInst=_InitWorkArea(hInstance);  
  33.     HInst = hInstance;  
  34.     //初始化窗体  
  35.     if(!_InitWindow(nCmdShow))  return(FALSE);  
  36.     //装载快捷键  
  37.     hlpAccel=LoadAccelerators(HInst,(LPCTSTR)IDC_DEMO);  
  38.     //消息循环  
  39.     while(GetMessage(&msg,NULL,0,0)){           
  40.          if(!TranslateAccelerator(MainWnd,hlpAccel,&msg)){               
  41.              TranslateMessage(&msg);  
  42.              DispatchMessage(&msg);  
  43.          }  
  44.     }  
  45.     return(msg.wParam);  
  46. }  
  47.   
  48. BOOL _InitWindow(int nCmdShow){  
  49.     if(!_InitWindowFirst())   return(FALSE);  
  50.     if(!_InitWindowEvery(nCmdShow))  return(FALSE);  
  51.     return(TRUE);  
  52. }  
  53.   
  54. //创建窗体  
  55. //初始化窗体第一次  
  56. BOOL _InitWindowFirst(){  
  57.          WNDCLASS    wc;  
  58.     DefHCursor=LoadCursor(NULL,IDC_ARROW);               //绘图窗口缺省光标  
  59.     wc.style        =CS_HREDRAW | CS_VREDRAW ;  
  60.     wc.lpfnWndProc  =(WNDPROC)WndProc;             //设置回调函数WndProc  
  61.     wc.cbClsExtra   =0;  
  62.     wc.cbWndExtra   =0;  
  63.     wc.hInstance    =HInst;  
  64.     wc.hIcon        =NULL;                   //LoadIcon(hInstance,"MAP_EDIT");  
  65.     wc.hCursor      =DefHCursor;     //LoadCursor(NULL,IDC_ARROW);  
  66.     wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);  
  67.     wc.lpszMenuName =(LPCSTR)IDC_DEMO;    //指定菜单栏  
  68.     wc.lpszClassName="ClipMainClass";  
  69.     RegisterClass(&wc);  
  70.   
  71.     wc.lpfnWndProc  =(WNDPROC)GrpProc;            //设置回调函数GrpProc  
  72.     wc.cbClsExtra   =sizeof(WORD);  
  73.     wc.hIcon        =NULL;  
  74.     wc.lpszMenuName =NULL;  
  75.     wc.hCursor      =DefHCursor;     //LoadCursor(hInstance,"EditCurPen");  
  76.     wc.lpszClassName="ClipGrpClass";      
  77.     RegisterClass(&wc);  
  78.     return(1);  
  79. }  
  80.   
  81. //初始化窗体Every  
  82. BOOL _InitWindowEvery(int nCmdShow){  
  83.          HMENU    hmn;  
  84.          char    wndName[32];  
  85.     _ShowMapGisBmp();  
  86.     hmn=LoadMenu(HInst,(LPCSTR)IDC_DEMO);  //加载菜单栏  
  87.     LoadString(HInst,4,wndName,32);    //wndName      
  88.     MainWnd=CreateWindow("ClipMainClass",(LPCSTR)AppTitle,  
  89.                            WS_OVERLAPPEDWINDOW,  
  90.                            CW_USEDEFAULT,               // Default horizontal position.  
  91.                            CW_USEDEFAULT,              // Default vertical position.  
  92.                            CW_USEDEFAULT,                    // Default width.  
  93.                            CW_USEDEFAULT,               // Default height.  
  94.                            NULL,                           // Overlapped windows have no parent.  
  95.                            hmn,                              // Use the window class menu.  
  96.                            HInst,                    // This instance owns this window.  
  97.                            NULL);  
  98.     ShowWindow(MainWnd,nCmdShow);  
  99.     UpdateWindow(MainWnd);  
  100.     _CloseMapGisBmp();  
  101.     if(MainWnd==NULL)  
  102.          return(FALSE);  
  103.     return(TRUE);  
  104. }  
  105. //装载我的光标函数(从BAS60.DLL组件中)  
  106. short LoadMyCursor(void){  
  107.     HINSTANCE   hinst;  
  108.     hinst=GetModuleHandle("BAS60.DLL");  
  109.     LargeHCursor=LoadCursor(hinst,"LargeCursor");       //绘图窗口放大光标  
  110.     ReduceHCursor=LoadCursor(hinst,"ReduceCursor");     //绘图窗口缩小光标  
  111.     CrossHCursor=LoadCursor(hinst,"CrossCursor");        //绘图窗口十字光标  
  112.     return(1);  
  113. }  
  114. //释放我的光标函数  
  115. short DestroyMyCursor(void){  
  116.     DestroyCursor(LargeHCursor);  
  117.     DestroyCursor(ReduceHCursor);  
  118.     DestroyCursor(CrossHCursor);  
  119.     return(1);  
  120. }  
  121. //创建Grp窗体 函数  
  122. int CreateGrpWindow(HWND hWnd){  //AppTitle  
  123.      GrpWnd=CreateWindow(  
  124.                          (LPCSTR)"ClipGrpClass",  
  125.                          (LPCSTR)AppTitle,  
  126.                          WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL,  
  127.                          CW_USEDEFAULT,  
  128.                          CW_USEDEFAULT,  
  129.                          CW_USEDEFAULT,  
  130.                          CW_USEDEFAULT,  
  131.                          hWnd,  
  132.                          NULL,  
  133.                          HInst,  
  134.                          NULL  
  135.                         );  
  136.      if(GrpWnd==NULL){            
  137.           PostQuitMessage(0);  
  138.           return(0);  
  139.      }  
  140.      return(1);  
  141. }  
  142.   
  143. //修改Grp窗体尺寸函数  
  144. void ModifyGrpWndSize(LPARAM lParam){  
  145.     MoveWindow(GrpWnd, 0, 0,LOWORD(lParam),HIWORD(lParam),TRUE);  
  146.     return;  
  147. }  
  148. //窗体事件回调函数  
  149. LRESULT CALLBACK  WndProc (HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam){  
  150.     switch(msg){  
  151.          case WM_CREATE:  
  152.                   CreateGrpWindow(hWnd);  
  153.                   LoadMyCursor();  
  154.                   break;  
  155.          case WM_COMMAND:  
  156.                   return(DoWMCommand(hWnd,wParam,lParam));  
  157.          case WM_SIZE:  
  158.                   ModifyGrpWndSize(lParam);  
  159.                   break;  
  160.          case WM_CLOSE:   //关闭窗体  
  161.                   if(_CloseAllArea(AHInst)==IDCANCEL)  
  162.                        break;  
  163.                   DestroyWindow(hWnd);  
  164.                   break;  
  165.          case WM_DESTROY:  
  166.                   DestroyWindow(GrpWnd);  
  167.                   DestroyMyCursor();  
  168.                   PostQuitMessage(0);  
  169.                   break;  
  170.          case WM_SYSCOMMAND:  
  171.                   _ProcSYSCOMMAND(GrpWnd,msg,wParam,lParam);  
  172.                   return(DefWindowProc(hWnd,msg,wParam,lParam));  
  173.                   break;  
  174.          case WM_ACTIVATE:  
  175.                   _ProcACTIVATE(GrpWnd,msg,wParam,lParam);  
  176.                   return(DefWindowProc(hWnd,msg,wParam,lParam));  
  177.          default:  
  178.                   return(DefWindowProc(hWnd,msg,wParam,lParam));  
  179.     }  
  180.     return(0);  
  181. }  
  182. //Grp回调函数  
  183. LRESULT CALLBACK  GrpProc(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam){  
  184.     LRESULT rtn=0;  
  185.     switch(msg){           
  186.          case WM_CREATE:  
  187.                   _SetPaintFunction(hWnd,_OwnerDraw);  
  188.                   _LockScrollRange(hWnd);  
  189.                   break;  
  190.          case WM_COMMAND:   //命令处理函数  
  191.                   return(DoWMCommand(hWnd,wParam,lParam));  
  192.          case WM_PAINT:  
  193.                   _ProcPAINT(hWnd,msg,wParam,lParam);  
  194.                   break;    
  195.          case WM_LBUTTONDOWN:   //左键按下mouse事件  
  196.                   _ProcLBUTTONDOWN(hWnd,msg,wParam,lParam);  
  197.                   break;  
  198.          case WM_LBUTTONUP:     //左键按上mouse事件  
  199.                   _ProcLBUTTONUP(hWnd,msg,wParam,lParam);  
  200.                   _EnableWinMenu();  
  201.                   break;  
  202.          case WM_MOUSEMOVE:     //移动mouse事件  
  203.                   _ProcMOUSEMOVE(hWnd,msg,wParam,lParam);  
  204.                   break;  
  205.          case WM_RBUTTONUP:     //右键按上mouse事件  
  206.                   _ProcRBUTTONUP(hWnd,msg,wParam,lParam);  
  207.                   _EnableWinMenu();  
  208.                   break;  
  209.          case WM_VSCROLL:       //水平scroll  
  210.                   _PopupWinImage(hWnd);  
  211.                   _VscrollMap(hWnd,msg,wParam,lParam);  
  212.                   break;  
  213.          case WM_HSCROLL:       //垂直scroll  
  214.                   _PopupWinImage(hWnd);  
  215.                   _HscrollMap(hWnd,msg,wParam,lParam);  
  216.                   break;  
  217.          case WM_DESTROY:  
  218.                   _DelWinParam(hWnd);  
  219.                   break;  
  220.          default:  
  221.              switch(msg) {                   
  222.                   case WM_SYSCOMMAND:  
  223.                           _ProcSYSCOMMAND(hWnd,msg,wParam,lParam);  
  224.                           break;  
  225.                   case WM_ACTIVATE:  
  226.                           _ProcACTIVATE(hWnd,msg,wParam,lParam);  
  227.                           break;  
  228.                   case WM_SETCURSOR:  
  229.                           _ProcSETCURSOR(hWnd,wParam,lParam);  
  230.                           break;  
  231.              }  
  232.              rtn=DefWindowProc(hWnd,msg,wParam,lParam);  
  233.              break;  
  234.     }  
  235.     return(rtn);  
  236. }  
  237.   
  238. void SetDotViewableFlag(HWND hwnd){  
  239.   //修改坐标点可见标志  
  240.     HMENU    hmn;  
  241.     BOOL fOwnerDraw;  
  242.     hmn=GetMenu(MainWnd);  
  243.     fOwnerDraw=GetMenuState(hmn, IDMN_DOT_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;  
  244.     CheckMenuItem(hmn, IDMN_DOT_VIEWABLE,  MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));  
  245.     DrawMenuBar(MainWnd);  
  246.     return;  
  247. }  
  248.   
  249.   
  250. void SetArcViewableFlag(HWND hwnd)  
  251.   {//弧段可见标志  
  252.          HMENU    hmn;  
  253.          BOOL fOwnerDraw;  
  254.     hmn=GetMenu(MainWnd);  
  255.     fOwnerDraw=GetMenuState(hmn, IDMN_ARC_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;  
  256.     CheckMenuItem(hmn, IDMN_ARC_VIEWABLE,  MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));  
  257.     DrawMenuBar(MainWnd);  
  258.     return;  
  259. }  
  260.   
  261. void SetOrignalDispFlag(HWND hwnd)  
  262.   {//还原显示标志  
  263.          HMENU    hmn;  
  264.          BOOL fOwnerDraw;  
  265.     hmn=GetMenu(MainWnd);  
  266.     fOwnerDraw=GetMenuState(hmn, IDMN_ORIGNAL_DISP,  MF_BYCOMMAND)&MF_CHECKED;  
  267.     CheckMenuItem(hmn, IDMN_ORIGNAL_DISP,  MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));  
  268.     DrawMenuBar(MainWnd);  
  269.     InvalidateRect(hwnd,NULL,TRUE);  
  270.     UpdateWindow(hwnd);  
  271.     return;  
  272. }  
  273.   
  274.   
  275. int DoWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)  
  276. {   //执行window message命令  
  277.     if(GetMenuState(GetMenu(MainWnd),LOWORD(wParam),MF_BYCOMMAND)==MF_GRAYED)  
  278.     {    //获取菜单状态  
  279.          return(0);  
  280.     }  
  281.     ComState=LOWORD(wParam);  
  282.     CurState=0;  
  283.     switch(LOWORD(wParam)){  
  284.          case IDMN_EXIT: SendMessage(hWnd,WM_CLOSE,0,0);  break;  
  285.          case IDMN_NULL: break;  
  286.          case IDMN_LOAD_PNT: LoadFiles(PNT); break;  
  287.          case IDMN_LOAD_LIN: LoadFiles(LIN); break;  
  288.          case IDMN_LOAD_REG: LoadFiles(REG); break;  
  289.          case IDMN_SAVE_PNT: SaveFiles(PNT); break;  
  290.          case IDMN_SAVE_LIN: SaveFiles(LIN); break;  
  291.          case IDMN_SAVE_REG: SaveFiles(REG); break;  
  292.          case IDMN_SAVE_PNT_AS: SaveFilesAs(PNT);break;  
  293.          case IDMN_SAVE_LIN_AS: SaveFilesAs(LIN);break;  
  294.          case IDMN_SAVE_REG_AS: SaveFilesAs(REG);break;  
  295.          case IDMN_CLOSE_PNT: CloseFiles(PNT);break;  
  296.          case IDMN_CLOSE_LIN: CloseFiles(LIN);break;  
  297.          case IDMN_CLOSE_REG: CloseFiles(REG);break;  
  298.          case IDMN_CLOSE_FILE:CloseFiles(-1);break;  
  299.          //  
  300.          case IDMN_MOVE_WIN_C:  
  301.                   _PopupWinImage(GrpWnd);  
  302.                   break;  
  303.          case IDMN_UPDT_WIN_C:  
  304.                   _PopupWinImage(GrpWnd);  
  305.                   InvalidateRect(GrpWnd,NULL,TRUE);  
  306.                   break;  
  307.          case IDMN_ENLG_WIN_C:    //放大窗体                    
  308.                   DefHCursor=LargeHCursor;  //设置光标样式  
  309.                   break;  
  310.          case IDMN_REDU_WIN_C:    //缩小窗体   
  311.                   DefHCursor=ReduceHCursor;  //设置光标样式  
  312.                   break;  
  313.          case IDMN_PREV_WIN:    //"上级窗口"  
  314.                   _PrevWindow(GrpWnd);  
  315.                   break;  
  316.          case IDMN_REST_WIN_C:  
  317.                   _PopupWinImage(GrpWnd);  
  318.                   _RestoreWindow(GrpWnd,NULL,RW_SEL_AREA,AHInst);  
  319.                   break;  
  320.          case IDMN_CLEA_WIN_C:  
  321.                   _PopupWinImage(GrpWnd);  
  322.                   InvalidateRect(GrpWnd,NULL,TRUE);  
  323.                   break;  
  324.          case IDMN_MOD_ENV:                 //环境设置  
  325.                   _ModEnv(hWnd);  
  326.                   break;  
  327.          case IDMN_DOT_VIEWABLE:            /*坐标点可见*/  
  328.                   SetDotViewableFlag(hWnd);  
  329.                   break;  
  330.          case IDMN_ARC_VIEWABLE:            /*弧段可见*/  
  331.                   SetArcViewableFlag(hWnd);  
  332.                   break;  
  333.          case IDMN_ORIGNAL_DISP:              /*还原显示*/  
  334.                   SetOrignalDispFlag(GrpWnd);  
  335.                   break;  
  336.          case IDMN_ABOUT:                   //关于系统  
  337.                   _DispAbout();  
  338.                   break;  
  339.          case IDMN_VCT_EXPORT:              //VCT导出 topo 0  
  340.              {  
  341.                  Vct_Export();                 
  342.              }  
  343.              break;  
  344.          case IDMN_D2A:  //double转string 一个实例  
  345.              {  
  346.                  D2A_test();  
  347.              }  
  348.              break;  
  349.          default:  
  350.                   if((LOWORD(wParam)>=IDMN_NUM_ENLG_1)&&  
  351.                      (LOWORD(wParam)<=IDMN_NUM_ENLG_16))  
  352.                       {//固定放大,重新设置窗口显示比例  
  353.                       _ResetWinDispRate(GrpWnd,LOWORD(wParam)-IDMN_NUM_ENLG_1+1.0);  
  354.                       _PopupWinImage(GrpWnd);  
  355.                       InvalidateRect(GrpWnd,NULL,TRUE);  
  356.                   }  
  357.                   if((LOWORD(wParam)>=IDMN_NUM_REDU_1)&&  
  358.                      (LOWORD(wParam)<=IDMN_NUM_REDU_16))  
  359.                       {//固定缩小,重新设置窗口显示比例  
  360.                       _ResetWinDispRate(GrpWnd,1.0/(LOWORD(wParam)-IDMN_NUM_REDU_1+1.0));  
  361.                       _PopupWinImage(GrpWnd);  
  362.                       InvalidateRect(GrpWnd,NULL,TRUE);  
  363.                   }  
  364.                   break;  
  365.     }  
  366.     _EnableWinMenu();  
  367.     return(0);  
  368. }  
  369.   
  370. //判断 菜单栏的可用性函数  
  371. void _EnableWinMenu(void)  
  372.   {  
  373.          HMENU    hmn;  
  374.          UINT    flag;  
  375.          short  i,n;  
  376.     n=_GetAreaNumber(AHInst);       //取打开的工作区数  
  377.     flag=(n)?MF_ENABLED:MF_GRAYED;  //n>0表示可用,n<=0表示不可用  
  378.     hmn=GetMenu(MainWnd);  
  379.     //文件  
  380.     EnableMenuItem(hmn, IDMN_CLOSE_FILE        ,MF_BYCOMMAND|flag);  
  381.     //窗口  
  382.     EnableMenuItem(hmn, IDMN_ENLG_WIN_C   ,MF_BYCOMMAND|flag);  
  383.     EnableMenuItem(hmn, IDMN_REDU_WIN_C   ,MF_BYCOMMAND|flag);  
  384.     EnableMenuItem(hmn, IDMN_MOVE_WIN_C   ,MF_BYCOMMAND|flag);  
  385.     EnableMenuItem(hmn, IDMN_REST_WIN_C   ,MF_BYCOMMAND|flag);  
  386.     EnableMenuItem(hmn, IDMN_UPDT_WIN_C   ,MF_BYCOMMAND|flag);  
  387.     EnableMenuItem(hmn, IDMN_CLEA_WIN_C   ,MF_BYCOMMAND|flag);  
  388.     EnableMenuItem(hmn, IDMN_PREV_WIN     ,MF_BYCOMMAND|flag);  
  389.     for(i=0;i<16;i++)  
  390.     {  
  391.          EnableMenuItem(hmn, IDMN_NUM_ENLG_1+i,MF_BYCOMMAND|flag);  
  392.          EnableMenuItem(hmn, IDMN_NUM_REDU_1+i,MF_BYCOMMAND|flag);  
  393.     }  
  394.     DrawMenuBar(MainWnd);  
  395.     if(GetMenuState(GetMenu(MainWnd),ComState,MF_BYCOMMAND)==MF_GRAYED)  
  396.          ComState=0;  
  397.     switch(ComState)  
  398.     {  
  399.          case IDMN_ENLG_WIN:  
  400.                   SetClassLong(GrpWnd,GCL_HCURSOR,(LONG)LargeHCursor);  
  401.                   break;  
  402.          case IDMN_REDU_WIN:  
  403.                   SetClassLong(GrpWnd,GCL_HCURSOR,(LONG)ReduceHCursor);  
  404.                   break;  
  405.          case IDMN_MOVE_WIN:  
  406.          case IDMN_UPDT_WIN:  
  407.          case IDMN_REST_WIN:  
  408.          case IDMN_CLEA_WIN:  
  409.          case IDMN_PREV_WIN:  
  410.          default:  
  411.                   SetClassLong(GrpWnd, GCL_HCURSOR,(LONG)DefHCursor);  
  412.                   break;   
  413.     }  
  414.     return;  
  415. }  
  416.   
  417. //======================================================//  
  418. ///{文件处理  
  419. short LoadFiles(short ftype)  
  420.   {  
  421.          short   ai;  
  422.     ai=_OpenArea(AHInst,ftype);  
  423.     if(ai<=0)  
  424.          return(0);  
  425.     if(!_LoadFile(ai))  
  426.          {  
  427.          _CloseArea(ai);  
  428.          return(0);  
  429.     }  
  430.     _PopupWinImage(GrpWnd);  
  431.     _RestoreWindow(GrpWnd,NULL,RW_ALL_AREA,AHInst);  
  432.     return(ai);  
  433. }  
  434.   
  435. short CloseFiles(short type)  
  436.   {  
  437.          short *ptArea=NULL;  
  438.          char  nmStr[32];  
  439.          short i;  
  440.     LoadString(HInst,3,nmStr,32);  
  441.     ptArea=_SelectAreaList(AHInst,MainWnd,type,nmStr);  
  442.     if(ptArea==NULL)  
  443.          return(0);  
  444.     for(i=1;i<=ptArea[0];i++)  
  445.          _CloseArea(ptArea[i]);  
  446.     _PopupWinImage(GrpWnd);  
  447.     _RestoreWindow(GrpWnd,NULL,RW_ALL_AREA,AHInst);  
  448.     return(1);  
  449. }  
  450.    
  451.   
  452. short SaveFiles(short type)  
  453. {  
  454.     short *areaLst;  
  455.     short i;  
  456.     areaLst=_SelectAreaList(AHInst,MainWnd,type,"选择保存文件");  
  457.     if(areaLst==NULL)      return(0);  
  458.     for(i=1;i<=areaLst[0];i++)  
  459.              _SaveFile(areaLst[i]);  
  460.     return(1);  
  461. }  
  462.    
  463.   
  464. short SaveFilesAs(short type)  
  465. {  
  466.     short *areaLst;  
  467.     short i;  
  468.     areaLst=_SelectAreaList(AHInst,MainWnd,type,"选择另存文件");  
  469.     if(areaLst==NULL)  
  470.        return(0);  
  471.     for(i=1;i<=areaLst[0];i++)  
  472.        _SaveFileAs(areaLst[i]);  
  473.     return(1);  
  474. }  
  475.   
  476.    
  477.   
  478. //------------------------------------------------//  
  479. //{显示 线点 函数  
  480. short DispLinDot(HDC hdc,WIN_ORG *wxy,short ai)  
  481. {  
  482.          long  i,j,ln;  
  483.          D_DOT *lxy;  
  484.          long  len;  
  485.          int   x,y;  
  486.          HANDLE hdpen;  
  487.     //选择pen对象  
  488.     hdpen=SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(255,0,0)));  
  489.     _GetLinNum(ai,&i,&ln);  
  490.     for(i=1;i<ln;i++)  
  491.          {  
  492.          if(_GetLin(ai,i,&lxy,&len,NULL)<=0)  
  493.              continue;  
  494.          for(j=0;j<len;j++,lxy++)  
  495.              {  
  496.              x=(int)((lxy->x-wxy->x0)*wxy->r);  
  497.              y=(int)((lxy->y-wxy->y0)*wxy->r);  
  498.              MoveToEx(hdc,x-2,y,NULL);  
  499.              LineTo(hdc,x+2,y);  
  500.              MoveToEx(hdc,x,y-2,NULL);  
  501.              LineTo(hdc,x,y+2);  
  502.          }  
  503.     }  
  504.     //删除pen对象  
  505.     DeleteObject(SelectObject(hdc,hdpen));  
  506.     return(1);  
  507. }  
  508. //..........................PAINTSTRUCT *ps  
  509. //重新显示图形  
  510. void _ReDispGraph(HWND hWnd,MyDC myDC,short *dsp)  
  511.   {  
  512.          short ti,i,type;  
  513.          D_RECT frc;  
  514.          RECT   rc,wrc;  
  515.          short  rt;  
  516.          WIN_ORG         wxy;  
  517.          PAINTSTRUCT *ps;  
  518.          HMENU    hmn;  
  519.          BOOL    arcView;  
  520.          BOOL       dotView;  
  521.     if(ComState==IDMN_CLEA_WIN){           
  522.          ComState=IDMN_NULL;  
  523.          return;  
  524.     }  
  525.     if(dsp==NULL)  return;  
  526.     //  
  527.     hmn=GetMenu(MainWnd);  
  528.     if(MF_CHECKED & GetMenuState(hmn, IDMN_ORIGNAL_DISP,  MF_BYCOMMAND))  
  529.     {  
  530.          _SetOriginalDisp(myDC,1);  
  531.     }  
  532.     arcView=GetMenuState(hmn, IDMN_ARC_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;  
  533.     dotView=GetMenuState(hmn, IDMN_DOT_VIEWABLE,  MF_BYCOMMAND)&MF_CHECKED;  
  534.     ps=_GetPaintStruct(myDC);  
  535.     rc=ps->rcPaint;  
  536.     _StartWait();  
  537.     GetClientRect(hWnd,&wrc);  
  538.     if(!_GetWinDispParam(hWnd,&wxy))  
  539.          return;  
  540.     frc.xmin=rc.left/wxy.r +wxy.x0-1;  
  541.     frc.xmax=rc.right/wxy.r+wxy.x0+1;  
  542.     frc.ymin=(wrc.bottom-rc.bottom)/wxy.r+wxy.y0-1;  
  543.     frc.ymax=(wrc.bottom-rc.top)/wxy.r   +wxy.y0+1;  
  544.     _SetMyDCMode(myDC);  
  545.     _SetMyDCPalette(myDC);  
  546.     _SetDispRect(myDC,&frc);    //设置显示范围  
  547.     _SetDispParam(myDC,wxy.x0,wxy.y0,wxy.r);  
  548.     for(ti=0;ti<4;ti++)   //循环3次,依次显示 区,线,点,网  
  549.     {  
  550.          switch(ti)  
  551.              {  
  552.              case 0: type=REG; break;  
  553.              case 1: type=NET; break;  
  554.              case 2: type=LIN; break;  
  555.              case 3: type=PNT; break;  
  556.          }  
  557.          for(i=1;i<=dsp[0];i++)  
  558.              {  
  559.              if(type!=_GetAreaType(dsp[i]))  
  560.                   continue;  
  561.              switch(type)  
  562.                   {  
  563.                   case PNT: rt=_DispPntArea(myDC,dsp[i]); break;  
  564.                   case LIN: rt=_DispLinArea(myDC,dsp[i]);  
  565.                             if(dotView)  
  566.                                 DispLinDot(ps->hdc,&wxy,dsp[i]);  
  567.                             break;  
  568.                   case REG: rt=_DispRegArea(myDC,dsp[i]);  
  569.                             if(arcView)  
  570.                                 _DispLinArea(myDC,dsp[i]);  
  571.                             if(dotView)  
  572.                                 DispLinDot(ps->hdc,&wxy,dsp[i]);  
  573.                             break;  
  574.                   case NET: rt=_DispLinArea(myDC,dsp[i]);  
  575.                             if(dotView)  
  576.                                 DispLinDot(ps->hdc,&wxy,dsp[i]);  
  577.                             break;  
  578.                   default:  break;  
  579.              }  
  580.              if(rt==0)  
  581.                   goto redispEND;  
  582.          }  
  583.     }  
  584. redispEND:  
  585.     _EndWait();  
  586.     return;  
  587. }  
  588.   
  589.    
  590.   
  591. //.....................................................................PAINTSTRUCT *ps)  
  592. //自己绘制函数  
  593. void WINAPI _OwnerDraw(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam,MyDC myDC)  
  594. {  
  595.     int    state;  
  596.     short *ptALst=NULL;           //显示工作区表  
  597.     state=CurState;  
  598.     CurState=PAINTING;  
  599.     if((ptALst=_GetDispAreaListAddr(hWnd))!=NULL)  
  600.     {  
  601.          _ReDispGraph(hWnd,myDC,ptALst);  
  602.     }  
  603.     CurState=state;  
  604.     return;  
  605. }  

--the---end------

--vp:hsg----

--create date:2012-04-18---

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
(转)如何做类的回调函数 - Amadeus的日志 - 网易博客
附文 委托代码生成器
菜单及其它资源
2 智能手机Smartphone开发从零起步
孙鑫VC视频教程笔记之第一课“Windows程序的内部运行原理”
SubClassWindow,SubClassDlgItem
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服