| ¿øÇü | HWND CreateDialog(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc); |
| ¿øÇü | ÇØ´ç ÇÔ¼ö ¾øÀ½ |
| Àμö |
¢ºhInstance : ´ëÈ»óÀÚ ÅÛÇø®Æ®¸¦ °¡Áø ÀνºÅϽº ÇÚµé. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ÇÁ·Î¼¼½º¿¡ ¸®¼Ò½º°¡ Á¤ÀǵǾî ÀÖÀ¸¸é WinMainÀ¸·Î Àü´ÞµÈ hInstance°ªÀ» ³Ñ°ÜÁØ´Ù. ´Ù¸¥ DLLÀ̳ª ½ÇÇà ÆÄÀÏ¿¡ ¸®½º½º°¡ ÀÖÀ» °æ¿ì ÇØ´ç ¸ðµâÀÇ ÀνºÅϽº ÇÚµéÀ» ³Ñ°ÜÁØ´Ù. ¢ºlpTemplate : ´ëÈ»óÀÚ ÅÛÇø®Æ®ÀÇ IDÀÌ´Ù. ³ÎÁ¾·á ¹®ÀÚ¿·Î Á¤ÀÇµÈ ÅÛÇø®Æ®ÀÇ À̸§À̰ųª Á¤¼öÇüÀÇ IDÀÌ´Ù. ¸¸¾à ´ëÈ»óÀÚ ÅÛÇø®Æ®°¡ Á¤¼öÇüÀ¸·Î Á¤ÀǵǾî ÀÖÀ» °æ¿ì MAKEINTRESOURCE ¸ÅÅ©·Î ÇÔ¼ö·Î ID¸¦ ÁöÁ¤ÇØ ÁØ´Ù. ¢ºhWndParent : ÀÌ ´ëÈ»óÀÚ¸¦ ¼ÒÀ¯ÇÏ´Â ¿À³Ê À©µµ¿ìÀÇ ÇÚµéÀÌ´Ù. ÀÌ ÇÚµéÀÌ ÁöÁ¤ÇÏ´Â À©µµ¿ì´Â ¸ð´Þ ´ëÈ»óÀÚ°¡ ½ÇÇàÁßÀÎ µ¿¾È¿¡ »ç¿ë ±ÝÁöµÈ´Ù. ¢ºlpDialogFunc : ´ëÈ»óÀÚ·Î Àü´ÞµÇ´Â ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â ¸Þ½ÃÁö ó¸® ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ¹Ýµå½Ã ´ÙÀ½°ú °°Àº ¿øÇüÀ¸·Î ¼±¾ðµÇ¾î¾ß ÇÑ´Ù. BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); À©µµ¿ìÀÇ ¸Þ½ÃÁö¸¦ ó¸®ÇÏ´Â À©µµ¿ì ÇÁ·Î½ÃÀú¿Í µ¿ÀÏÇÑ ¿øÇüÀ» °¡Áø´Ù. ÀÌ ÇÔ¼ö¿¡¼´Â ¸Þ½ÃÁö¸¦ ó¸®ÇßÀ» °æ¿ì TRUE¸¦ ¸®ÅÏÇÏ¸ç ¸Þ½ÃÁö¸¦ ó¸®ÇÏÁö ¾Ê¾ÒÀ¸¸é FALSE¸¦ ¸®ÅÏÇÑ´Ù. ´Ü ¿¹¿ÜÀûÀ¸·Î WM_INITDIALOG ¸Þ½ÃÁöÀÇ ¸®ÅϰªÀº ¾î¶² ÄÁÆ®·Ñ¿¡ Æ÷Ä¿½º¸¦ ÁÙ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. WM_INITDIALOG¿¡¼ SetFocus ÇÔ¼ö·Î ƯÁ¤ ÄÁÆ®·Ñ¿¡ Æ÷Ä¿½º¸¦ ÁÖ¾úÀ» °æ¿ì TRUE¸¦ ¸®ÅÏÇÏ¸ç ±×·¸Áö ¾ÊÀ» °æ¿ì FALSE¸¦ ¸®ÅÏÇϴµ¥ ÀÌ °æ¿ì ½Ã½ºÅÛÀº ÅÇ ¼ø¼°¡ °¡Àå ºü¸¥ ÄÁÆ®·Ñ¿¡°Ô Æ÷Ä¿½º¸¦ ÁØ´Ù. |
| ¸®ÅÏ | ¼º°øÇÏ¸é »ý¼ºÇÑ À©µµ¿ìÀÇ ÇÚµéÀ» ¸®ÅÏÇÏ¸ç ½ÇÆÐ½Ã 0À» ¸®ÅÏÇÑ´Ù. |
| ¼³¸í |
lpTemplate Àμö°¡ ÁöÁ¤ÇÏ´Â ÅÛÇø®Æ®·Î ´ëÈ»óÀÚ¸¦ »ý¼ºÇÏ¸ç ´ëÈ»óÀÚ ÇÁ·Î½ÃÀú·Î WM_INITDIALOG¸Þ½ÃÁö¸¦ º¸³» Ãʱâȸ¦ Çϵµ·Ï ÇÑ´Ù. ´ëÈ»óÀÚ ÅÛÇø®Æ®°¡ WS_VISIBLE ½ºÅ¸ÀÏÀ» °¡Áö°í ÀÖÀ¸¸é ´ëÈ»óÀÚ¸¦ ȸéÀ¸·Î Ãâ·ÂÇϳª ÀÌ ½ºÅ¸ÀÏÀÌ ¾øÀ¸¸é ShowWindow ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡´Â ´ëÈ»óÀÚ°¡ º¸ÀÌÁö ¾Ê´Â´Ù. ÀÌ ÇÔ¼ö´Â ´ëÈ»óÀÚ »ý¼º ÈÄ °ð¹Ù·Î ´ëÈ»óÀÚ ÇÚµéÀ» ¸®ÅÏÇÑ´Ù. ÁÖ·Î ¸ðµ¨¸®½º ´ëÈ»óÀÚ¸¦ »ý¼ºÇÒ ¶§ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϱâ Àü¿¡ ¹Ýµå½Ã ÀÌ ´ëÈ»óÀÚ°¡ ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ´ÂÁö¸¦ Á¡°ËÇØ º¸¾Æ¾ß ÇÑ´Ù. ¸ÞÀÎ À©µµ¿ì´Â ÀÌ ÇÔ¼ö·Î ¸ðµ¨¸®½º ´ëÈ»óÀÚ¸¦ »ý¼ºÇÑ ÈÄ ¸Þ½ÃÁö·Î »óÈ£ ÀÛ¿ëÀ» ÇÏ¸ç ´ëÈ»óÀÚ°¡ ÇÊ¿ä¾øÀ» ¶§ DestroyWindow ÇÔ¼ö·Î ´ëÈ»óÀÚ¸¦ ÆÄ±«Èù´Ù. ´ÙÀ½ ¿¹Á¦´Â ¸ÞÀÎ À©µµ¿ìÀÇ »ö»óÀ» º¯°æÇÏ´Â ¸ðµ¨¸®½º ´ëÈ»óÀÚ¸¦ º¸¿©ÁØ´Ù. ¸ðµ¨¸®½º ´ëÈ»óÀÚÀ̹ǷΠÀÌ ´ëÈ»óÀÚ¸¦ ¿¾î ³õÀº »óÅ¿¡¼µµ ¸ÞÀÎ À©µµ¿ì¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¶¿ì½º ¿ÞÂÊ ¹öưÀ» ´ëÈ»óÀÚ¸¦ È£ÃâÇÏ¸ç ¿À¸¥ÂÊ ¹öưÀ¸·Î ´ëÈ»óÀÚ¸¦ ´Ý´Â´Ù.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
HWND hWndMain;
LPCTSTR lpszClass=TEXT("CreateDialog");
#include "resource.h"
HWND hDlg;
COLORREF cBack=RGB(255,255,255);
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
hWndMain=hWnd;
while(GetMessage(&Message,0,0,0)) {
if (!IsWindow(hDlg) || !IsDialogMessage(hDlg,&Message)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return Message.wParam;
}
BOOL CALLBACK ColorDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (wParam) {
case IDC_RED:
cBack=RGB(255,0,0);
break;
case IDC_GREEN:
cBack=RGB(0,255,0);
break;
case IDC_BLUE:
cBack=RGB(0,0,255);
break;
case IDC_YELLOW:
cBack=RGB(255,255,0);
break;
case IDC_CLOSE:
DestroyWindow(hDlg);
hDlg=NULL;
return TRUE;
}
InvalidateRect(hWndMain,NULL,FALSE);
return TRUE;
}
return FALSE;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
char Mes[]="¿ÞÂÊ ¹öư = ¸ðµ¨¸®½º ´ëÈ»óÀÚ È£Ãâ, ¿À¸¥ÂÊ ¹öư = ´ëÈ»óÀÚ ´ÝÀ½";
RECT rt;
HBRUSH brush,oldbrush;
switch(iMessage) {
case WM_LBUTTONDOWN:
if (!IsWindow(hDlg)) {
hDlg=CreateDialog(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),
hWnd,ColorDlgProc);
ShowWindow(hDlg,SW_SHOW);
}
return 0;
case WM_RBUTTONDOWN:
if (IsWindow(hDlg)) {
DestroyWindow(hDlg);
hDlg=NULL;
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
GetClientRect(hWnd,&rt);
brush=CreateSolidBrush(cBack);
oldbrush=(HBRUSH)SelectObject(hdc,brush);
FillRect(hdc,&rt,brush);
DeleteObject(SelectObject(hdc,oldbrush));
TextOut(hdc,10,10,Mes,lstrlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
¸ÞÀÎ À©µµ¿ìÀÇ ¹è°æ »ö»ó°ªÀ» °¡Áö´Â cBack°ú ¸ðµ¨¸®½º ´ëÈ»óÀÚÀÇ ÇÚµéÀ» °¡Áö´Â hDlg°¡ Àü¿ª º¯¼ö·Î ¼±¾ðµÇ¾î ÀÖ´Ù. ¸ðµ¨¸®½º ´ëÈ»óÀÚÀÇ ÇÚµéÀº ¹Ýµå½Ã Àü¿ª º¯¼ö·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ´ëÈ»óÀÚ¸¦ »ý¼ºÇÒ ¶§´Â IsWindow ÇÔ¼ö·Î ´ëÈ»óÀÚ ÇÚµéÀÌ ÇöÀç À¯È¿ÇÑÁö¸¦ ¹Ýµå½Ã Á¡°ËÇØ º¸°í ´ëÈ»óÀÚ°¡ »ý¼ºµÇ¾î ÀÖÁö ¾ÊÀ» ¶§¸¸ CreateDialog ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é µÎ°³ÀÇ ¸ðµ¨¸®½º ´ëÈ»óÀÚ°¡ ½ÇÇàµÉ ¼öµµ ÀÖ´Ù. ´ëÈ»óÀÚ ÇÁ·Î½ÃÀú¿¡¼´Â ´·¯Áø ¹öư¿¡ µû¶ó Àü¿ª º¯¼ö cBackÀ» º¯°æÇϰí InvalidateRect ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¸ÞÀÎ À©µµ¿ì¸¦ ´Ù½Ã ±×¸®µµ·Ï ÇÑ´Ù. ¸¸¾à ¸ÞÀÎ À©µµ¿ì¿¡°Ô ÀÛ¾÷ Áö½Ã¸¦ ÇϰíÀÚ ÇÑ´Ù¸é »ç¿ëÀÚ Á¤ÀÇ ¸Þ½ÃÁö¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù. ´ëÈ»óÀÚ¸¦ Á¾·áÇÒ ¶§´Â ¹Ýµå½Ã DestroyWindow ÇÔ¼ö·Î ´ëÈ»óÀÚ À©µµ¿ì¸¦ ÆÄ±«ÇØ¾ß Çϸç EndDialog¸¦ »ç¿ëÇØ¼´Â ¾ÈµÈ´Ù. ¸ðµ¨¸®½º ´ëÈ»óÀÚ¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ ¸Þ½ÃÁö ·çÇÁ¿¡´Â ¹Ýµå½Ã IsDialogMessage ÇÔ¼ö¸¦ Æ÷ÇÔÇÏ¿© ´ëÈ»óÀÚ¸¦ À§ÇÑ ¸Þ½ÃÁö¸¦ ´ëÈ»óÀÚ¿¡°Ô º¸³» ÁÖ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é TabŰ ó¸® µî ±âº»ÀûÀÎ ´ëÈ»óÀÚ ±â´ÉÀÌ Á¦´ë·Î ¼öÇàµÇÁö ¾Ê´Â´Ù. |
| Âü°íÇÔ¼ö | DialogBox : ¸ð´Þ ´ëÈ»óÀÚ¸¦ »ý¼ºÇÏ°í ½ÇÇàÇÑ´Ù. |
| Ç÷¿Æû | 95ÀÌ»ó |
| ÂüÁ¶ |
|
written by http://www.winapi.co.kr
|