2016-04-26 2 views
2

У меня есть класс, полученный от CPropertySheet, и я хочу вставить «захват» в нижнем правом углу диалогового окна.
мой диалог уже изменен, я просто не могу вставить захват.Как добавить захват в PropertySheet?

ответ

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

спасибо своей работы. но я прокомментировал первое, если (проблемы с Linker). Почему мне нужно первое, если? – Penachia

+1

Да, вы можете удалить 'OpenThemeData' и другие функции темы, если вы этого не хотите. Эти два метода рисуют изображение захвата несколько иначе. «DrawThemeBackground» рисует его так же, как захват Блокнота, как видно, когда включен Visual Style. –

Смежные вопросы