2009-03-04 10 views

答えて

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); 
} 

出典:http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.ui/2006-01/msg00103.html

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); 
}