Вы можете создать мини-приложение из ресурса диалога, вместо CreateWindow() вы используете CreateDialog(). Шаблонный код может выглядеть следующим образом, минус требуется проверка ошибок:
#include "stdafx.h"
#include "resource.h"
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) {
DestroyWindow(hDlg);
PostQuitMessage(LOWORD(wParam)-1);
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
if (hWnd == NULL) DebugBreak();
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
Который предполагает, что вы создали диалог с редактором ресурсов с помощью ID IDD_DIALOG1.
Вы можете, если вы чувствуете себя очень храбрым, создавать диалоги непосредственно через CreateWindowEx, используя стиль WC_DIALOG. –
Кажется, что [EndDialog()] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645472%28v=vs.85%29.aspx) предполагается использовать с модальными диалогами (созданных такими функциями, как [DialogBox()] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645452%28v=vs.85%29.aspx). Для _ [немодальной] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645434%28v=vs.85%29.aspx)_, как описано выше, следует использовать [DestroyWindow()] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632682%28v=vs.85%29.aspx). –
Вы правы. Он был очень доволен EndDialog(), вероятно, достаточно распространенной ошибкой для обработки его в winapi :) –