mapgis6.7二次开发vc6_demo 之二(主窗体回调函数)

mapgis6.7二次开发vc6_demo 之二(主窗体回调函数)

Map_cpak.cpp文件内容如下所示:

//添加处理鼠标消息的函数 //回调函数 //*****************************************************// //Map_cpak.cpp // 回调函数模块: // 集中窗口的回调函数 //*****************************************************// #include "stdafx.h" #include "resource.h" #include <math.h> #include "win_area.h" #include "win_oper.h" #include "map_out.h" //引用其它cpp文件中定义的全局变量 // extern char* AppTitle; //应用程序名称 // extern HINSTANCE HInst; //实例句柄 extern HWND MainWnd; //主窗口句柄 extern HWND GrpWnd; //图形窗口句柄 extern int ComState; //菜单命令状态 extern int CurState; //当前操作状态 // extern HCURSOR DefHCursor; //绘图窗口缺省光标 extern HCURSOR LargeHCursor; //绘图窗口放大光标 extern HCURSOR ReduceHCursor; //绘图窗口缩小光标 extern HCURSOR CrossHCursor; //绘图窗口十字光标 //-------------------------------------------// // //显示关于窗体函数 void _DispAbout(void) { //char title[32]; //LoadString(HInst,4,title,32); //_MapGisAbout(title); _MapGisAbout(AppTitle); return; } //==========================proc mouse button message=====================================// char FlgSetCapture=0; char LMR_Button=0; //左.中.右键按下标志 int DwnX; //键按下位置 int DwnY; int MovX; int MovY; double FDwnX; //图形坐标 double FDwnY; double FMovX; double FMovY; //画矩形函数 int _DrawRect(HDC hdc,int x0,int y0,int x1,int y1) { MoveToEx(hdc,x0,y0,NULL); LineTo(hdc,x0,y1); LineTo(hdc,x1,y1); LineTo(hdc,x1,y0); LineTo(hdc,x0,y0); return(1); } void _ProcLBUTTONDOWN(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam) { HDC hdc; HANDLE hdpen; RECT rc; WIN_ORG wxy; LMR_Button=wParam; MovX=DwnX=(short)LOWORD(lParam); MovY=DwnY=(short)HIWORD(lParam); GetClientRect(hWnd,&rc); _GetWinDispParam(GrpWnd,&wxy); switch(ComState) { case IDMN_ENLG_WIN_C: hdc=GetDC(hWnd); _SetPalette(hdc); SetROP2(hdc,R2_NOTXORPEN); //XORPEN); hdpen = SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(0,0,0))); _DrawRect(hdc,DwnX,DwnY,MovX,MovY); DeleteObject(SelectObject(hdc,hdpen)); ReleaseDC(hWnd,hdc); SetCapture(hWnd); FlgSetCapture=1; //设置光标样式 DefHCursor=LargeHCursor; break; case IDMN_MOVE_WIN_C: hdc=GetDC(hWnd); _SetPalette(hdc); SetROP2(hdc,R2_NOTXORPEN); hdpen=SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(0,0,0))); MoveToEx(hdc,DwnX,DwnY,NULL); LineTo(hdc,MovX,MovY); DeleteObject(SelectObject(hdc,hdpen)); ReleaseDC(hWnd,hdc); SetCapture(hWnd); FlgSetCapture=1; break; default: break; } return; } void _ProcMOUSEMOVE(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam) { HDC hdc; HANDLE hdpen; RECT rc; double fx,fy; int x,y; WIN_ORG wxy; GetClientRect(hWnd,&rc); _GetWinDispParam(hWnd,&wxy); x=(short)LOWORD(lParam); y=(short)HIWORD(lParam); fx=wxy.x0+x/wxy.r; fy=wxy.y0+(rc.bottom-y)/wxy.r; hdc=GetDC(hWnd); _SetPalette(hdc); SetROP2(hdc,R2_NOTXORPEN); hdpen=SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(0,0,0))); switch(ComState) { case IDMN_ENLG_WIN_C: if(LMR_Button&MK_LBUTTON) { _DrawRect(hdc,DwnX,DwnY,MovX,MovY); _DrawRect(hdc,DwnX,DwnY,x,y); } break; case IDMN_MOVE_WIN: if(LMR_Button&MK_LBUTTON) { MoveToEx(hdc,DwnX,DwnY,NULL); LineTo(hdc,MovX,MovY); MoveToEx(hdc,DwnX,DwnY,NULL); LineTo(hdc,x,y); } break; default: break; } MovX=x; MovY=y; DeleteObject(SelectObject(hdc,hdpen)); ReleaseDC(hWnd,hdc); return; } void _ProcLBUTTONUP(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam) { HDC hdc; HANDLE hdpen; RECT rc; int x,y; GetClientRect(hWnd,&rc); //获取当前光标所在的x,y坐标 x=(short)LOWORD(lParam); y=(short)HIWORD(lParam); if(FlgSetCapture) { ReleaseCapture(); FlgSetCapture=0; } switch(ComState) { case IDMN_ENLG_WIN_C: //放大窗口 if(LMR_Button&MK_LBUTTON) { hdc=GetDC(hWnd); _SetPalette(hdc); SetROP2(hdc,R2_NOTXORPEN); //XORPEN); hdpen = SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(0,0,0))); _DrawRect(hdc,DwnX,DwnY,MovX,MovY); DeleteObject(SelectObject(hdc,hdpen)); ReleaseDC(hWnd,hdc); MovX=x; MovY=y; if((DwnX!=MovX)&&(DwnY!=MovY)) _OpenWindow(hWnd,MovX,MovY,DwnX,DwnY); else _EnlargeWindow(hWnd,DwnX,DwnY); } break; case IDMN_REDU_WIN_C: if(hWnd!=GrpWnd) break; _ReduceWindow(hWnd,DwnX,DwnY); break; case IDMN_MOVE_WIN_C: hdc=GetDC(hWnd); _SetPalette(hdc); SetROP2(hdc,R2_NOTXORPEN); //XORPEN); hdpen = SelectObject(hdc, CreatePen(PS_SOLID,1,RGB(0,0,0))); MoveToEx(hdc,DwnX,DwnY,NULL); LineTo(hdc,MovX,MovY); DeleteObject(SelectObject(hdc,hdpen)); ReleaseDC(hWnd,hdc); _MoveWindow(hWnd,DwnX-x,DwnY-y); break; default: break; } LMR_Button=wParam; return; } void _ProcRBUTTONUP(HWND hWnd, UINT msg,WPARAM wParam, LPARAM lParam) { WIN_ORG wxy; _GetWinDispParam(hWnd,&wxy); return; } void _ProcSETCURSOR(HWND hWnd,WPARAM wParam, LPARAM lParam) { POINT pnt; WORD nHittest = LOWORD(lParam); WORD wMouseMsg= HIWORD(lParam); hWnd = (HWND) wParam; if(CurState==PAINTING) return; if(hWnd!=GrpWnd) return; if(wMouseMsg!=WM_RBUTTONUP) return; GetCursorPos(&pnt); _PopGrpMenu(pnt.x,pnt.y,GrpWnd); return; } //
--the--end--

--vp:hsg

--create date:2012-04-18

转载于:https://www.cnblogs.com/sqlite3/archive/2012/04/18/2566721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值