📄 myproject.cpp
字号:
OnDraw(hdc);
HPEN hPen=CreatePen(PS_SOLID,4,RGB(0,0,180));
HGDIOBJ hOldSel=SelectObject(hdc,hPen);//选择新画笔
POINT p[5];
p[0].x=1 ; p[0].y=PicBoxHeight+rect.top+1 ;
p[1].x=PicBoxWidth+1 ; p[1].y= PicBoxHeight+rect.top+1;
p[2].x=PicBoxWidth+1 ; p[2].y=rect.top+1 ;
p[3].x=1 ; p[3].y= rect.top+1;
p[4].x=1 ; p[4].y=PicBoxHeight+rect.top+1 ;
Polyline(hdc,p,5);
SelectObject(hdc,hOldSel);//恢复以前的画笔
EndPaint (hWnd, &ps);
return 0;
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//-------------------------------------------------------------------------
//---------------------------------------------------------------------
// DoCommandMain - Process WM_COMMAND message for window.
//
//
LRESULT DoCommandMain (HWND hWnd, UINT wMsg, WPARAM wParam,
LPARAM lParam) {
WORD idItem, wNotifyCode;
HWND hwndCtl;
INT i;
// Parse the parameters.
idItem = (WORD) LOWORD (wParam);
wNotifyCode = (WORD) HIWORD(wParam);
hwndCtl = (HWND) lParam;
// Call routine to handle control message.
for (i = 0; i < dim(MainCommandItems); i++) {
if (idItem == MainCommandItems[i].Code)
return (*MainCommandItems[i].Fxn)(hWnd, idItem, hwndCtl,
wNotifyCode);
}
return 0;
}
//------------------------------------------------------------------------
//-------------------------------------------------------------------------
//---------------------------------------------------------------------
// DoMainCommandExit - Process Program Exit command.
//
LPARAM DoMainCommandExit (HWND hWnd, WORD idItem, HWND hwndCtl,
WORD wNotifyCode)
{
SendMessage (hWnd, WM_CLOSE, 0, 0);
SAFE_FREE(MapName_TCHAR);
SAFE_FREE(JingDu_TCHAR);
SAFE_FREE(WeiDu_TCHAR);
SAFE_FREE(haituINI);
int i;
for(i=0;i<Hdcnum;i++)
{SAFE_DeleteDC(g_hdc[i]);}
SAFE_FREE(StrPicName0);
SAFE_DeleteObject(m_hbitmap);
SAFE_ReleaseDC(hWnd,hdc);
return 0;
}
//------------------------------------------------------------------------
//-------------------------------------------------------------------------
//---------------------------------------------------------------------
// DoDestroyMain - Process WM_DESTROY message for window.
//
LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam,
LPARAM lParam) {
PostQuitMessage (0);
SAFE_FREE(MapName_TCHAR);
SAFE_FREE(JingDu_TCHAR);
SAFE_FREE(WeiDu_TCHAR);
SAFE_FREE(haituINI);
int i;
for(i=0;i<Hdcnum;i++)
{SAFE_DeleteDC(g_hdc[i]);}
SAFE_FREE(StrPicName0);
SAFE_DeleteObject(m_hbitmap);
SAFE_ReleaseDC(hWnd,hdc);
return 0;
}
////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------
//---------------------------------------------------------------------
// 以下为自定义菜单响应函数,用于响应自己工程的菜单。
//
//No1.海图漫游开关
LPARAM DoMainCommandMapRandom (HWND hWnd, WORD idItem, HWND hwndCtl,
WORD wNotifyCode)
{
if(MouseDownToMovePicture == false)
{
MouseDownToMovePicture = true;
}
else{MouseDownToMovePicture = false;}
return 0;
}
//-------------------------------------------------------------------------
//---------------------------------------------------------------------
// DoCommandMain - Process WM_LBUTTONDOWN message for window.
//
//
LRESULT DoLButtonDownMain (HWND hWnd, UINT wMsg, WPARAM wParam,
LPARAM lParam)
{
if(MouseDownToMovePicture)
{
POINT p;
p.x=LOWORD(lParam);
p.y=HIWORD(lParam);
if(PtInRect(&rect,p))
{
//确定新的中心位置。以鼠标点击作为新的中心位置(相对于大图的左下角(0,0))
Center.x = Center.x + (p.x - PicBoxWidth/2);
Center.y = Center.y - (p.y - rect.top - PicBoxHeight/2);//扣除菜单占用的位置
//重新确定box的位置
box.left=Center.x - PicBoxWidth/2;
box.right=Center.x + PicBoxWidth/2;
box.top=Center.y + PicBoxHeight/2;
box.bottom=Center.y - PicBoxHeight/2;
if( (box.top<=NotLoadBox.top) && (box.bottom>=NotLoadBox.bottom) && (box.left>=NotLoadBox.left) && (box.right<=NotLoadBox.right))//box在NotLoadBox内
{
//注:若box在NotLoadBox内,则Cross的位置不变 ! !!
// printf("%s ","in ");
// Cross.x = Cross.x - (p.x - PicBoxWidth/2);
// Cross.y = Cross.y + (p.y - rect.top - PicBoxHeight/2);//扣除菜单占用的位置
InvalidateRect(hwndMain,&rect,TRUE);//直接重新绘制客户区
}
else //box不在NotLoadBox内, 则调图并修改 hdc_i
{
//printf("%s ","out ");
if(box.top<=NotLoadBox.top && box.bottom >= NotLoadBox.bottom ) //A情况
{
if(box.left<NotLoadBox.left)//A1
{
SAFE_DeleteDC(g_hdc[7]); SAFE_DeleteDC(g_hdc[11]); //释放设备环境
g_hdc[7]=g_hdc[6]; g_hdc[11]=g_hdc[10]; g_hdc[6]=NULL; g_hdc[10]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,-1,1); LoadPicToHdc_i(hdc, StrPicName0,6);
MakePicName(tag_intXnumth,tag_intYnumth,-1,0); LoadPicToHdc_i(hdc, StrPicName0,10);
tag_intXnumth--;
NotLoadBox.left=NotLoadBox.left-picWidth;
NotLoadBox.right=NotLoadBox.right-picWidth;
Cross.x=Cross.x-picWidth;
}
else//A2
{
SAFE_DeleteDC(g_hdc[6]); SAFE_DeleteDC(g_hdc[10]); //释放设备环境
g_hdc[6]=g_hdc[7]; g_hdc[10]=g_hdc[11]; g_hdc[7]=NULL; g_hdc[11]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,2,1); LoadPicToHdc_i(hdc, StrPicName0,7);
MakePicName(tag_intXnumth,tag_intYnumth,2,0); LoadPicToHdc_i(hdc, StrPicName0,11);
tag_intXnumth++;
NotLoadBox.left=NotLoadBox.left+picWidth;
NotLoadBox.right=NotLoadBox.right+picWidth;
Cross.x=Cross.x+picWidth;
}
}// A情况结束////
////////////////////////////////////////////////////////////////////////
else if(box.left>=NotLoadBox.left && box.right<=NotLoadBox.right ) //B 情况
{
if( box.top>NotLoadBox.top)//B1
{
SAFE_DeleteDC(g_hdc[10]); SAFE_DeleteDC(g_hdc[11]); //释放设备环境
g_hdc[10]=g_hdc[6]; g_hdc[11]=g_hdc[7]; g_hdc[6]=NULL; g_hdc[7]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,0,2); LoadPicToHdc_i(hdc, StrPicName0,6);
MakePicName(tag_intXnumth,tag_intYnumth,1,2); LoadPicToHdc_i(hdc, StrPicName0,7);
tag_intYnumth++;
NotLoadBox.top=NotLoadBox.top+picHeight;
NotLoadBox.bottom=NotLoadBox.bottom+picHeight;
Cross.y=Cross.y+picHeight;
}
else//B2
{
SAFE_DeleteDC(g_hdc[6]); SAFE_DeleteDC(g_hdc[7]); //释放设备环境
g_hdc[6]=g_hdc[10]; g_hdc[7]=g_hdc[11]; g_hdc[10]=NULL; g_hdc[11]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,0,-1); LoadPicToHdc_i(hdc, StrPicName0,10);
MakePicName(tag_intXnumth,tag_intYnumth,1,-1); LoadPicToHdc_i(hdc, StrPicName0,11);
tag_intYnumth--;
NotLoadBox.top=NotLoadBox.top-picHeight;
NotLoadBox.bottom=NotLoadBox.bottom-picHeight;
Cross.y=Cross.y-picHeight;
}
}
////////////////////////////////////////////////////////////
else //C 情况
{
if( box.left<NotLoadBox.left)//c1 c4
{
if(box.top>NotLoadBox.top)//c1
{
SAFE_DeleteDC(g_hdc[7]); SAFE_DeleteDC(g_hdc[10]); SAFE_DeleteDC(g_hdc[11]);//释放设备环境
g_hdc[11]=g_hdc[6]; g_hdc[6]=NULL; g_hdc[7]=NULL; g_hdc[10]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,-1,2); LoadPicToHdc_i(hdc, StrPicName0,6);
MakePicName(tag_intXnumth,tag_intYnumth,0,2); LoadPicToHdc_i(hdc, StrPicName0,7);
MakePicName(tag_intXnumth,tag_intYnumth,-1,1); LoadPicToHdc_i(hdc, StrPicName0,10);
tag_intXnumth--; tag_intYnumth++;
NotLoadBox.top=NotLoadBox.top+picHeight;
NotLoadBox.bottom=NotLoadBox.bottom+picHeight;
NotLoadBox.left=NotLoadBox.left-picWidth;
NotLoadBox.right=NotLoadBox.right-picWidth;
Cross.y=Cross.y+picHeight;Cross.x=Cross.x-picWidth;
}
else//c4
{
SAFE_DeleteDC(g_hdc[6]); SAFE_DeleteDC(g_hdc[7]); SAFE_DeleteDC(g_hdc[11]);//释放设备环境
g_hdc[7]=g_hdc[10]; g_hdc[6]=NULL; g_hdc[11]=NULL; g_hdc[10]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,-1,0); LoadPicToHdc_i(hdc, StrPicName0,6);
MakePicName(tag_intXnumth,tag_intYnumth,-1,-1); LoadPicToHdc_i(hdc, StrPicName0,10);
MakePicName(tag_intXnumth,tag_intYnumth,0,-1); LoadPicToHdc_i(hdc, StrPicName0,11);
tag_intXnumth--; tag_intYnumth--;
NotLoadBox.top=NotLoadBox.top-picHeight;
NotLoadBox.bottom=NotLoadBox.bottom-picHeight;
NotLoadBox.left=NotLoadBox.left-picWidth;
NotLoadBox.right=NotLoadBox.right-picWidth;
Cross.y=Cross.y-picHeight;Cross.x=Cross.x-picWidth;
}
}
else//c2 c3
{
if(box.top>NotLoadBox.top)//c2
{
SAFE_DeleteDC(g_hdc[6]); SAFE_DeleteDC(g_hdc[10]); SAFE_DeleteDC(g_hdc[11]);//释放设备环境
g_hdc[10]=g_hdc[7]; g_hdc[6]=NULL; g_hdc[11]=NULL; g_hdc[7]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,1,2); LoadPicToHdc_i(hdc, StrPicName0,6);
MakePicName(tag_intXnumth,tag_intYnumth,2,2); LoadPicToHdc_i(hdc, StrPicName0,7);
MakePicName(tag_intXnumth,tag_intYnumth,2,1); LoadPicToHdc_i(hdc, StrPicName0,11);
tag_intXnumth++; tag_intYnumth++;
NotLoadBox.top=NotLoadBox.top+picHeight;
NotLoadBox.bottom=NotLoadBox.bottom+picHeight;
NotLoadBox.left=NotLoadBox.left+picWidth;
NotLoadBox.right=NotLoadBox.right+picWidth;
Cross.y=Cross.y+picHeight;Cross.x=Cross.x+picWidth;
}
else//c3
{
SAFE_DeleteDC(g_hdc[6]); SAFE_DeleteDC(g_hdc[7]); SAFE_DeleteDC(g_hdc[10]);//释放设备环境
g_hdc[6]=g_hdc[11]; g_hdc[7]=NULL; g_hdc[11]=NULL; g_hdc[10]=NULL;
MakePicName(tag_intXnumth,tag_intYnumth,2,0); LoadPicToHdc_i(hdc, StrPicName0,7);
MakePicName(tag_intXnumth,tag_intYnumth,2,-1); LoadPicToHdc_i(hdc, StrPicName0,11);
MakePicName(tag_intXnumth,tag_intYnumth,1,-1); LoadPicToHdc_i(hdc, StrPicName0,10);
tag_intXnumth++; tag_intYnumth--;
NotLoadBox.top=NotLoadBox.top-picHeight;
NotLoadBox.bottom=NotLoadBox.bottom-picHeight;
NotLoadBox.left=NotLoadBox.left+picWidth;
NotLoadBox.right=NotLoadBox.right+picWidth;
Cross.y=Cross.y-picHeight;Cross.x=Cross.x+picWidth;
}
}
}
//////////////////////////////////////////////////////////////////////
// RePosAndJudgeLoadPic(Center);
g_hdc6=g_hdc[6]; g_hdc7=g_hdc[7]; g_hdc11=g_hdc[11]; g_hdc10=g_hdc[10];
InvalidateRect(hwndMain,&rect,TRUE);//重新绘制客户区
}//box不在NotLoadBox内, 则调图并修改 hdc_i
// InvalidateRect(hwndMain,&rect,TRUE);//重新绘制客户区
}//if(PtInRect(&rect,p))
}//if(MouseDownToMovePicture)
return 0;
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------
//No.2 通过设置INI 文件来修改 默认位置 ///////
LPARAM DoMainCommandDefLocSet (HWND hWnd, WORD idItem, HWND hwndCtl,
WORD wNotifyCode)
{
CIni Ini(haituINI,LPhaituINI);
//以下三个【公有变量】用于测试发送数据和文字给对话框,并从对话框获得数据和文字
//TCHAR a_tchar[]=TEXT("你好啊,蔡志明");
//TCHAR* MapName_TCHAR;
//TCHAR* JingDu_TCHAR;
//TCHAR* WeiDu_TCHAR;
char* MapName_char;
char* JingDu_char;
char* WeiDu_char;
MapName_char=new char[40];
JingDu_char=new char[40];
WeiDu_char=new char[40];
MapName_TCHAR=new TCHAR[20];
JingDu_TCHAR =new TCHAR[20];
WeiDu_TCHAR=new TCHAR[20];
//初始化变量, data和name
Ini.ReadData("默认海图","海图");
MapName_char=Ini.data;
Ini.ReadData(MapName_char,"缺省经度");
JingDu_char=Ini.data;
Ini.ReadData(MapName_char,"缺省纬度");
WeiDu_char=Ini.data;
//返回实际需要的MapName_TCHAR缓冲区的大小
int k=MultiByteToWideChar(CP_ACP,0,MapName_char,-1,MapName_TCHAR,0);;
MultiByteToWideChar(CP_ACP,0,MapName_char,-1,MapName_TCHAR,k);
k=MultiByteToWideChar(CP_ACP,0,JingDu_char,-1,JingDu_TCHAR,0);
MultiByteToWideChar(CP_ACP,0,JingDu_char,-1,JingDu_TCHAR,k);
k=MultiByteToWideChar(CP_ACP,0,WeiDu_char,-1,WeiDu_TCHAR,0);
MultiByteToWideChar(CP_ACP,0,WeiDu_char,-1,WeiDu_TCHAR,k);
///////////////////////////
//调用默认位置设置对话框
DialogBox (
hInst, // Handle to the application instance.
MAKEINTRESOURCE (ID_DlgDefLocSet), // Identifies the dialog box template.
hwndMain, // Handle to the owner window.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -