Draggable CDialog
-
Meine Ideen habe ich aus diesem codeproject Artikel entnommen.
Mein Code ist jetzt wirklich 1:1 wie in dem besagten Artikel... Soweit ich rausgefunden habe liegt es daran, dass ich die OnCnHitTest() Funktion nicht korrekt überschreiben kann:
Also um es ganz klar auszurücken:
In meiner Dialogklasse CCounterDlg.h steht: ( http://pastebin.ca/379965 )public: afx_msg UINT OnNcHitTest(CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); bool m_mousedown;1:1 steht es so im Artikel von codeproject http://pastebin.ca/379964
Implementiere die Funktion:
UINT CCounterDlg::OnNcHitTest(CPoint point) { AfxMessageBox("boo"); CRect r; GetClientRect(&r); ClientToScreen(&r); if(r.PtInRect(point)) { if(m_mousedown) { return HTCAPTION; } } return CDialog::OnNcHitTest(point); }Ausser dem Objektnamen gibt es keinen Unterschied (meine komplette cppSource hier: http://pastebin.ca/379973 )
Codeprojekt Artikelsource: http://pastebin.ca/379976Wenn ich jetzt in meiner Source in OnNCHitTest() ein AfxMessageBox("boo") mache sehe ich die Meldung nie, mache dasselbe im codeprojekt Source bekomm ich endlos viele Messageboxen - was mir sagt dass in meiner Source etwas mit den Nachrichten nicht stimmt.. Ich arbeite mit Visual Studio.NET 2003! Ich hab die afx_msg UINT OnNcHitTest(CPoint point);... einfach in meine Klasse kopiert und denke desswegen wird etwas in der Nachrichtentabelle nicht korrekt erstellt? Wenn es an dem liegt: Wie bzw Wo in Visual Studio 2003 kann ich diese MessageMaps definieren damit die Nachricht WM_NCHITTEST and meine OnNcHitTest() Funktion geleitet wird? In VC++ 6.0 gibts ja den netten ClassWizard mit seinen MessageMaps... http://www.coding-help.de/hilfe.html <-- hier hab ich mich auch schon rumgeschaut nur ist "Erreignishandler wird hinzugefügt" deaktiviert wenn ich auf den Dialog (kein Control?) klick. Ich will ja mein Dialog draggable machen und nicht ein control auf meinem Dialog.
Ich weiss nicht woran es sonst liegen kann.
Hoffentlich kann mir jemand Helfen..MfG
**
Edit: Problem gelöst! Thread kann geschlossen werden**
-
Ist denn der ON_NCHITSTESt uach in der Messagemap eingetragen?
-
UINT CMyAppDlg::OnNcHitTest(CPoint point) { UINT nHit = CDialog::OnNcHitTest(point); return (nHit == HTCLIENT ? HTCAPTION : nHit); }Und dein Fehler ist, wie Martin schon sagte, das du die Nachricht nicht in der Messagemap angelegt hast ...