InvalidateRect

¿øÇü BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);
MFC ¿øÇü void CWnd::InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );
Àμö

¢ºhWnd:¹«È¿ ¿µ¿ªÀ» ¼³Á¤ÇÒ À©µµ¿ìÀÇ ÇÚµé. NULLÀÏ °æ¿ì ¸ðµç À©µµ¿ì¸¦ ¹«È¿È­ÇÑ´Ù.

¢ºlpRect:¹«È¿È­ÇÒ ¿µ¿ª. NULLÀ̸é ÀÛ¾÷ ¿µ¿ª Àüü°¡ ¹«È¿È­µÈ´Ù.

¢ºbErase:¹«È¿ ¿µ¿ªÀÇ ¹è°æÀ» ¸ÕÀú Áö¿ï °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. TRUEÀ̸é BeginPaint ÇÔ¼ö°¡ ¹è°æÀ» ¸ÕÀú Áö¿î ÈÄ ÀÛ¾÷ ¿µ¿ªÀ» ±×¸°´Ù.

¸®ÅÏ ¼º°øÇϸé nonzero, ½ÇÆнà 0À» ¸®ÅÏÇÑ´Ù.
¼³¸í

¿î¿µÃ¼Á¦´Â À©µµ¿ìÀÇ ÀÛ¾÷ ¿µ¿ªÁß ÀϺο¡ ¹«È¿ ¿µ¿ªÀÌ ÀÖÀ¸¸é WM_PAINT ¸Þ½ÃÁö¸¦ º¸³» ´Ù½Ã ±×¸®µµ·Ï ÇÑ´Ù. ÇÁ·Î±×·¥ ³»ºÎ¿¡¼­ ÀÛ¾÷ ¿µ¿ªÀ» º¯°æÇÑ °æ¿ì ÀÌ ÇÔ¼ö·Î º¯°æµÈ ºÎºÐÀ» ¹«È¿È­ÇØ ÁÖ¾î¾ß WM_PAINT ¸Þ½ÃÁö°¡ ¹ß»ýÇϸç È­¸éÀÌ ´Ù½Ã ±×·ÁÁø´Ù. ¹è°æÀ» Áö¿ì°í ±×·Á¾ß ÇÒ ¶§´Â bErase¸¦ TRUE·Î ¼³Á¤ÇØ ÁÖ¾î¾ß ÀÌÀü¿¡ Ãâ·ÂµÇ¾î ÀÖ´ø ³»¿ëÀÌ »èÁ¦µÇ°í ´Ù½Ã ±×·ÁÁø´Ù. ±×¸®±â ¼Óµµ¸¦ ÃÖ´ëÇÑ ºü¸£°Ô ÇÏ·Á¸é lpRect¿¡ ¹«È¿È­ÇÒ ÃÖ¼ÒÇÑÀÇ ¿µ¿ªÀ» ÁöÁ¤ÇÏ¿© ²À ÇÊ¿äÇÑ ºÎºÐ¸¸ ´Ù½Ã ±×¸®µµ·Ï ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

¿¹Á¦ 1

