Nachricht von ComboboxEx



  • hi

    ich verwende in einem WTL-Projekt die ComboBoxEx - also die erweiterte ComboBox-Variante. Ich verwende dazu einen Dialog.
    Nun will ich natürlich darauf reagieren, ob der Benutzer einen Eintrag auswählt, oder etwas ins Editfeld schreibt.
    Dafür gibt es das Notify Event : CBN_SELCHANGE

    Die Nachricht kommt jedoch nie in WM_NOTIFY an.

    Nur CBEN_ENDEDIT kommt an. Jedoch nicht wenn man etwas auswählt, oder nachdem man etwas eingegeben hat, sondern immer erst dann wenn das Edit den Fokus verliert.

    Was muss man da machen?

    thx



  • Die CBN_SELCHANGE kommt über die WM_COMMAND :p

    Und für dich könnten CBN_EDITUPDATE und CBN_EDITCHANGE interessant sein, kommen auch über die WM_COMMAND 🙂

    Verwirrt mich aber auch regelmäßig, "CBN" sieht schließlich stark nach Combobox-Notify aus...



  • baah THX

    die ComboBoxEx Kommandos werden über WM_Notify gesendet, der Rest über WM_COMMAND - ich hab da wohl was falsches angenommen.

    Leider isses so, dass die Enter-Taste nicht als Eingabe-Ende angenommen wird. Ich vermute es liegt am Dialogmanager.

    ich habe so die WndProc der ComboBox umgebogen, um so auf den Dialogmanager reagieren zu können. Also die Entertaste abzufangen und so darauf reagieren zu können.
    Leider funktioniert es nicht. Irgendwelche Fehler?

    LRESULT CALLBACK m_LocalAddressComboBox_WindowProc(  HWND hwnd,  UINT uMsg,   WPARAM wParam,  LPARAM lParam)
    	{
    		if (uMsg == WM_KEYDOWN)
    			//wParam == VK_RETURN)
    			MessageBox(hwnd,_T("123"),_T("123"),0);
    
    		LONG oldWnd = (LONG)GetWindowLong(hwnd,GWL_USERDATA);
    		LRESULT lres = CallWindowProc((WNDPROC)oldWnd, hwnd, uMsg, wParam, lParam);
    		if ((uMsg == WM_GETDLGCODE) && lParam &&
    		    ((MSG *)lParam)->message == WM_KEYDOWN &&
    			((MSG *)lParam)->wParam == VK_RETURN) 
    				lres |= DLGC_WANTMESSAGE;
    
    		return lres;
    	}
    
    ...oninitdialog
    
    LONG oldWnd = (LONG)m_LocalAddressComboBox.GetWindowLong(GWL_WNDPROC);
    		m_LocalAddressComboBox.SetWindowLong(GWL_USERDATA, (LONG)oldWnd);
    		m_LocalAddressComboBox.SetWindowLong(GWL_WNDPROC, (LONG)&m_LocalAddressComboBox_WindowProc);
    

Anmelden zum Antworten