8-3-³ª. InfoDlg

À̹ø¿¡ ¸¸µé¾î º¼ ¿¹Á¦´Â ´ëÈ­»óÀÚ¸¦ ÅëÇØ »ç¿ëÀÚ¿¡°Ô ÇöÀç ¼³Á¤µÈ °ªÀ» º¸¿©ÁÖ°í ¶ÇÇÑ »ç¿ëÀÚ°¡ ´ëÈ­»óÀÚ¸¦ ÅëÇØ °ªÀ» º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ´Â ¿¹Á¦ÀÌ´Ù. ¾ÆÁÖ ÀüÇüÀûÀÎ ´ëÈ­»óÀÚ ¿¹Á¦À̹ǷΠ¾Æ¿¹ Á¦ÀÛ ÀýÂ÷¸¦ ¿Ü¿öµÑ¸¸ÇÏ´Ù. ´ÙÀ½ ´Ü°è¸¦ µû¶ó ¿¹Á¦¸¦ ¸¸µé¾î º¸ÀÚ.

1¸ÕÀú InfoDlg ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ApiStart.txt¸¦ º¹»çÇØ¿Â ÈÄ lpszClass¸¦ "InfoDlg"·Î ¼öÁ¤ÇÑ´Ù.

2¸ÕÀú ÀÌ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ Àü¿ª º¯¼öµéÀ» ÆÄÀÏ ¼±µÎ¿¡ ¼±¾ðÇÑ´Ù.

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="InfoDlg";
int x;
int y;
char str[128];

ÁÂÇ¥¸¦ ±â¾ïÇÏ´Â °ª x,y¿Í ¹®ÀÚ¿­ str µî ¼¼ °³ÀÇ Àü¿ªº¯¼ö°¡ Á¤ÀǵǾî ÀÖ´Ù. Àü¿ª º¯¼ö´Â ÇÔ¼ö ³»ºÎ°¡ ¾Æ´Ï¸é ¾îµðµç ¼±¾ðÇصµ »ó°ü¾øÀ¸³ª ÀÌ ¿¹Á¦¿¡¼­´Â WndProc°ú ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú¿¡¼­ ÀÌ °ªµéÀ» ÂüÁ¶ÇϹǷΠ°¡±ÞÀûÀÌ¸é ¼Ò½ºÀÇ ¼±µÎ¿¡ ¼±¾ðÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½Àº WndProcÀ» ÀÛ¼ºÇÑ´Ù. ¼Ò½º¸¸ Àо¸é ¾î¶»°Ô µ¿ÀÛÇÏ´Â ¿¹Á¦ÀÎÁö ½±°Ô ÆÄ¾ÇµÉ °ÍÀÌ´Ù.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	switch(iMessage) {
	case WM_CREATE:
		x=100;
		y=100;
		strcpy(str,"String");
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,x,y,str,strlen(str));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

WM_CREATE¿¡¼­ ÁÂÇ¥¿Í ¹®ÀÚ¿­À» °¢°¢ (100,100) ±×¸®°í "String"À¸·Î ÃʱâÈ­ÇÏ¿´´Ù. ±×¸®°í WM_PAINT¿¡¼­ (x,y) ÁÂÇ¥¿¡ str ¹®ÀÚ¿­À» Ãâ·ÂÇÑ´Ù. ¿©±â±îÁö ÀÛ¼ºÇÑ ÈÄ ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸ÀÚ.

Á¤ÇØÁø À§Ä¡¿¡ ¹®ÀÚ¿­À» Ãâ·ÂÇϱ⸸ ÇÒ »Ó º°´Ù¸¥ ±â´ÉÀ» °¡Áö°í ÀÖÁö´Â ¾Ê´Ù. ÀÌÁ¦ ´ëÈ­»óÀÚ¸¦ Çϳª ¸¸µé¾î ¹®ÀÚ¿­°ª°ú ÀÌ ¹®ÀÚ¿­ÀÌ Ãâ·ÂµÉ ÁÂÇ¥¸¦ »ç¿ëÀÚ°¡ Á÷Á¢ º¯°æÇÒ ¼ö ÀÖµµ·Ï ÇØ º¸ÀÚ.

3Insert/Resource/Dialog Ç׸ñÀ» ¼±ÅÃÇÏ¿© »ç¿ëÀڷκÎÅÍ °ªÀ» ÀԷ¹ÞÀ» ´ëÈ­»óÀÚ¸¦ ¸¸µç´Ù. ¿ì¸®°¡ ÀԷ¹ްíÀÚ ÇÏ´Â °ªÀº ÁÂÇ¥°ª µÎ °³¿Í ¹®ÀÚ¿­ ÇϳªÀ̹ǷΠÀÌ °æ¿ì´Â ¿¡µðÆ® ÄÁÆ®·ÑÀ» ¼¼ °³ ¹èÄ¡ÇÏ¸é µÈ´Ù. ÁÂÇ¥¸¦ ÀԷ¹ÞÀ» ¿¡µðÆ®´Â À§ÂÊ¿¡ µÎ °³ ¹èÄ¡ÇÏ°í ¹®ÀÚ¿­À» ÀԷ¹ÞÀ» ¿¡µðÆ®´Â ¾Æ·¡ÂÊ¿¡ ¹èÄ¡ÇÑ ÈÄ ±æÀ̸¦ Á» ±æ°Ô ¸¸µé¾î ÁØ´Ù.

