2009-03-04 61 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

我不认为这是一个默认的风格让这个功能是免费的。您必须创建一个类名为Scrollbar和控件样式的新子窗口SBS_SIZEGRIP

0

除了上面提到的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); 
}