Winapi Design Problem



  • Ich arbeite seit einigen Tagen nun mit der Winapi, doch bin ich mit dem Fensterdesign nicht so ganz zufrieden!
    Das hier ist mein Ansatz: http://img577.imageshack.us/img577/2664/winme.jpg
    Und das fand ich in der MSDN: http://img38.imageshack.us/img38/2752/windowsl.png
    Der unterschied ist deutlich und deshalb wollte ich fragen, was ich falsch mache.

    Mein Code:

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    				   PSTR szCmdLine, int iCmdShow)
    {
        HWND hWnd testButton;
        MSG msg;
        WNDCLASSA wc;
    
    	wc.style          = CS_HREDRAW | CS_VREDRAW;
        wc.cbClsExtra     = 0;
        wc.cbWndExtra     = 0;
        wc.hInstance      = hInstance;
        wc.hIcon          = LoadIconA(NULL, "test.ico");
        wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground  = GetSysColorBrush(COLOR_3DFACE);
        wc.lpszMenuName   = NULL;
        wc.lpfnWndProc    = WndProc;
        wc.lpszClassName  = "Test";
    
        RegisterClassA(&wc);
    
        hWnd = CreateWindowA("Test",
                             "Test",
                             WS_OVERLAPPED |
    						 WS_CAPTION |
    						 WS_SYSMENU |
    						 WS_MINIMIZEBOX |
    						 WS_VISIBLE,
                             468,
                             260,
    						 mainWidht,
    						 mainHeight,
                             NULL,
                             NULL,
                             hInstance,
                             NULL );
    
        ShowWindow(hWnd, iCmdShow);
        UpdateWindow(hWnd);
    
    	testButton = CreateWindowA("BUTTON", "Button", WS_VISIBLE | WS_CHILD, 180, 30, 100, 30, hWnd, NULL, hInstance, NULL);
        if(!testButton)
    	{
    		return FALSE;
    	}
    
    	SendMessage(testButton, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
    
        while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		case WM_CREATE:
    		{
    		}
    
    		case WM_COMMAND:
    		{
    		}
    
    		break;
    
    		case WM_CLOSE:
    		{
    			DestroyWindow(hWnd);
    			return 0;
    		}
    		case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return 0;
    		}
    	}
    	return DefWindowProcA(hWnd, message, wParam, lParam);
    }
    


  • Du solltest vielleicht einen Resource-Editor (Dialog-Editor) verwenden und den Dialog mit "DialogBox" anzeigen...


  • Mod

    ... und vor allem sollte er ein Manifest verwenden.
    http://msdn.microsoft.com/en-us/library/bb773175(VS.85).aspx

    Dies wurde hundertfach bereits in diesem Forum erklärt.



  • Ich hab nun herausgefunden, dass es für mein Problem reicht, wenn ich folgendes zum Code hinzufüge:

    #ifdef _UNICODE
    #if defined _M_IX86
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_IA64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #elif defined _M_X64
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #else
    #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
    #endif
    #endif
    

Anmelden zum Antworten