±×¸®°í °¢°¢ÀÇ ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ IDC_X, IDC_Y, IDC_STRÀ̶ó´Â ID¸¦ ÁÖµµ·Ï ÇÑ´Ù. ¸®¼Ò½º ÆÄÀÏÀ» InfoDlg.rc·Î ÀúÀåÇÑ ÈÄ ÇÁ·ÎÁ§Æ®¿¡ Æ÷ÇÔ½ÃŲ´Ù.

4»ç¿ëÀÚ°¡ ´ëÈ­»óÀÚ¸¦ È£ÃâÇÒ ¼ö ÀÖµµ·Ï WndProc¿¡ ´ëÈ­»óÀÚ¸¦ È£ÃâÇÏ´Â Äڵ带 »ðÀÔÇÑ´Ù. ¸Þ´º¸¦ ¼±ÅÃÇϰųª ´ÜÃàÅ°¸¦ ´©¸¦¶§ È£ÃâÇÏ´Â °ÍÀÌ ÀûÇÕÇÏ°ÚÁö¸¸ ÀÏ´Ü °¡Àå »ç¿ëÇϱ⠽¬¿î WM_LBUTTONDOWN ¸Þ½ÃÁö¸¦ »ç¿ëÇϵµ·Ï ÇÏÀÚ. WndProc¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,x,y,str,strlen(str));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_LBUTTONDOWN:
		if (DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),
			hWnd,InfoDlgProc)==1) 
			InvalidateRect(hWnd, NULL, TRUE);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

DialogBox ÇÔ¼ö·Î ´ëÈ­»óÀÚ¸¦ È£ÃâÇÏ¿´À¸¸ç ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú¸íÀº InfoDlgProcÀ¸·Î ÁöÁ¤ÇÏ¿´´Ù. ¹°·Ð Àá½Ã ÈÄ¿¡ ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ´ëÈ­»óÀÚ¸¦ ´Ü¼øÈ÷ È£ÃâÇϱ⸸ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ±× ¸®ÅÏ°ªÀ» »ìÆ캸°í 1ÀÌ ¸®ÅϵǾúÀ¸¸é À©µµ¿ì Àüü¸¦ ´Ù½Ã ±×¸®µµ·Ï ÇÏ¿´´Ù. 1ÀÌ ¸®ÅϵǾú´Ù´Â °ÍÀº »ç¿ëÀÚ°¡ °ªÀ» º¯°æÇÑ ÈÄ OK¹öÆ°À» ´­·¶´Ù´Â ¶æÀ̹ǷΠº¯°æµÈ ÁÂÇ¥¿¡ º¯°æµÈ ¹®ÀÚ¿­À» ´Ù½Ã ±×·Á ÁÖ¾î¾ß ÇÑ´Ù.

5¸¶Áö¸·À¸·Î ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú¸¦ ÀÛ¼ºÇØ ÁØ´Ù. ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ °¡Àå ÇÙ½ÉÀÌ µÇ´Â ºÎºÐÀÌ´Ù. ´Ü ÀÌ ÇÔ¼ö¸¦ WndProc¿¡¼­ »ç¿ëÇÏ°í ÀÖÀ¸¹Ç·Î WndProc ÀÌÀü¿¡ Äڵ带 ÀÛ¼ºÇϰųª ¾Æ´Ï¸é ¿øÇü¼±¾ðÀÌ¶óµµ ¸ÕÀú ÇØ µÎ¾î¾ß ÇÒ °ÍÀÌ´Ù.

#include "resource.h"
BOOL CALLBACK InfoDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	switch(iMessage) {
	case WM_INITDIALOG:
		SetDlgItemText(hDlg,IDC_STR,str);
		SetDlgItemInt(hDlg,IDC_X,x,FALSE);
		SetDlgItemInt(hDlg,IDC_Y,y,FALSE);
		return TRUE;
	case WM_COMMAND:
		switch (wParam) {
		case IDOK:
			GetDlgItemText(hDlg,IDC_STR, str,128);
			x=GetDlgItemInt(hDlg,IDC_X,NULL,FALSE);
			y=GetDlgItemInt(hDlg,IDC_Y,NULL,FALSE);
			EndDialog(hDlg,1);
			return TRUE;
		case IDCANCEL:
			EndDialog(hDlg,0);
			return TRUE;
		}
		break;
	}
