mapgis6.7二次开发vc6_demo 之二(主窗体回调函数)
来源:互联网 发布:调查报告数据统计样本 编辑:程序博客网 时间:2024/06/05 13:23
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
- mapgis6.7二次开发vc6_demo 之二(主窗体回调函数)
- mapgis6.7二次开发vc6_demo 之一(主窗体构架)
- mapgis6.7二次开发vc6_demo 之三(文件操作通用函数)
- mapgis6.7二次开发vc6_demo 之四(VCT导出之 version=1,topo=0)
- mapgis6.7二次开发vc6_demo 之五(输出VCT函数之点图层)
- mapgis6.7二次开发vc6_demo 之五(输出VCT函数之线图层)
- mapgis6.7二次开发vc6_demo 之五(输出VCT函数之面图层)
- mapgis6.7二次开发vc6_demo 之五(输出VCT函数之表属性段)
- mapgis6.7二次开发vc6_demo 之五(输出VCT函数 总入口)
- mapgis6.7二次开发vc6_demo 之六(mapgis公用函数二次封装库)
- CALLBACK回调函数使用之二
- CALLBACK回调函数使用之二
- CALLBACK回调函数使用之二
- 二. 回调函数
- 回调函数(二)
- 回调函数(二)
- 回调函数(二)
- 回调函数(二)
- struts2 标签
- 第九周实验报告一
- 定制属性编辑器
- Cannot serialize Object to ViewState only Session
- js中不让浏览器后退
- mapgis6.7二次开发vc6_demo 之二(主窗体回调函数)
- Solaris中ln命令使用
- 《第九周实验报告四》
- sql 2008请参阅“对象资源管理器详细信息”
- 实验报告 9-5
- Intel推出超极本和平板组合体:外观控大爱
- Weblogic 9.2产品直接下载,及Weblogic 9.2 破解补丁
- Android(判断wifi是否开启,手机屏幕状态,sdcard是否被拔出,设置全屏)
- 基于UML的嵌入式硬件系统模型研究