В чём отличие CWnd::OnPaint , CWnd::OnDrawItem

 
0
 
C++
ava
erslgoeirjh | 10.11.2016, 12:40
В чём отличие CWnd::OnPaint , CWnd::OnDrawItem и CWnd::DrawItem  ?
Kommentare (1)
ava
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);
}
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden