¿øÇü |
BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint); |
MFC ¿øÇü |
void CWnd::ScreenToClient( LPPOINT lpPoint ) const; |
Àμö |
¢ºhWnd : ÁÂÇ¥ º¯È¯¿¡ »ç¿ëÇÒ À©µµ¿ìÀÇ ÇÚµé. ÀÌ À©µµ¿ìÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ±âÁØÀ¸·Î ÇÏ´Â ÁÂÇ¥·Î º¯È¯µÈ´Ù. ¢ºlpPoint : º¯È¯ ´ë»ó ÁÂÇ¥ÀÌ¸ç ³í¸® ´ÜÀ§°¡ ¾Æ´Ñ ÀåÄ¡ ´ÜÀ§(Çȼ¿)ÀÌ´Ù. |
¸®ÅÏ |
¼º°øÇϸé 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÏ¸ç ½ÇÆÐÇϸé 0À» ¸®ÅÏÇÑ´Ù. |
¼³¸í |
ȸéÀÇ ¿øÁ¡À» ±âÁØÀ¸·Î ÇÏ´Â ÁÂÇ¥ lpPoint¸¦ hWndÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ±âÁØÀ¸·Î ÇÏ´Â ÁÂÇ¥·Î º¯È¯ÇÑ´Ù. hWndÀ©µµ¿ìÀÇ ÀÛ¾÷ ¿µ¿ª ¿øÁ¡ÀÇ È¸é ÁÂÇ¥°¡ cx, cyÀÏ ¶§ lpPoint´Â lpPoint.x - cx, lpPoint - cy·Î º¯È¯µÈ´Ù. GetCursorPos, MoveWindow, GetWindowRect µî°ú °°ÀÌ È¸é ÁÂÇ¥¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö·ÎºÎÅÍ ÀÛ¾÷ ¿µ¿ªÀÇ ÁÂÇ¥·Î º¯È¯ÇÏ°íÀÚ ÇÒ ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â ´ëÈ»óÀÚ¿¡ ¹èÄ¡µÈ ¹öÆ°ÀÇ ¿À¸¥ÂÊ°ú ¾Æ·¡ÂÊÀ¸·Î °¢°¢ 100Çȼ¿¸¸Å ¶³¾îÁø À§Ä¡¿¡ µÎ °³ÀÇ ¹®ÀÚ¿À» Ãâ·ÂÇÑ´Ù. BOOL CALLBACK MainDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rt; HWND hBtn; char Mes1[]="¼öÆò À§Ä¡"; char Mes2[]="¼öÁ÷ À§Ä¡"; switch(iMessage) { case WM_INITDIALOG: hDlgMain = hDlg; return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDCANCEL: EndDialog(hDlg,IDOK); return TRUE; } return FALSE; case WM_PAINT: hdc=BeginPaint(hDlg, &ps); hBtn=GetDlgItem(hDlg,IDOK); GetWindowRect(hBtn,&rt); ScreenToClient(hDlg,(LPPOINT)&rt); SetBkMode(hdc,TRANSPARENT); TextOut(hdc,rt.left+100,rt.top,Mes1,lstrlen(Mes1)); TextOut(hdc,rt.left,rt.top+100,Mes2,lstrlen(Mes2)); EndPaint(hDlg, &ps); return 0; } return FALSE; } hBtnÀÇ ÀÛ¾÷ ¿µ¿ª»óÀÇ ÁÂÇ¥¸¦ ±¸Çϱâ À§ÇØ GetWindowRect ÇÔ¼ö¿Í ScreenToClient ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´´Ù. GetWindowRect´Â À©µµ¿ìÀÇ È¸é»óÀÇ ÁÂÇ¥¸¦ ±¸ÇØÁִµ¥ ÀÌ ÁÂÇ¥¸¦ hDlgÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ±âÁØÀ¸·Î ÇÏ´Â ÁÂÇ¥·Î º¯È¯ÇÏ¿´´Ù. ÀÌ ¹æ¹ýÀº ºÎ¸ð À©µµ¿ì¿¡¼ Â÷Àϵå À©µµ¿ìÀÇ ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥¸¦ ±¸ÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀÌ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù. ´ÙÀ½ ¿¹Á¦´Â 0.2Ãʸ¶´Ù ¸¶¿ì½ºÀÇ ÇöÀç À§Ä¡¿¡ Á¶±×¸¸ ¿øÀ» ±×¸°´Ù. ÁÖ±âÀûÀ¸·Î ¸¶¿ì½ºÀÇ À§Ä¡¸¦ Ç¥½ÃÇϱâ À§ÇØ WM_TIMER ¸Þ½ÃÁö¸¦ »ç¿ëÇßÀ¸¸ç WM_TIMER´Â ÇöÀçÀÇ ¸¶¿ì½º ÁÂÇ¥¸¦ Á¦°øÇÏÁö ¾ÊÀ¸¹Ç·Î GetCursorPos ÇÔ¼ö·Î ¸¶¿ì½º ÁÂÇ¥¸¦ Á¶»çÇÏ¿´´Ù. ±×·¯³ª ÀÌ ÇÔ¼ö°¡ Á¶»çÇØÁÖ´Â ¸¶¿ì½º ÁÂÇ¥´Â ȸéÀ» ±âÁØÀ¸·Î ÇÏ´Â ÁÂÇ¥À̹ǷΠÀÌ ÁÂÇ¥¿¡ ¿øÀ» Ãâ·ÂÇϱâ À§Çؼ´Â ScreenToClient ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; POINT pt; switch(iMessage) { case WM_CREATE: SetTimer(hWnd,1,200,NULL); return 0; case WM_TIMER: hdc=GetDC(hWnd); GetCursorPos(&pt); ScreenToClient(hWnd,&pt); Ellipse(hdc,pt.x-3,pt.y-3,pt.x+3,pt.y+3); ReleaseDC(hWnd,hdc); return 0; case WM_DESTROY: KillTimer(hWnd,1); PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù. ÀÛ¾÷ ¿µ¿ª ±âÁØ ÁÂÇ¥ÀÇ ¿øÁ¡Àº À©µµ¿ìÀÇ ÀÛ¾÷ ¿µ¿ª Á»ó´ÜÀ̹ǷΠÀÌ ¿øÁ¡º¸´Ù ´õ ¿ÞÂÊ ¶Ç´Â ´õ À§ÂÊ¿¡ ÀÖ´Â ÁÂÇ¥´Â º¯È¯ °á°ú À½¼ö°ªÀ» °¡Áú ¼öµµ ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â POINTÇü ±¸Á¶Ã¼, Áï ÇÑ ÁÂÇ¥¿¡ ´ëÇؼ¸¸ ÁÂÇ¥ º¯È¯À» ÇØ ÁØ´Ù. ¸¸¾à ¿©·¯°³ÀÇ ÁÂÇ¥¸¦ ¿¬¼ÓÀ¸·Î º¯È¯Çϰųª POINT±¸Á¶Ã¼°¡ µÎ °³ °ãÃÄ ÀÖ´Â RECTÇü ÁÂÇ¥¸¦ º¯È¯ÇÏ·Á¸é ÀÌ ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ µÎ ¹ø È£ÃâÇØ ÁÖ¸é µÈ´Ù. ScreentToClient((LPPOINT)&rt); |
Âü°íÇÔ¼ö |
ClientToScreen : ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥¸¦ ȸé ÁÂÇ¥·Î º¯È¯ÇÑ´Ù. |
Ç÷§Æû | 95ÀÌ»ó |
ÂüÁ¶ |
|
written by http://www.winapi.co.kr
|