´ÙÀ½ ¿¹Á¦´Â Å°º¸µå·ÎºÎÅÍ ¹®ÀÚ¸¦ ÀÔ·Â¹Þ¾Æ È­¸éÀ¸·Î Ãâ·ÂÇÑ´Ù. ÀÔ·ÂµÈ Å°´Â str¹öÆÛ¿¡ ´©ÀûµÇ¸ç ´©ÀûµÈ ¹®ÀÚ¿­À» WM_PAINT¿¡¼­ Ãâ·ÂÇϵµ·Ï Çϱâ À§ÇØ ÀÛ¾÷ ¿µ¿ªÀ» ¹«È¿È­ÇÑ´Ù. ÀÌÀü ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÌ ´©ÀûµÇ¾î °è¼Ó Ãâ·ÂµÇ¹Ç·Î ÀÛ¾÷ ¿µ¿ªÀ» Áö¿ï ÇÊ¿ä°¡ ¾ø¾î bErase´Â FALSE·Î ÁÖ¾ú´Ù. InvalidateRect È£Ãâ¹®À» »èÁ¦Çϸé Å°º¸µå¸¦ ´­·¯µµ È­¸éÀ¸·Î ¹®ÀÚ¿­ÀÌ Ãâ·ÂµÇÁö ¾Ê´Â´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static char str[256];
	int len;

	switch(iMessage) {
	case WM_CHAR:
		len = strlen(str);
		str[len]=(TCHAR)wParam;
		str[len+1]=0;
		InvalidateRect(hWnd,NULL,FALSE);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		TextOut(hdc,100,100,str,strlen(str));
		EndPaint(hWnd,&ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù. Å°º¸µå¸¦ ´©¸¦ ¶§¸¶´Ù ÀÛ¾÷ ¿µ¿ªÀÌ ¹«È¿È­µÇ¸ç ´­·¯Áø Å°°¡ È­¸éÀ¸·Î Ãâ·ÂµÈ´Ù. ÀÌó¸² ³»ºÎÀûÀÎ º¯È­¿¡ ÀÇÇØ È­¸éÀÌ ´Ù½Ã ±×·ÁÀú¾ß ÇÒ ¶§ InvalidateRect ÇÔ¼ö¸¦ È£ÃâÇÏ¿© È­¸éÀ» ¹«È¿È­ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

¿¹Á¦ 2

´ÙÀ½ ¿¹Á¦´Â ´­·¯Áø Å° Çϳª¸¸ Ãâ·ÂÇÑ´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static char ch[2];


	switch(iMessage) {
	case WM_CHAR:
		ch[0]=(TCHAR)wParam;
		InvalidateRect(hWnd,NULL,TRUE);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		TextOut(hdc,100,100,ch,strlen(ch));
		EndPaint(hWnd,&ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

¸Å¹ø Å°°¡ ´­·¯Áú ¶§¸¶´Ù (100,100)À§Ä¡¿¡ ¹®ÀÚ°¡ Ãâ·ÂµÇ¹Ç·Î ÀÌÀü¿¡ Ãâ·ÂµÈ ¹®ÀÚ¸¦ ¹Ýµå½Ã È­¸é¿¡¼­ »èÁ¦ÇÑ ÈÄ »õ ¹®ÀÚ¸¦ Ãâ·ÂÇØ¾ß ÇÑ´Ù. ±×·¡¼­ bErase¸¦ TRUE·Î ¼³Á¤ÇÏ¿© Å°°¡ ÀÔ·ÂµÉ ¶§¸¶´Ù ¹è°æÀ» Áö¿ìµµ·Ï ÇÏ¿´´Ù. ¸¸¾à bErase¸¦ FALSE·Î ÇÏ¿© ¹è°æÀ» Áö¿ìÁö ¾ÊÀ¸¸é ÀÌÀü¿¡ Ãâ·ÂµÈ ¹®ÀÚ°¡ Áö¿öÁöÁö ¾Ê¾Æ µÎ °³ÀÇ ¹®ÀÚ°¡ °ãÃļ­ ³ªÅ¸³¯ ¼öµµ ÀÖ´Ù. ´ÙÀ½Àº bErase¸¦ FALSE·Î ¼³Á¤ÇÏ°í W¿Í J¸¦ ¿¬¼ÓÇؼ­ ´­·¯º» °ÍÀÌ´Ù.

¸ÕÀú Ãâ·ÂµÈ W°¡ Áö¿öÁöÁö ¾Ê¾Ò±â ¶§¹®¿¡ J¿Í W°¡ °ãÃÄ º¸ÀÌ°Ô µÈ´Ù. bErase¸¦ TRUE·Î ¹Ù²Ù¸é ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù.

¿¹Á¦ 3

´ÙÀ½ ¿¹Á¦´Â InvalidateRect ÇÔ¼öÀÇ µÎ¹ø° ÀμöÀÎ lpRect¸¦ Å×½ºÆ®ÇÏ´Â ¿¹Á¦ÀÌ´Ù. ŸÀ̸Ӹ¦ ¼³Ä¡ÇÏ°í 1ÃÊ¿¡ Çѹø¾¿ ½Ã°£À» ÀÛ¾÷ ¿µ¿ª¿¡ Ãâ·ÂÇϵµ·Ï ÇÏ¿´´Ù. ¹è°æ¿¡´Â ¹ÙµÏÆÇ ¸ð¾çÀÇ º¹ÀâÇÑ ±×¸²ÀÌ ±×·ÁÁ® ÀÖ´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	static HANDLE hTimer;
	SYSTEMTIME st;
	static char sTime[128];
	RECT rt;
	int x,y;

	switch(iMessage) {
	case WM_CREATE:
		hTimer=(HANDLE)SetTimer(hWnd,1,1000,NULL);
		SendMessage(hWnd, WM_TIMER, 1, 0);
		return 0;
	case WM_TIMER:
		GetLocalTime(&st);
		wsprintf(sTime,"Áö±Ý ½Ã°£Àº %d:%d:%dÀÔ´Ï´Ù",
			st.wHour,st.wMinute,st.wSecond);
		SetRect(&rt,100,100,400,120);
		InvalidateRect(hWnd,&rt,TRUE);
		break;
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd,&ps);
		for (x=0;x<800;x+=5) {
			MoveToEx(hdc,x,0,NULL);
			LineTo(hdc,x,600);
		}
		for (y=0;y<600;y+=5) {
			MoveToEx(hdc,0,y,NULL);
			LineTo(hdc,800,y);
		}
		TextOut(hdc,100,100,sTime,strlen(sTime));
		EndPaint(hWnd,&ps);
		return 0;
	case WM_DESTROY:
		KillTimer(hWnd,1);
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

WM_TIMER ¸Þ½ÃÁö¿¡¼­ InvalidateRect ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÀÛ¾÷ ¿µ¿ªÀ» ¹«È¿È­Ç쵂 ½Ã°£ÀÌ Ãâ·ÂµÇ´Â ºÎºÐ¸¸ ¹«È¿È­ÇÔÀ¸·Î½á ¹è°æÀÇ ¹ÙµÏÆÇ ¸ð¾çÀº ´Ù½Ã ±×·ÁÁöÁö ¾Êµµ·Ï Çß´Ù. ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù.

¸¸¾à InvalidateRect(hWnd,NULL,TRUE); ·Î ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÛ¾÷ ¿µ¿ª Àüü°¡ ¹«È¿È­µÇ°í ¹ÙµÏÆÇ ¹«´Ì Àüü°¡ ´Ù½Ã Áö¿öÁ³´Ù°¡ ±×·ÁÁö¹Ç·Î È­¸é¿¡ ±ô¹ÚÀÓÀÌ º¸ÀÌ°Ô µÈ´Ù. ¹è°æ¿¡ º¹ÀâÇÑ ±×¸²ÀÌ ÀÖ°í È­¸éÀÇ ÀϺθ¸ º¯°æÇØ¾ß ÇÒ °æ¿ì´Â lpRect¿¡ ÇÊ¿äÇÑ ÃÖ¼ÒÇÑÀÇ ¿µ¿ª¸¸ °è»êÇÏ¿© ²À ÇÊ¿äÇÑ ºÎºÐ¸¸ ´Ù½Ã ±×¸®µµ·Ï ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

Âü°íÇÔ¼ö InvalidateRgn, ValidateRect
Ç÷¿Æû 95ÀÌ»ó
ÂüÁ¶ ¹«È¿ ¿µ¿ª¿¡ ´ëÇؼ­´Â 4Àå, 12ÀåÀ» Âü°íÇÑ´Ù.

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