⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myproject.cpp

📁 采用Platform Builder编写的多线程程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:

     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 + -