私はこの物(DFCS_SCROLLSIZEGRIP
)の絵を扱うコードを見ましたが、確かにそれを "無料"にするために適用できるウィンドウスタイルがあります。右?CDialogのサイズグリップを表示していますか?
2
A
答えて
3
より良い答えの代わりに、サイズグリップを描き、ヒットテストを処理するコードを投稿します。また、OnSizeを再描画するには、その領域を無効にする必要があります。
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);
}
0
私は自由のために、この機能を取得するためのデフォルトのスタイルがあるとは思いません。あなたは拡大し、それ以外の場合は、マークを残してSBS_SIZEGRIPウィンドウがサイズの時にグリップ領域を無効にする必要がありますあなた上記で述べたOnEraseBkgndとOnNcHitTestに加えて
0
、クラス名Scrollbar
とコントロールのスタイルを持つ新しい子ウィンドウを作成する必要があります:
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);
}