mapgis6.7二次开发vc6_demo 之一(主窗体构架)
本文根据mapgis6.7 sdk开发包中实例程序和help.chm帮助文件
进行的学习心得总结:
//stdafx.h文件内容如下所示 :
#include <windows.h>
//#include "demo.h" 文件内容如下所示 :
- //#include "demo.h"
- #if !defined(AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_)
-
- #define AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_
-
- #if _MSC_VER > 1000
-
- #pragma once
-
- #endif // _MSC_VER > 1000
-
- #include "resource.h"
-
- #include "string.h"
- #include <iostream>
- #include <comutil.h>
- using namespace std;
-
- //定义函数声明
-
- int DoWMCommand( HWND hWnd, WPARAM wParam, LPARAM lParam);
-
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- LRESULT CALLBACK GrpProc(HWND, UINT, WPARAM, LPARAM);
-
- BOOL _InitWindow(int nCmdShow);
- BOOL _InitWindowFirst(void);
- BOOL _InitWindowEvery(int nCmdShow);
-
- void _EnableWinMenu(void);
-
- short LoadFiles(short type);
- short SaveFiles(short type);
- short SaveFilesAs(short type);
- short CloseFiles(short type);
- void DispADotLable(HDC hdc,long i);
- void DispAllDotLable(HDC hdc);
- void _DispAbout(void);
- //
- void _ProcLBUTTONDOWN(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
- void _ProcLBUTTONUP( HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
- void _ProcMOUSEMOVE( HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
- void _ProcRBUTTONUP(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam);
- void _ProcSETCURSOR(HWND hWnd,WPARAM wParam, LPARAM lParam);
-
- //
- void ShowMsg(char* msg);
- void Vct_Export();
- void D2A_test();
-
- //common op function 公共操作函数
- char* i2cp(int n);
- char* l2cp(long n);
- char* d2cp(double value);
- char* short2cp(short value);
- char* getdir_lc(char* s,const char* d);
- char* getfilename_lc(char* s,const char* d);
- //
- char* GetDiskSpace_lc(unsigned char dsk);
- //
- char* GetCurDir(void);
- int WriteToLog(char* str);
- int WriteToLog(const char* str);
- int WriteToLog_f_delete(void);
- char* UnionStr(const char* A,const char* B);
- char* strcat_lc(const char* A,const char* B);
- const char* StrCopy(const char* src);
- char* strcpy_lc(const char* src);
- bool EqStr(const char* A,const char* B);
- bool IsNumber(string str);
- //file op function 文件操作函数
- //----------------------------
- //文件操作方法
- void f_SetFilePath(char* pfilepath);
- int f_delete(char* pfilepath);
- bool f_OpenFile_r(void);
- bool f_OpenFile_w(void);
- int f_EndFile(void);
- char* f_NextLine();
- int f_WriteLine(char* line);
- int f_FlushFile(void);
- int f_CloseFile(void);
- //----------------------------
- bool OutVctHeadBeginEnd(); //输出vct文件头
- bool OutVctFeatureCodeBeginEnd(short* ptALst); //输出vct要素代码
- bool OutVctTableStructureBeginEnd(short* ptALst); //输出vct表结构
- //输出线坐标 OK
- bool OutVctLineBeginEnd(short ai);
- //输出属性值 OK
- bool OutVctAttributeBeginEnd(short ai);
- //----------------------------
-
- #endif // !defined(AFX_DEMO_H__8E07CFE6_850E_11D4_9287_444553540000__INCLUDED_)
//Resource.h文件内容如下所示 :
- //{{NO_DEPENDENCIES}}
- // Microsoft Developer Studio generated include file.
- // Used by demo.rc
- //
- #define IDMN_NULL 0x0000
- #define PAINTING 0x0004
- #define IDD_DIALOG_VCT_EXP 102
- #define IDR_MENU1 132
- #define IDC_DEMO 132
- #define IDC_LIST1 1000
- #define IDC_EDIT1 1001
- #define IDC_BTN_SAVEVCTAS 1002
- #define IDMN_LOAD_PNT 32771
- #define IDMN_SAVE_PNT 32772
- #define IDMN_SAVE_PNT_AS 32773
- #define IDMN_CLOSE_PNT 32774
- #define IDMN_LOAD_LIN 32775
- #define IDMN_SAVE_LIN 32776
- #define IDMN_SAVE_LIN_AS 32777
- #define IDMN_CLOSE_LIN 32778
- #define IDMN_LOAD_REG 32779
- #define IDMN_SAVE_REG 32780
- #define IDMN_SAVE_REG_AS 32781
- #define IDMN_CLOSE_REG 32782
- #define IDMN_CLOSE_FILE 32783
- #define IDMN_EXIT 32784
- #define IDMN_MOD_ENV 32791
- #define IDMN_DOT_VIEWABLE 32792
- #define IDMN_ARC_VIEWABLE 32793
- #define IDMN_ORIGNAL_DISP 32794
- #define IDMN_ABOUT 32795
- #define IDMN_VCT_EXPORT 40001
- #define IDMN_ENLG_WIN_C 40002
- #define IDMN_REDU_WIN_C 40003
- #define IDMN_MOVE_WIN_C 40004
- #define IDMN_REST_WIN_C 40005
- #define IDMN_UPDT_WIN_C 40006
- #define IDMN_CLEA_WIN_C 40007
- #define IDMN_D2A 40008
-
- // Next default values for new objects
- //
- #ifdef APSTUDIO_INVOKED
- #ifndef APSTUDIO_READONLY_SYMBOLS
- #define _APS_NEXT_RESOURCE_VALUE 103
- #define _APS_NEXT_COMMAND_VALUE 40009
- #define _APS_NEXT_CONTROL_VALUE 1003
- #define _APS_NEXT_SYMED_VALUE 101
- #endif
- #endif
//demo.rc文件内容如下所示:主窗体的资源文件内容 菜单的定义
- //Microsoft Developer Studio generated resource script.
- //
- #include "resource.h"
-
- #define APSTUDIO_READONLY_SYMBOLS
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 2 resource.
- //
- #include "afxres.h"
-
- /////////////////////////////////////////////////////////////////////////////
- #undef APSTUDIO_READONLY_SYMBOLS
-
- /////////////////////////////////////////////////////////////////////////////
- // Chinese (中国) resources
-
- #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
- #ifdef _WIN32
- LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
- #pragma code_page(936)
- #endif //_WIN32
-
- /////////////////////////////////////////////////////////////////////////////
- //
- // Menu
- //
-
- IDC_DEMO MENU DISCARDABLE
- BEGIN
- POPUP "&F文件"
- BEGIN
- MENUITEM "&P装入点", IDMN_LOAD_PNT
- MENUITEM "存 点", IDMN_SAVE_PNT
- MENUITEM "换名存点", IDMN_SAVE_PNT_AS
- MENUITEM "关闭点文件", IDMN_CLOSE_PNT
- MENUITEM SEPARATOR
- MENUITEM "&L装入线", IDMN_LOAD_LIN
- MENUITEM "存 线", IDMN_SAVE_LIN
- MENUITEM "换名存线", IDMN_SAVE_LIN_AS
- MENUITEM "关闭线文件", IDMN_CLOSE_LIN
- MENUITEM SEPARATOR
- MENUITEM "&R装入区", IDMN_LOAD_REG
- MENUITEM "存 区", IDMN_SAVE_REG
- MENUITEM "换名存区", IDMN_SAVE_REG_AS
- MENUITEM "关闭区文件", IDMN_CLOSE_REG
- MENUITEM SEPARATOR
- MENUITEM "关闭文件", IDMN_CLOSE_FILE, GRAYED
- MENUITEM "&X退 出", IDMN_EXIT
- END
- POPUP "&W窗口"
- BEGIN
- MENUITEM "&L放大窗口", IDMN_ENLG_WIN_C, GRAYED
- MENUITEM "&S缩小窗口", IDMN_REDU_WIN_C, GRAYED
- MENUITEM "&M移动窗口", IDMN_MOVE_WIN_C, GRAYED
- MENUITEM "&R复位窗口", IDMN_REST_WIN_C, GRAYED
- MENUITEM "&U更新窗口", IDMN_UPDT_WIN_C, GRAYED
- MENUITEM "&C清窗口", IDMN_CLEA_WIN_C, GRAYED
- END
- POPUP "&O选择"
- BEGIN
- MENUITEM "&V修改环境", IDMN_MOD_ENV
- MENUITEM SEPARATOR
- MENUITEM "&S坐标点可见?", IDMN_DOT_VIEWABLE
- MENUITEM "&A弧段可见?", IDMN_ARC_VIEWABLE
- MENUITEM "&O还原显示?", IDMN_ORIGNAL_DISP
- END
- POPUP "&H帮助"
- BEGIN
- MENUITEM "关于系统", IDMN_ABOUT
- END
- POPUP "&T常用工具"
- BEGIN
- MENUITEM "输出VCT top0", IDMN_VCT_EXPORT
- MENUITEM "doubleToString一个实例", IDMN_D2A
- END
- END
-
-
- #ifdef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // TEXTINCLUDE
- //
-
- 1 TEXTINCLUDE DISCARDABLE
- BEGIN
- "resource.h\0"
- END
-
- 2 TEXTINCLUDE DISCARDABLE
- BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
- END
-
- 3 TEXTINCLUDE DISCARDABLE
- BEGIN
- "\r\n"
- "\0"
- END
-
- #endif // APSTUDIO_INVOKED
-
-
- /////////////////////////////////////////////////////////////////////////////
- //
- // Dialog
- //
-
- IDD_DIALOG_VCT_EXP DIALOG DISCARDABLE 0, 0, 216, 166
- STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
- CAPTION "VCT导出功能"
- FONT 10, "System"
- BEGIN
- DEFPUSHBUTTON "确定",IDOK,78,145,50,14
- PUSHBUTTON "关闭",IDCANCEL,159,145,50,14
- GROUPBOX "请选择要输出的图层:",IDC_STATIC,7,7,202,99
- CONTROL "List1",IDC_LIST1,"SysListView32",LVS_REPORT |
- LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_AUTOARRANGE |
- WS_BORDER | WS_GROUP | WS_TABSTOP,13,18,190,84
- LTEXT "输出vct文件路径:",IDC_STATIC,13,110,94,10
- EDITTEXT IDC_EDIT1,14,122,192,10,ES_AUTOHSCROLL
- PUSHBUTTON "...",IDC_BTN_SAVEVCTAS,176,110,29,12
- END
-
-
- /////////////////////////////////////////////////////////////////////////////
- //
- // DESIGNINFO
- //
-
- #ifdef APSTUDIO_INVOKED
- GUIDELINES DESIGNINFO DISCARDABLE
- BEGIN
- IDD_DIALOG_VCT_EXP, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 209
- TOPMARGIN, 7
- BOTTOMMARGIN, 159
- END
- END
- #endif // APSTUDIO_INVOKED
-
- #endif // Chinese (中国) resources
- /////////////////////////////////////////////////////////////////////////////
-
-
-
- #ifndef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 3 resource.
- //
-
-
- /////////////////////////////////////////////////////////////////////////////
- #endif // not APSTUDIO_INVOKED
//MainFrm.cpp文件内容如下所示:
- #include "stdafx.h"
- #include "resource.h"
- #include <stdio.h>
- //引用mapgis库头文件
- #include "win_area.h"
- #include "win_oper.h"
- #include "map_out.h"
- //
- #include "demo.h"
- //应用程序标题
- char* AppTitle="mapgis6.7二次开发vc6_demo";
- //
- HINSTANCE HInst; //实例句柄
- HWND MainWnd=NULL; //主窗口句柄
- HWND GrpWnd=NULL; //图形窗口句柄
- HCURSOR DefHCursor=NULL; //绘图窗口缺省光标
- HCURSOR LargeHCursor=NULL; //绘图窗口放大光标
- HCURSOR ReduceHCursor=NULL; //绘图窗口缩小光标
- HCURSOR CrossHCursor=NULL; //绘图窗口十字光标
- int ComState=0; //菜单命令状态
- int CurState=0; //当前操作状态
- AREA_HINST AHInst;
-
- //============== 启动入口 ================//
- int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR lpszCmdLine, int nCmdShow )
- {
- MSG msg;
- HACCEL hlpAccel=NULL; //加速键表
- if(hPrevInstance) return(FALSE);
- //初始化工作区
- AHInst=_InitWorkArea(hInstance);
- HInst = hInstance;
- //初始化窗体
- if(!_InitWindow(nCmdShow)) return(FALSE);
- //装载快捷键
- hlpAccel=LoadAccelerators(HInst,(LPCTSTR)IDC_DEMO);
- //消息循环
- while(GetMessage(&msg,NULL,0,0)){
- if(!TranslateAccelerator(MainWnd,hlpAccel,&msg)){
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- return(msg.wParam);
- }
-
- BOOL _InitWindow(int nCmdShow){
- if(!_InitWindowFirst()) return(FALSE);
- if(!_InitWindowEvery(nCmdShow)) return(FALSE);
- return(TRUE);
- }
-
- //创建窗体
- //初始化窗体第一次
- BOOL _InitWindowFirst(){
- WNDCLASS wc;
- DefHCursor=LoadCursor(NULL,IDC_ARROW); //绘图窗口缺省光标
- wc.style =CS_HREDRAW | CS_VREDRAW ;
- wc.lpfnWndProc =(WNDPROC)WndProc; //设置回调函数WndProc
- wc.cbClsExtra =0;
- wc.cbWndExtra =0;
- wc.hInstance =HInst;
- wc.hIcon =NULL; //LoadIcon(hInstance,"MAP_EDIT");
- wc.hCursor =DefHCursor; //LoadCursor(NULL,IDC_ARROW);
- wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
- wc.lpszMenuName =(LPCSTR)IDC_DEMO; //指定菜单栏
- wc.lpszClassName="ClipMainClass";
- RegisterClass(&wc);
-
- wc.lpfnWndProc =(WNDPROC)GrpProc; //设置回调函数GrpProc
- wc.cbClsExtra =sizeof(WORD);
- wc.hIcon =NULL;
- wc.lpszMenuName =NULL;
- wc.hCursor =DefHCursor; //LoadCursor(hInstance,"EditCurPen");
- wc.lpszClassName="ClipGrpClass";
- RegisterClass(&wc);
- return(1);
- }
-
- //初始化窗体Every
- BOOL _InitWindowEvery(int nCmdShow){
- HMENU hmn;
- char wndName[32];
- _ShowMapGisBmp();
- hmn=LoadMenu(HInst,(LPCSTR)IDC_DEMO); //加载菜单栏
- LoadString(HInst,4,wndName,32); //wndName
- MainWnd=CreateWindow("ClipMainClass",(LPCSTR)AppTitle,
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, // Default horizontal position.
- CW_USEDEFAULT, // Default vertical position.
- CW_USEDEFAULT, // Default width.
- CW_USEDEFAULT, // Default height.
- NULL, // Overlapped windows have no parent.
- hmn, // Use the window class menu.
- HInst, // This instance owns this window.
- NULL);
- ShowWindow(MainWnd,nCmdShow);
- UpdateWindow(MainWnd);
- _CloseMapGisBmp();
- if(MainWnd==NULL)
- return(FALSE);
- return(TRUE);
- }
- //装载我的光标函数(从BAS60.DLL组件中)
- short LoadMyCursor(void){
- HINSTANCE hinst;
- hinst=GetModuleHandle("BAS60.DLL");
- LargeHCursor=LoadCursor(hinst,"LargeCursor"); //绘图窗口放大光标
- ReduceHCursor=LoadCursor(hinst,"ReduceCursor"); //绘图窗口缩小光标
- CrossHCursor=LoadCursor(hinst,"CrossCursor"); //绘图窗口十字光标
- return(1);
- }
- //释放我的光标函数
- short DestroyMyCursor(void){
- DestroyCursor(LargeHCursor);
- DestroyCursor(ReduceHCursor);
- DestroyCursor(CrossHCursor);
- return(1);
- }
- //创建Grp窗体 函数
- int CreateGrpWindow(HWND hWnd){ //AppTitle
- GrpWnd=CreateWindow(
- (LPCSTR)"ClipGrpClass",
- (LPCSTR)AppTitle,
- WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- hWnd,
- NULL,
- HInst,
- NULL
- );
- if(GrpWnd==NULL){
- PostQuitMessage(0);
- return(0);
- }
- return(1);
- }
-
- //修改Grp窗体尺寸函数
- void ModifyGrpWndSize(LPARAM lParam){
- MoveWindow(GrpWnd, 0, 0,LOWORD(lParam),HIWORD(lParam),TRUE);
- return;
- }
- //窗体事件回调函数
- LRESULT CALLBACK WndProc (HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam){
- switch(msg){
- case WM_CREATE:
- CreateGrpWindow(hWnd);
- LoadMyCursor();
- break;
- case WM_COMMAND:
- return(DoWMCommand(hWnd,wParam,lParam));
- case WM_SIZE:
- ModifyGrpWndSize(lParam);
- break;
- case WM_CLOSE: //关闭窗体
- if(_CloseAllArea(AHInst)==IDCANCEL)
- break;
- DestroyWindow(hWnd);
- break;
- case WM_DESTROY:
- DestroyWindow(GrpWnd);
- DestroyMyCursor();
- PostQuitMessage(0);
- break;
- case WM_SYSCOMMAND:
- _ProcSYSCOMMAND(GrpWnd,msg,wParam,lParam);
- return(DefWindowProc(hWnd,msg,wParam,lParam));
- break;
- case WM_ACTIVATE:
- _ProcACTIVATE(GrpWnd,msg,wParam,lParam);
- return(DefWindowProc(hWnd,msg,wParam,lParam));
- default:
- return(DefWindowProc(hWnd,msg,wParam,lParam));
- }
- return(0);
- }
- //Grp回调函数
- LRESULT CALLBACK GrpProc(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam){
- LRESULT rtn=0;
- switch(msg){
- case WM_CREATE:
- _SetPaintFunction(hWnd,_OwnerDraw);
- _LockScrollRange(hWnd);
- break;
- case WM_COMMAND: //命令处理函数
- return(DoWMCommand(hWnd,wParam,lParam));
- case WM_PAINT:
- _ProcPAINT(hWnd,msg,wParam,lParam);
- break;
- case WM_LBUTTONDOWN: //左键按下mouse事件
- _ProcLBUTTONDOWN(hWnd,msg,wParam,lParam);
- break;
- case WM_LBUTTONUP: //左键按上mouse事件
- _ProcLBUTTONUP(hWnd,msg,wParam,lParam);
- _EnableWinMenu();
- break;
- case WM_MOUSEMOVE: //移动mouse事件
- _ProcMOUSEMOVE(hWnd,msg,wParam,lParam);
- break;
- case WM_RBUTTONUP: //右键按上mouse事件
- _ProcRBUTTONUP(hWnd,msg,wParam,lParam);
- _EnableWinMenu();
- break;
- case WM_VSCROLL: //水平scroll
- _PopupWinImage(hWnd);
- _VscrollMap(hWnd,msg,wParam,lParam);
- break;
- case WM_HSCROLL: //垂直scroll
- _PopupWinImage(hWnd);
- _HscrollMap(hWnd,msg,wParam,lParam);
- break;
- case WM_DESTROY:
- _DelWinParam(hWnd);
- break;
- default:
- switch(msg) {
- case WM_SYSCOMMAND:
- _ProcSYSCOMMAND(hWnd,msg,wParam,lParam);
- break;
- case WM_ACTIVATE:
- _ProcACTIVATE(hWnd,msg,wParam,lParam);
- break;
- case WM_SETCURSOR:
- _ProcSETCURSOR(hWnd,wParam,lParam);
- break;
- }
- rtn=DefWindowProc(hWnd,msg,wParam,lParam);
- break;
- }
- return(rtn);
- }
-
- void SetDotViewableFlag(HWND hwnd){
- //修改坐标点可见标志
- HMENU hmn;
- BOOL fOwnerDraw;
- hmn=GetMenu(MainWnd);
- fOwnerDraw=GetMenuState(hmn, IDMN_DOT_VIEWABLE, MF_BYCOMMAND)&MF_CHECKED;
- CheckMenuItem(hmn, IDMN_DOT_VIEWABLE, MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));
- DrawMenuBar(MainWnd);
- return;
- }
-
-
- void SetArcViewableFlag(HWND hwnd)
- {//弧段可见标志
- HMENU hmn;
- BOOL fOwnerDraw;
- hmn=GetMenu(MainWnd);
- fOwnerDraw=GetMenuState(hmn, IDMN_ARC_VIEWABLE, MF_BYCOMMAND)&MF_CHECKED;
- CheckMenuItem(hmn, IDMN_ARC_VIEWABLE, MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));
- DrawMenuBar(MainWnd);
- return;
- }
-
- void SetOrignalDispFlag(HWND hwnd)
- {//还原显示标志
- HMENU hmn;
- BOOL fOwnerDraw;
- hmn=GetMenu(MainWnd);
- fOwnerDraw=GetMenuState(hmn, IDMN_ORIGNAL_DISP, MF_BYCOMMAND)&MF_CHECKED;
- CheckMenuItem(hmn, IDMN_ORIGNAL_DISP, MF_BYCOMMAND | (fOwnerDraw ? MF_UNCHECKED : MF_CHECKED));
- DrawMenuBar(MainWnd);
- InvalidateRect(hwnd,NULL,TRUE);
- UpdateWindow(hwnd);
- return;
- }
-
-
- int DoWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
- { //执行window message命令
- if(GetMenuState(GetMenu(MainWnd),LOWORD(wParam),MF_BYCOMMAND)==MF_GRAYED)
- { //获取菜单状态
- return(0);
- }
- ComState=LOWORD(wParam);
- CurState=0;
- switch(LOWORD(wParam)){
- case IDMN_EXIT: SendMessage(hWnd,WM_CLOSE,0,0); break;
- case IDMN_NULL: break;
- case IDMN_LOAD_PNT: LoadFiles(PNT); break;
- case IDMN_LOAD_LIN: LoadFiles(LIN); break;
- case IDMN_LOAD_REG: LoadFiles(REG); break;
- case IDMN_SAVE_PNT: SaveFiles(PNT); break;
- case IDMN_SAVE_LIN: SaveFiles(LIN); break;
- case IDMN_SAVE_REG: SaveFiles(REG); break;
- case IDMN_SAVE_PNT_AS: SaveFilesAs(PNT);break;
- case IDMN_SAVE_LIN_AS: SaveFilesAs(LIN);break;
- case IDMN_SAVE_REG_AS: SaveFilesAs(REG);break;
- case IDMN_CLOSE_PNT: CloseFiles(PNT);break;
- case IDMN_CLOSE_LIN: CloseFiles(LIN);break;
- case IDMN_CLOSE_REG: CloseFiles(REG);break;
- case IDMN_CLOSE_FILE:CloseFiles(-1);break;
- //
- case IDMN_MOVE_WIN_C:
- _PopupWinImage(GrpWnd);
- break;
- case IDMN_UPDT_WIN_C:
- _PopupWinImage(GrpWnd);
- InvalidateRect(GrpWnd,NULL,TRUE);
- break;
- case IDMN_ENLG_WIN_C: //放大窗体
- DefHCursor=LargeHCursor; //设置光标样式
- break;
- case IDMN_REDU_WIN_C: //缩小窗体
- DefHCursor=ReduceHCursor; //设置光标样式
- break;
- case IDMN_PREV_WIN: //"上级窗口"
- _PrevWindow(GrpWnd);
- break;
- case IDMN_REST_WIN_C:
- _PopupWinImage(GrpWnd);
- _RestoreWindow(GrpWnd,NULL,RW_SEL_AREA,AHInst);
- break;
- case IDMN_CLEA_WIN_C:
- _PopupWinImage(GrpWnd);
- InvalidateRect(GrpWnd,NULL,TRUE);
- break;
- case IDMN_MOD_ENV: //环境设置
- _ModEnv(hWnd);
- break;
- case IDMN_DOT_VIEWABLE: /*坐标点可见*/
- SetDotViewableFlag(hWnd);
- break;
- case IDMN_ARC_VIEWABLE: /*弧段可见*/
- SetArcViewableFlag(hWnd);
- break;
- case IDMN_ORIGNAL_DISP: /*还原显示*/
- SetOrignalDispFlag(GrpWnd);
- break;
- case IDMN_ABOUT: //关于系统
- _DispAbout();
- break;
- case IDMN_VCT_EXPORT: //VCT导出 topo 0
- {
- Vct_Export();
- }
- break;
- case IDMN_D2A: //double转string 一个实例
- {
- D2A_test();
- }
- break;
- default:
- if((LOWORD(wParam)>=IDMN_NUM_ENLG_1)&&
- (LOWORD(wParam)<=IDMN_NUM_ENLG_16))
- {//固定放大,重新设置窗口显示比例
- _ResetWinDispRate(GrpWnd,LOWORD(wParam)-IDMN_NUM_ENLG_1+1.0);
- _PopupWinImage(GrpWnd);
- InvalidateRect(GrpWnd,NULL,TRUE);
- }
- if((LOWORD(wParam)>=IDMN_NUM_REDU_1)&&
- (LOWORD(wParam)<=IDMN_NUM_REDU_16))
- {//固定缩小,重新设置窗口显示比例
- _ResetWinDispRate(GrpWnd,1.0/(LOWORD(wParam)-IDMN_NUM_REDU_1+1.0));
- _PopupWinImage(GrpWnd);
- InvalidateRect(GrpWnd,NULL,TRUE);
- }
- break;
- }
- _EnableWinMenu();
- return(0);
- }
-
- //判断 菜单栏的可用性函数
- void _EnableWinMenu(void)
- {
- HMENU hmn;
- UINT flag;
- short i,n;
- n=_GetAreaNumber(AHInst); //取打开的工作区数
- flag=(n)?MF_ENABLED:MF_GRAYED; //n>0表示可用,n<=0表示不可用
- hmn=GetMenu(MainWnd);
- //文件
- EnableMenuItem(hmn, IDMN_CLOSE_FILE ,MF_BYCOMMAND|flag);
- //窗口
- EnableMenuItem(hmn, IDMN_ENLG_WIN_C ,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_REDU_WIN_C ,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_MOVE_WIN_C ,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_REST_WIN_C ,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_UPDT_WIN_C ,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_CLEA_WIN_C ,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_PREV_WIN ,MF_BYCOMMAND|flag);
- for(i=0;i<16;i++)
- {
- EnableMenuItem(hmn, IDMN_NUM_ENLG_1+i,MF_BYCOMMAND|flag);
- EnableMenuItem(hmn, IDMN_NUM_REDU_1+i,MF_BYCOMMAND|flag);
- }
- DrawMenuBar(MainWnd);
- if(GetMenuState(GetMenu(MainWnd),ComState,MF_BYCOMMAND)==MF_GRAYED)
- ComState=0;
- switch(ComState)
- {
- case IDMN_ENLG_WIN:
- SetClassLong(GrpWnd,GCL_HCURSOR,(LONG)LargeHCursor);
- break;
- case IDMN_REDU_WIN:
- SetClassLong(GrpWnd,GCL_HCURSOR,(LONG)ReduceHCursor);
- break;
- case IDMN_MOVE_WIN:
- case IDMN_UPDT_WIN:
- case IDMN_REST_WIN:
- case IDMN_CLEA_WIN:
- case IDMN_PREV_WIN:
- default:
- SetClassLong(GrpWnd, GCL_HCURSOR,(LONG)DefHCursor);
- break;
- }
- return;
- }
-
- //======================================================//
- ///{文件处理
- short LoadFiles(short ftype)
- {
- short ai;
- ai=_OpenArea(AHInst,ftype);
- if(ai<=0)
- return(0);
- if(!_LoadFile(ai))
- {
- _CloseArea(ai);
- return(0);
- }
- _PopupWinImage(GrpWnd);
- _RestoreWindow(GrpWnd,NULL,RW_ALL_AREA,AHInst);
- return(ai);
- }
-
- short CloseFiles(short type)
- {
- short *ptArea=NULL;
- char nmStr[32];
- short i;
- LoadString(HInst,3,nmStr,32);
- ptArea=_SelectAreaList(AHInst,MainWnd,type,nmStr);
- if(ptArea==NULL)
- return(0);
- for(i=1;i<=ptArea[0];i++)
- _CloseArea(ptArea[i]);
- _PopupWinImage(GrpWnd);
- _RestoreWindow(GrpWnd,NULL,RW_ALL_AREA,AHInst);
- return(1);
- }
-
-
- short SaveFiles(short type)
- {
- short *areaLst;
- short i;
- areaLst=_SelectAreaList(AHInst,MainWnd,type,"选择保存文件");
- if(areaLst==NULL) return(0);
- for(i=1;i<=areaLst[0];i++)
- _SaveFile(areaLst[i]);
- return(1);
- }
-
-
- short SaveFilesAs(short type)
- {
- short *areaLst;
- short i;
- areaLst=_SelectAreaList(AHInst,MainWnd,type,"选择另存文件");
- if(areaLst==NULL)
- return(0);
- for(i=1;i<=areaLst[0];i++)
- _SaveFileAs(areaLst[i]);
- return(1);
- }
-
-
-
- //------------------------------------------------//
- //{显示 线点 函数
- short DispLinDot(HDC hdc,WIN_ORG *wxy,short ai)
- {
- long i,j,ln;
- D_DOT *lxy;
- long len;
- int x,y;
- HANDLE hdpen;
- //选择pen对象
- hdpen=SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(255,0,0)));
- _GetLinNum(ai,&i,&ln);
- for(i=1;i<ln;i++)
- {
- if(_GetLin(ai,i,&lxy,&len,NULL)<=0)
- continue;
- for(j=0;j<len;j++,lxy++)
- {
- x=(int)((lxy->x-wxy->x0)*wxy->r);
- y=(int)((lxy->y-wxy->y0)*wxy->r);
- MoveToEx(hdc,x-2,y,NULL);
- LineTo(hdc,x+2,y);
- MoveToEx(hdc,x,y-2,NULL);
- LineTo(hdc,x,y+2);
- }
- }
- //删除pen对象
- DeleteObject(SelectObject(hdc,hdpen));
- return(1);
- }
- //..........................PAINTSTRUCT *ps
- //重新显示图形
- void _ReDispGraph(HWND hWnd,MyDC myDC,short *dsp)
- {
- short ti,i,type;
- D_RECT frc;
- RECT rc,wrc;
- short rt;
- WIN_ORG wxy;
- PAINTSTRUCT *ps;
- HMENU hmn;
- BOOL arcView;
- BOOL dotView;
- if(ComState==IDMN_CLEA_WIN){
- ComState=IDMN_NULL;
- return;
- }
- if(dsp==NULL) return;
- //
- hmn=GetMenu(MainWnd);
- if(MF_CHECKED & GetMenuState(hmn, IDMN_ORIGNAL_DISP, MF_BYCOMMAND))
- {
- _SetOriginalDisp(myDC,1);
- }
- arcView=GetMenuState(hmn, IDMN_ARC_VIEWABLE, MF_BYCOMMAND)&MF_CHECKED;
- dotView=GetMenuState(hmn, IDMN_DOT_VIEWABLE, MF_BYCOMMAND)&MF_CHECKED;
- ps=_GetPaintStruct(myDC);
- rc=ps->rcPaint;
- _StartWait();
- GetClientRect(hWnd,&wrc);
- if(!_GetWinDispParam(hWnd,&wxy))
- return;
- frc.xmin=rc.left/wxy.r +wxy.x0-1;
- frc.xmax=rc.right/wxy.r+wxy.x0+1;
- frc.ymin=(wrc.bottom-rc.bottom)/wxy.r+wxy.y0-1;
- frc.ymax=(wrc.bottom-rc.top)/wxy.r +wxy.y0+1;
- _SetMyDCMode(myDC);
- _SetMyDCPalette(myDC);
- _SetDispRect(myDC,&frc); //设置显示范围
- _SetDispParam(myDC,wxy.x0,wxy.y0,wxy.r);
- for(ti=0;ti<4;ti++) //循环3次,依次显示 区,线,点,网
- {
- switch(ti)
- {
- case 0: type=REG; break;
- case 1: type=NET; break;
- case 2: type=LIN; break;
- case 3: type=PNT; break;
- }
- for(i=1;i<=dsp[0];i++)
- {
- if(type!=_GetAreaType(dsp[i]))
- continue;
- switch(type)
- {
- case PNT: rt=_DispPntArea(myDC,dsp[i]); break;
- case LIN: rt=_DispLinArea(myDC,dsp[i]);
- if(dotView)
- DispLinDot(ps->hdc,&wxy,dsp[i]);
- break;
- case REG: rt=_DispRegArea(myDC,dsp[i]);
- if(arcView)
- _DispLinArea(myDC,dsp[i]);
- if(dotView)
- DispLinDot(ps->hdc,&wxy,dsp[i]);
- break;
- case NET: rt=_DispLinArea(myDC,dsp[i]);
- if(dotView)
- DispLinDot(ps->hdc,&wxy,dsp[i]);
- break;
- default: break;
- }
- if(rt==0)
- goto redispEND;
- }
- }
- redispEND:
- _EndWait();
- return;
- }
-
-
-
- //.....................................................................PAINTSTRUCT *ps)
- //自己绘制函数
- void WINAPI _OwnerDraw(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam,MyDC myDC)
- {
- int state;
- short *ptALst=NULL; //显示工作区表
- state=CurState;
- CurState=PAINTING;
- if((ptALst=_GetDispAreaListAddr(hWnd))!=NULL)
- {
- _ReDispGraph(hWnd,myDC,ptALst);
- }
- CurState=state;
- return;
- }
--the---end------
--vp:hsg----
--create date:2012-04-18---
|