2017-03-24 3 views
2

Ich möchte keine anderen Klassen für diesen Zweck wie easysize oder sizecbar von codeproject.com verwenden. Ich benutze MFC CDialogEx. Ich versuche das:Wie man cdialogex die Größenänderung gut behandelt?

LRESULT ChildDialog::OnNcHitTest(CPoint point) 
{ 
    // TODO: Add your message handler code here and/or call default 
    //UINT nHitTest = CWnd::OnNcHitTest(uParam, lParam); 
    //return (nHitTest == HTLEFT) ? HTNONE : nHitTest; 

    return CDialogEx::OnNcHitTest(point); 
} 

void ChildDialog::OnSizing(UINT fwSide, LPRECT pRect) 
{ 
    // 
    //TRACE("%d\n", fwSide); 

    if (fwSide == WMSZ_RIGHT) 
    { 

     SetClassLong(m_hWnd, 
      GCL_HCURSOR, 
      (LONG)LoadCursor(NULL, IDC_ARROW)); 

     //ASSERT(FALSE); 
     //AfxMessageBox(_T("right")); 
    } 
    // TODO: Add your message handler code here 

    CDialogEx::OnSizing(fwSide, pRect); 


} 

Wenn ich rechts auf den Dialog Nachricht rechts klicken.

Wie Sie im Krug sehen können, versuche ich so zu tun. Cursor ändern, schwarze Punktlinien zeichnen. Größe ändern Dialog nur eine Seite oben und möchte alle Ecke und links, rechts und unten deaktivieren. Und auch wenn ich den Dialog von oben verändere, möchte ich auch das obere Steuerelement verschieben.

enter image description here

Ich will nicht jemand für mich all dies tun. Nur Rat, wie ich das erreichen kann. Ich nehme diesen Krug von Software depends.exe. Jede Hilfe wird zu schätzen wissen. Danke im Voraus.

+0

Verwenden Sie Visual Studio? Sie können den Dialog so einrichten, dass die Größe in der IDE geändert wird. Warum erfinden Sie das Rad neu? –

+0

@AndrewTruckle Ja ich benutze Visual Studio 2013 mit MFC. –

+0

Ziehen Sie die Version 2015 oder 2017 in Betracht, da sie in der IDE native Unterstützung für die Größenänderung von Dialogen hinzugefügt haben. Ich habe die CSizingDialog-Klasse, von der ich früher abhängig war, vollständig entfernt. –

Antwort

0

Sie müssen OnNCHitTest und OnSetCursor bearbeiten, um den Cursor zu ändern. Geben Sie HTNOWHERE von OnNCHitTest zurück, wenn sich der Cursor über einem Rahmen befindet, und setzen Sie den entsprechenden Cursor in OnSetCurosr. Sie können eine Membervariable über OnNCHitTest setzen, um den Hit-Testwert zu kennen, wie m_hittest. Um die Dimensionierung durchzuführen, können Sie die CRectTracker-Klasse in OnMouseMove verwenden, wenn Sie das Capture haben (linke Maustaste gedrückt).

Verwandte Themen