ComboBox lässt das Fenster "hängen"



  • Hallo liebe c++-Fans,
    da ich ein kleines Problem mit der wundervollen ComboBox habe, möchte ich Euch um Hilfe bitten.
    Sobald ich die ComboBox aufklappe, so hängt sich das Fenster auf. Ich muss das Fenster verlassen -> CB schließt sich -> ich kann wieder *klick *klick (jedoch nicht die CB)

    hComboBox_SearchType = CreateWindow("COMBOBOX",0,CBS_DROPDOWNLIST | WS_VISIBLE | WS_CHILD,400,10,100,40,hWnd,(HMENU)IDC_COMBOBOX_SEARCHTYPE,0,0);
    SendMessage(hComboBox_SearchType,CB_ADDSTRING,0,(LPARAM)"hi");
    

    Das ist der Code den ich für die Erstellung der CB benutze. -> kein Resourceeditor (IDE: MSVC2012)

    Über konstuktive Lösungsvor- bzw. Ansätze freue ich mich!


  • Mod

    Und das ist nicht die Ursache.
    Zeige uns Deine Fensterprozedur/Dialogproezedur.
    Vermutlich hast Du einen Bug in Deinem Command Handler.

    PS: Es gibt übrigens einen Debugger und Spy++ mit dem man auch solchen Dingen auf die Spur kommen kann...



  • Danke, dass du dich mit meinem Problem auseinandersetzt.
    in main() steht folgendes (im Bezug auf Fenster-Erstellung:

    WNDCLASS wcl;
    wcl.cbClsExtra = 0;
    wcl.cbWndExtra = 0;
    wcl.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wcl.hCursor = LoadCursor(hInstance,IDC_ARROW);
    wcl.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON_MAIN));
    wcl.hInstance = hInstance;
    wcl.lpfnWndProc = WndCallback;
    wcl.lpszClassName = "Some name";
    wcl.lpszMenuName = 0;
    wcl.style = CS_HREDRAW | CS_VREDRAW;
    if(!RegisterClass(&wcl))
    {
    	MessageBox(0,ERROR_WCL_REGISTER_FAILED,ERROR_CAPTION,MB_OK);
    	return 0;
    }
    HWND hWnd = CreateWindow(wcl.lpszClassName,"Window-Name....",WS_OVERLAPPEDWINDOW,0,0,500,500,0,0,hInstance,0);
    if(!hWnd)
    {
    	return 0;
    }
    
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
    while(true)
    {
    	MSG msg = {0};
    	if(GetMessage(&msg,hWnd,0,0))
    	{
    		if((msg.message == WM_QUIT) || (msg.message == WM_NULL))
    			break;
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    }
    UnregisterClass("Some name",hInstance);
    

    Zur ComboBox hab ich noch keine "Einträge" in der Callback-Funktion. Ich erstelle die ComboBox lediglich während der WM_CREATE Message.



  • Nun, Dein GetMessage-Loop holt nur Nachrichten an das Fenster mit dem HWND hwnd ab, die Nachrichten an die Combobox werden somit nicht bearbeitet werden können.
    Gib in GetMessage NULL als hwnd mit, und verwende Translate und Dispatch für alle Nachrichten, deren msg.hwnd != NULL.

    Edit: Das ist natürlich Grütze, Childwindows bekommen dann auch ihre Nachrichten. Ich bin mir nur gerade nicht sicher, ob gewissen Nachrichten mit NULL als hwnd für asynchrone callbacks usw. auftreten, die mit gegebenem hwnd nicht ausgeführt werden.
    Alles in allem: Ich hätte die Klappe halten sollen 😃



  • Hallo Decimad,

    Vielen Dank für deine Antwort! Es hat funktioniert!


Log in to reply