2009-03-04 66 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); 
}