¿øÇü | 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
|