2017-03-24 22 views
2

私はこの目的のためにcodeproject.comのeasysizeやsizecbarのような別のクラスを使いたくありません。 MFC CDialogExを使用しています。私はこれを試してみる:どのようにcdialogexのサイズ変更をうまく処理するには?

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); 


} 

私は右のダイアログメッセージの右をクリックしてください。

投手でわかるように、私はこのようにしています。カーソルを変更し、黒い点線を引く。リサイズダイアログは片側を上にして、すべてのコーナーと左、右と下を無効にしたい。また、上からダイアログをリサイズするときにも、上のコントロールを移動したい。

enter image description here

私は誰かが私のためにすべてを行う必要はありません。ちょうど私がこれを達成する方法をアドバイス。私はソフトウェアdepends.exeからこの投手を取る。どんな助けにも感謝します。前もって感謝します。

+0

Visual Studioを使用していますか? IDE内でダイアログのサイズを変更することができます。なぜ車を再発明するのですか? –

+0

@AndrewTruckleはい私はMFCでVisual Studio 2013を使用しています。 –

+0

バージョン2015または2017を試すことを検討してください。ダイアログのサイズ変更のために、IDEでネイティブサポートが追加されました。私は依存していたCSizingDialogクラスを完全に削除しました。 –

答えて

0

カーソルを変更するには、OnNCHitTestとOnSetCursorを処理する必要があります。 OnNCHitTestからHTNOWHEREを返します。カーソルがボーダー上にあり、OnSetCurosrに対応するカーソルが設定されています。 OnNCHitTestからメンバー変数を設定して、m_hittestのようなヒットテスト値を知ることができます。 サイズ変更を行うには、キャプチャ(左ボタンが押されている)があるときにOnMouseMoveでCRectTrackerクラスを使用できます。

関連する問題