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

原创粉丝点击