2013-04-24 4 views
0

나는 나에게 PDX에 설명 된 컨트롤 주위에 사각형을주는 코드, C++ MFC

HWND hWndTmp = pDX->m_pDlgWnd->GetSafeHwnd(); 
    hWndTmp = GetDlgItem(hWndTmp, pDX->m_idLastControl); 
    CWnd *wnd; 
    wnd = wnd->FromHandle(hWndTmp); 
    RECT wndRect; 
    wnd->GetWindowRect(&wndRect); 

있습니다.

사용자가 눈을 끄는 데 몇 번이나이 컨트롤 주위에 사각형을 그립니다. 나는 이것을 할 수있는 방법에 대해 잠시 동안 수색했지만 아무 것도 실제로 나를 위해 일하는 것 같지 않습니다.

나는이 http://msdn.microsoft.com/en-us/library/sx8yykw8.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

을 시도했다 그러나 찾을 수 cannout "시스템"나에게 말한다 또는 실제가 아닙니다.

사각형을 그릴 좌표가 주어진 간단한 방법이 있습니까?

+0

제공하신 링크는 관리되는 C++ 용입니다. –

+0

아마 그게 왜 작동하지 않았다. 그리고 나는 정말로 내가 생각하는 "방언"들 사이의 차이에 대해 확신하지 못합니다. Win32, CLI를 관리하는 MFC가 들립니다. 나는 이것만을 배웠고 언어 자체는 배웠다. 나는 여러 번 배우려고 노력했지만 모든 자습서는 각 일에 대해 구체적으로 말하고 전체 개요를 제공하지는 않습니다. –

+0

이 대화 상자가 자신의 것 (즉, 자신의 코드를 가지고 있지 않은 제 3 자)이라면,'OnPaint'를 오버라이드하여 그 일을해야합니다. –

답변

2

컨트롤의 화면 사각형을 가져 와서 Dialog의 클라이언트로 변환하고 대화 상자에 OnPaint을 무시하고 그곳에 사각형을 그립니다 (약간 팽창). 이것은 당신이 확실히 그것을 보게 될 것이고 컨트롤 그 자체의 그림을 방해하지 않는다는 것을 의미 할 것입니다.

0

가능한 경우, Moo-Juice의 해결책을 찾으십시오. 관심사를 더 잘 구분합니다. 당신이 빠른 수정이 필요한 경우는 RECT를 참조 조금이 대화 상자의 테두리가 중복되지 않도록 축소하지 않는 경우 그러나,이

CClientDC drawingContext(pDX); 
RECT wndRect; 
wnd->GetWindowRect(&wndRect); 
//Shrink wndRect before if needed 
CPoint rectPoints[5]; 
rectPoints[0] = CPoint(wndRect.left, wndRect.top); 
rectPoints[1] = CPoint(wndRect.right, wndRect.top); 
rectPoints[2] = CPoint(wndRect.right, wndRect.bottom); 
rectPoints[3] = CPoint(wndRect.left, wndRect.bottom); 
rectPoints[4] = rectPoints[0]; 
CPen* oldPen = drawingContext.SelectStockObject(RED_PEN); 
drawingContext.Polyline(rectPoints, 5); 
drawingContext.SelectObject(oldPen); 

을 시도합니다.

+0

슬프게도 이것은 아무것도하지 않습니다. 그것은 오류를 던지지는 않지만 컨트롤에는 보이지 않는다는 것을 의미합니다. –

+0

rect를 축소하려고 했습니까? 'wndRect.left = wndRect.left + 5; wndRect.right = wndRect.right-5; 등등? –

+0

그래, 아직 아무것도. –