ScreenToClient

¿øÇü

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 µî°ú °°ÀÌ È­¸é ÁÂÇ¥¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö·ÎºÎÅÍ ÀÛ¾÷ ¿µ¿ªÀÇ ÁÂÇ¥·Î º¯È¯ÇÏ°íÀÚ ÇÒ ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù.

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â ´ëÈ­»óÀÚ¿¡ ¹èÄ¡µÈ ¹öÆ°ÀÇ ¿À¸¥ÂÊ°ú ¾Æ·¡ÂÊÀ¸·Î °¢°¢ 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ÀÇ ÀÛ¾÷ ¿µ¿ªÀ» ±âÁØÀ¸·Î ÇÏ´Â ÁÂÇ¥·Î º¯È¯ÇÏ¿´´Ù. ÀÌ ¹æ¹ýÀº ºÎ¸ð À©µµ¿ì¿¡¼­ Â÷Àϵå À©µµ¿ìÀÇ ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥¸¦ ±¸ÇÏ´Â ÀϹÝÀûÀÎ ¹æ¹ýÀÌ´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

¿¹Á¦ 2

´ÙÀ½ ¿¹Á¦´Â 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);
ScreenToClient((LPPOINT)&rt+1);

Âü°íÇÔ¼ö

ClientToScreen : ÀÛ¾÷ ¿µ¿ª ÁÂÇ¥¸¦ È­¸é ÁÂÇ¥·Î º¯È¯ÇÑ´Ù.

Ç÷§Æû

95ÀÌ»ó

ÂüÁ¶

 


written by http://www.winapi.co.kr