Nachrichtenbehandlung bei Maus über Steuerelement!!
-
Hallo,
folgendes Problem:
Ich möchte in einem Unterdialog mit unterschiedlichen Steuerelementen einen Hinweis im Hauptdialog ausgeben, wenn sich der Mauszeiger über einem solchen Element befindet. Für jedes Steuerelement eine andere Nachricht.Das wird auch durch den folgenden Code schon realisiert....
BOOL CDlgEinbau::PreTranslateMessage(MSG* pMsg) { // Funktion zur Überprüfung ob Mauszeiger über Steuerelement int nID[3]; nID[0] = IDC_COMBO_POSITION; nID[1] = IDC_BUTTON_TEST; nID[2] = IDC_BUT; // wurde die Maus bewegt? //if (pMsg->message == WM_MOUSEMOVE ) if (pMsg->message == WM_MOUSEMOVE || WM_NCHITTEST) { for ( int i = 0; i < 3; i++) { if (pMsg->hwnd == GetDlgItem(nID[i])->m_hWnd) { switch (i) { case 0: // ComboBox ((CProtADMADlg*)GetParent())->m_strHint = "Hinweis ComboBox"; ((CProtADMADlg*)GetParent())->UpdateData(FALSE); TRACE ("Maus über Steuerelement!"); break; case 1: ..... etc.
Und nun zum Problem. Wenn ich mit dem Mauszeiger über keinem dieser Steuerelemente befinde, dann soll eine Standardnachricht angezeigt werden.
Wie ist das lösbar? Bin für alle Tipps und Ratschläge wirklich dankbar.
Gruss
Stefan
-
Setz doch eine bool Variable am anfang der Funktion auf false.
Wenn du das ausgibst, setzt du sie auf true.
ist sie am Ende noch immer false, gib die Standardmeldung aus.
-
if (pMsg->message == WM_MOUSEMOVE || WM_NCHITTEST) { ((CProtADMADlg*)GetParent())->m_strHint = "nirgends"; for ( int i = 0; i < 3; i++) { if (pMsg->hwnd == GetDlgItem(nID[i])->m_hWnd) { switch (i) { case 0: // ComboBox ((CProtADMADlg*)GetParent())->m_strHint = "Hinweis ComboBox"; TRACE ("Maus über Steuerelement!"); break; case 1: ..... etc. } ((CProtADMADlg*)GetParent())->UpdateData(FALSE); } {
ohne Gewähr und ohne Pfeil und Bogen
-
Hallo Danke euch beiden.
Bei der zweiten Variante ist noch darauf zu achten, dass man das UpdateFalse() direkt nach der "Standard"-zuweisung aufruft. Dann klappts.Schönen Tag und nochmals Danke.
Gruss
Stefan