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

时间:2022-01-10 20:27:41

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