그냥 다 올리는게 편할려나.
#include <Windows.h>
#include "resource.h"
// 전역변수
HINSTANCE hInst;
HWND hDigMain;
BOOL CALLBACK MainDigProc(HWND, UINT, WPARAM, LPARAM);
BOOL CALLBACK testProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
hInst = hInstance;
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), HWND_DESKTOP, MainDigProc);
return 0;
}
BOOL CALLBACK MainDigProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
//파일 찾기, IDLOAD 활성화.
switch (iMessage) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDSTART:
if (!IsWindow(hDigMain)) {
hDigMain = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG2), HWND_DESKTOP, testProc);
ShowWindow(hDigMain, SW_SHOW);
}
//EndDialog(hWnd, IDSTART);
return TRUE;
case IDLOAD:
EndDialog(hWnd, IDLOAD);
return TRUE;
case ID_OPTION:
EndDialog(hWnd, ID_OPTION);
return TRUE;
case IDCANCEL:
EndDialog(hWnd, IDLOAD);
return TRUE;
}
break;
}
return FALSE;
}
BOOL CALLBACK testProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
switch (iMessage) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
case IDCANCEL:
EndDialog(hWnd, IDLOAD);
return TRUE;
}
break;
}
return FALSE;
}
대화상자 기반으로 만들려고 해봤음. 처음에 IDSTART를 호출하면 첫번째 창은 닫고, 이어서 창이 뜨게 만들려고 했는데. 이 상황에선 IsWindow를 안쓰는걸까. 잘 모르겠다;
호출해서 창을 만들고, 닫고, 다시 만들려고 버튼을 누르면 창이 안나와.
WM_COMMAND case IDSTART:에서 //지우면 창이 뜨고 바로 프로그램이 종료됨.
IDSTART는 상수인데 어찌 호출을 한단 말이냐
내가 용어를 잘 몰라서 표현을 잘못 했을지도. 버튼을 눌러서 .. ?
닫기 버튼 누르면 WM_DESTROY 가 호출된다는데 그 때 엔드 다이어로그 해야하지않을까? 윈api 해본적이 없어서 걍 추측이다. 미안
한번 해볼게!
http://lgstar.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다. - DCW