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...
-
... und vor allem sollte er ein Manifest verwenden.
http://msdn.microsoft.com/en-us/library/bb773175(VS.85).aspxDies 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