2016-04-26 54 views

回答

1

我不知道是否有任何特殊的API來做到這一點。一種方法是手動繪製,然後覆蓋ON_WM_NCHITTEST並將HTBOTTOMRIGHT返回夾持器的位置。例如:

void CMyDialog::OnPaint() 
{ 
    CPaintDC dc(this); 
    CRect rc; 
    GetClientRect(); 
    rc.left = rc.right - ::GetSystemMetrics(SM_CXHSCROLL); 
    rc.top = rc.bottom - ::GetSystemMetrics(SM_CYVSCROLL); 
    HTHEME ht = OpenThemeData(m_hWnd, L"STATUS"); 
    if (ht) 
    { 
     DrawThemeBackground(ht, dc, SP_GRIPPER, 0, &rc, 0); 
     CloseThemeData(ht); 
    } 
    else 
    { 
     dc.DrawFrameControl(rc, DFC_SCROLL, DFCS_SCROLLSIZEGRIP); 
    } 
} 

LRESULT CMyDialog::OnNcHitTest(CPoint point) 
{ 
    CRect rc; 
    GetWindowRect(rc); 
    rc.left = rc.right - ::GetSystemMetrics(SM_CXHSCROLL); 
    rc.top = rc.bottom - ::GetSystemMetrics(SM_CYVSCROLL); 
    if (rc.PtInRect(point)) 
     return HTBOTTOMRIGHT; 
    return CDialog::OnNcHitTest(point); 
} 

void CMyDialog::OnSize(UINT type, int cx, int cy) 
{ 
    CDialog::OnSize(type, cx, cy); 
    Invalidate(TRUE); 
} 

添加到消息映射:

ON_WM_PAINT() 
ON_WM_NCHITTEST() 
ON_WM_SIZE() 
+0

由於其工作。但我第一個評論如果(連接問題)。爲什麼我需要第一個呢? – Penachia

+1

是的,你可以刪除'OpenThemeData'和其他主題功能,如果你不需要它。這兩種方法稍微不同地繪製抓手圖像。 'DrawThemeBackground'以與記事本的抓手相同的方式繪製,如啓用視覺樣式時所看到的。 –