CreateWindow liefert keinen HANDLE zurück
-
Moin,
ich schreibe manchmal WinApi-Programme, die dann einfach nicht angezeigt werden - obwohl ich keine Variation drinhabe.
Mit dem Einbau von 1, 2 Fehlerabfragen bin ich dann zu dem Schluss gekommen, das bei
hWnd = CreateWindow([]);nix geliefert wird.
Meine Frage: WARUM?
Ich gebe euch mal ein bissel Code und hoffe dann auf eure Antwort.
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc = {0}; wc.style = CS_HREDRAW | CS_VREDRAW; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.hInstance = hInstance; wc.lpszMenuName = NULL; wc.lpszClassName = szAppName; RegisterClass(&wc); hWnd = CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if(!hWnd) { MessageBox(NULL, "Kein Handle", "Fehler", MB_ICONERROR | MB_OK); exit(-1); } ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }Euer ItsNotYou
-
Window Procedure fehlt irgendwie

-
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hEingabe; static HWND hIP_Berechnen; switch(message) { case WM_CREATE: { hEingabe = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL); hIP_Berechnen = CreateWindow("button", "IP berechnen", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL); return(0); } case WM_SIZE: { MoveWindow(hEingabe, 110, 50, 500, 25, TRUE); MoveWindow(hIP_Berechnen, 50, 50, 100, 25, TRUE); return(0); } case WM_COMMAND: { if(lParam == (LPARAM)hIP_Berechnen) { if(HIWORD(wParam) == BN_CLICKED) { int iLength = GetWindowTextLength(hEingabe); char *buffer = (CHAR*)malloc(iLength); GetWindowText(hEingabe, buffer, iLength + 1); char IP[16]; if(IP_auslesen(IP, buffer)) { hEingabe = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", IP, WS_CHILD | WS_VISIBLE, 110, 50, 500, 25, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL); } else { hEingabe = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "Fehler beim Umrechnen", WS_CHILD | WS_VISIBLE, 110, 50, 500, 25, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL); } } } return(0); } case WM_DESTROY: { PostQuitMessage(0); return(0); } } return DefWindowProc(hWnd, message, wParam, lParam); }Die Funktio gibts auch, ist aber aus Testgründen noch ein ei´nfaches return(TRUE).
Und natürlich vorher deklariert.
Keine Fehlermeldungen vom Compiler.
-
Die Window Procedure musst du bei der Registrierung der Klasse festlegen. Dann klappt das Programm auch.