Zeige Größe Griff in CDialog?
Frage
Ich habe Code gesehen, die die Zeichnung dieser Sache (DFCS_SCROLLSIZEGRIP
) behandelt, aber sicher gibt es ein Fenster Stil, die ich anwenden kann „kostenlos“ zu bekommen. Richtig?
Lösung
Anstelle einer besseren Antwort, werde ich nach dem Code Ich habe, dass die Größe Griff zieht und übernimmt die Hit-Tests. Sie müssen auch den entsprechenden Bereich während OnSize um ungültig zu machen, um es neu gestrichen.
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);
}
Andere Tipps
Ich glaube nicht, gibt es einen Standardstil für diese Funktion Funktionalität zu erhalten. Sie haben ein neues Kind Fenster mit Klassennamen Neben OnEraseBkgnd und OnNcHitTest erwähnt durch die oben benötigen Sie den Griff Bereich für ungültig erklärt, wenn das Fenster so bemessen, sonst wird es Spuren hinterlassen, wenn vergrößerte Darstellung: Scrollbar
und Kontrolle Stil
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);
}