2017-03-24 1 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

대화 상자 크기 조정을 위해 IDE에서 네이티브 지원을 추가함에 따라 버전 2015 또는 2017 사용을 고려하십시오. 나는 이제 내가 의존했던 CSizingDialog 클래스를 완전히 제거했다. –

답변

0

커서를 변경하려면 OnNCHitTest 및 OnSetCursor를 처리해야합니다. OnNCHitTest에서 커서가 테두리 위에있을 때 HTNOWHERE을 반환하고 OnSetCurosr에 해당 커서를 설정합니다. OnNCHitTest에서 멤버 변수를 설정하여 m_hittest와 같은 히트 테스트 값을 알 수 있습니다. 캡쳐 (왼쪽 단추 누르기)가있을 때 크기 조정을 수행하려면 OnMouseMove에서 CRectTracker 클래스를 사용할 수 있습니다.

관련 문제