2016-04-26 29 views

答えて

1

これを行うための特別なAPIがあるかどうかわかりません。 1つの方法は、手動で描画し、グリッパの位置を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

おかげでその作業を。私は最初のif(Linkerの問題)をコメントしました。なぜ最初のものが必要なのですか? – Penachia

+1

はい、 'OpenThemeData'やその他のテーマ関数を削除することができます。 2つの方法は、グリッパ画像をわずかに異なるように描画します。 'DrawThemeBackground'は、ビジュアルスタイルが有効なときに見られるように、メモ帳のグリッパーと同じ方法で描画します。 –

関連する問題