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