문제
나는이 물건의 그림을 처리하는 코드를 보았다 (DFCS_SCROLLSIZEGRIP
), 그러나 확실히 "무료"를 얻기 위해 적용 할 수있는 창 스타일이 있습니다. 오른쪽?
해결책
더 나은 대답 대신, 크기 그립을 그리는 코드를 게시하고 히트 테스트를 처리합니다. 또한 다시 칠하기 위해서는 크기가 나오는 동안 적절한 영역을 무효화해야합니다.
BOOL CMyDialog::OnEraseBkgnd(CDC* pDC)
{
if (CDialog::OnEraseBkgnd(pDC))
{
// draw size grip
CRect r;
GetClientRect(&r);
int size = GetSystemMetrics(SM_CXVSCROLL);
r.left = r.right - size;
r.top = r.bottom - size;
pDC->DrawFrameControl(&r, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
return TRUE;
}
else
{
return FALSE;
}
}
-
LRESULT CMyDialog::OnNcHitTest(CPoint point)
{
// return HTBOTTOMRIGHT for sizegrip area
CRect r;
GetClientRect(&r);
int size = GetSystemMetrics(SM_CXVSCROLL);
r.left = r.right - size;
r.top = r.bottom - size;
ScreenToClient(&point);
if (r.PtInRect(point))
{
return HTBOTTOMRIGHT;
}
else
return CDialog::OnNcHitTest(point);
}
다른 팁
이 기능을 무료로 얻을 기본 스타일이 있다고 생각하지 않습니다. 클래스 이름으로 새 자식 창을 만들어야합니다. Scrollbar
그리고 제어 스타일 sbs_sizegrip
위에서 언급 한 onerasebkgnd 및 onnchittest 외에도 창 크기의 그립 영역을 무효화해야합니다. 그렇지 않으면 확대 될 때 마크가 남습니다.
void CMyDialog::OnSize(UINT nType, INT cx, INT cy)
{
CRect rc;
int iSize=GetSystemMetrics(SM_CXVSCROLL);
GetClientRect(rc);
InvalidateRect(CRect(rc.left-iSize, rc.bottom-iSize, rc.right, rc.bottom), FALSE);
CDialog::OnSize(nType, cx, cy);
}
제휴하지 않습니다 StackOverflow