return FALSE;
}

´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú¿¡¼­´Â µÎ °³ÀÇ ¸Þ½ÃÁö¸¸À» ó¸®ÇÏ°í ÀÖ´Ù. ¿ì¼± ´ëÈ­»óÀÚ°¡ óÀ½ ¸¸µé¾îÁú ¶§ È£ÃâµÇ´Â WM_INITDIALOG ¸Þ½ÃÁö¿¡¼­´Â ¼¼ °³ÀÇ ÄÁÆ®·Ñ¿¡ °ªÀ» ´ëÀÔÇÏ¿© »ç¿ëÀÚ¿¡°Ô ÇöÀçÀÇ ÁÂÇ¥¿Í ¹®ÀÚ¿­À» º¸¿©ÁÖµµ·Ï ÇÑ´Ù. ¸¸¾à ÀÌ ÃʱâÈ­¸¦ »ý·«ÇØ ¹ö¸®¸é »ç¿ëÀÚµéÀº ÇöÀç ¼³Á¤µÈ ÁÂÇ¥¿Í ¹®ÀÚ¿­°ªÀ» º¼ ¼ö ¾øÀ» °ÍÀÌ´Ù.

WM_COMMAND ¸Þ½ÃÁö¿¡¼­´Â µÎ °³ÀÇ ÄÁÆ®·Ñ·ÎºÎÅÍ Àü´ÞµÈ ÅëÁö ¸Þ½ÃÁö¸¦ ó¸®ÇÑ´Ù. IDOK(OK ¹öÆ°)°¡ Àü´ÞµÇ¾úÀ» °æ¿ì´Â Get* ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÄÁÆ®·Ñ·ÎºÎÅÍ °ªÀ» ÀÐÀº ÈÄ ÁÂÇ¥¿Í ¹®ÀÚ¿­À» º¯°æÇÑ´Ù. ±×¸®°í EndDialog ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ´ëÈ­»óÀÚ¸¦ Á¾·áÇ쵂 µÎ¹ø° Àμö·Î 1À» Àü´ÞÇÏ¿© ´ëÈ­»óÀÚ¸¦ È£ÃâÇÑ DialogBox ÇÔ¼ö°¡ 1À» ¸®ÅÏÇϵµ·Ï ÇØ ÁØ´Ù. IDCANCEL(Cancel ¹öÆ°)ÀÌ Àü´ÞµÇ¾úÀ» °æ¿ì´Â »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ °ªÀ» ¹«½ÃÇÏ°í EndDialog ÇÔ¼ö¸¦ È£ÃâÇÏ¿© °ð¹Ù·Î ´ëÈ­»óÀÚ¸¦ Á¾·áÇØ ¹ö¸°´Ù. ´Ü À̶§ Dialog ÇÔ¼ö·Î Àü´ÞµÇ´Â °ªÀº 0ÀÌ µÇµµ·Ï ÇÏ¿© È­¸éÀ» ´Ù½Ã ±×¸®Áö ¾Êµµ·Ï ÇØ ÁØ´Ù.

±×·³ ÀÌÁ¦ ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸ÀÚ. óÀ½ ½ÇÇàÇϸé (100,100) ÁÂÇ¥¿¡ StringÀ̶ó´Â ¹®ÀÚ¿­ÀÌ Ãâ·ÂµÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´­·¯ ¹®ÀÚ¿­À̳ª ÁÂÇ¥¸¦ º¯°æÇÏ°í OK¹öÆ°À» ´©¸£¸é º¯°æµÈ ÁÂÇ¥¿¡ º¯°æµÈ ¹®ÀÚ¿­ÀÌ Ãâ·ÂµÉ °ÍÀÌ´Ù.

´ëÈ­»óÀÚ¿Í ºÎ¸ð À©µµ¿ì°£¿¡ °ªµéÀÌ ¾î¶»°Ô Àü´ÞµÇ´ÂÁö ±× °úÁ¤À» ¸Ó¸®¼ÓÀ¸·Î ±×·Áº¸°í Á¤¸®ÇØ º¸µµ·Ï ÇÏÀÚ. ÀÌ ¿¹Á¦¸¦ ¿ÏÀüÈ÷ ÀÌÇØÇß´Ù¸é ÇÁ·ÎÁ§Æ®¸¦ ¿ÏÀüÈ÷ Áö¿î ÈÄ Ã³À½ºÎÅÍ ´Ù½Ã ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. ¾ÆÁÖ ÀüÇüÀûÀÎ À©µµ¿ìÁî ÇÁ·Î±×·¥À̹ǷΠ¿Ü¿öµÑ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù.


¸ñ·Ï º¸±â  ´ÙÀ½ °­Á            written by http://www.winapi.co.kr