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...


Anmelden zum Antworten