Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > В чём отличие CWnd::OnPaint , CWnd::OnDrawItem


Автор: erslgoeirjh 10.11.2016, 12:40
В чём отличие CWnd::OnPaint , CWnd::OnDrawItem и CWnd::DrawItem  ?

Автор: vol4ek 14.11.2016, 22:32
OnPaint вызывается при обновлении окна, а OnDrawItem пользовательское рисование дочернего окна. ну например кнопки. закинь на форму кнопку с индификатором IDC_BUTTON1 в свойствах кнопки поставь Owner Draw -> True, а в сообщениях диалога добавь обработчик OnDrawItem и закинь туда вот такой код:
Код

void CrDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    // TODO: добавьте свой код обработчика сообщений или вызов стандартного

    if(nIDCtl == IDC_BUTTON1)
    {
        CDC dc;
        dc.Attach(lpDrawItemStruct->hDC);
        COLORREF color;
        if(lpDrawItemStruct->itemState &1) color = RGB(230,0,0);
        else color = RGB(0,200,0);
        CBrush br(color);
        dc.SelectObject(&br);
        dc.SetBkMode(TRANSPARENT);
        dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
        CRect rect = lpDrawItemStruct->rcItem;
        dc.Ellipse(rect);
        CString text;
        GetDlgItem(nIDCtl)->GetWindowText(text);
        dc.DrawText(text, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
        dc.Detach();
    }

    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)