Erstellen eines normalen Windows mittels Dialog-Button
-
Hallo,
ich habe ein Problem, ein normales Window zu starten, wenn ich auf einen Button in meinem Haupt-Dialog-Fenster drücke. Ich brauche aber ein leeres Fenster, um darin später dann OpenGL zu starten. Hier ist mein fehlerhafter Code zu diesem Problem. Danke für nützliche Hinweise!
CODE:
#include <windows.h> #include "resource.h" HWND hwnd = NULL; HBRUSH g_hbrBackground = NULL; const char lpClassName[] = "myWindowClass"; BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { int i=210; switch(Message) { case WM_INITDIALOG: g_hbrBackground = CreateSolidBrush(RGB(i, i, i)); SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION))); SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION))); break; case WM_CLOSE: EndDialog(hwnd, 0); break; case WM_CTLCOLORDLG: return (LONG)g_hbrBackground; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: EndDialog(hwnd, 0); break; case IDD_BUTTON1: ShowWindow(hwnd, SW_SHOW); while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; case IDCANCEL: EndDialog(hwnd, 0); break; } break; case WM_DESTROY: DeleteObject(g_hbrBackground); break; default: return FALSE; } return TRUE; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_EXIT: DestroyWindow(hwnd); break; default: return FALSE; } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; MSG Msg; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+18); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);; wc.lpszClassName = lpClassName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wc); hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, lpClassName, "My Window", WS_OVERLAPPEDWINDOW, 0, 0, 480, 240, NULL, NULL, hInstance, NULL); return DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(IDD_DIALOG1),hwnd, DlgProc); }edit: sfds
-
Vielleicht solltest du besser einen moduslosen Dialog mit CreateDialog erstellen...