这段代码是将对话框上的几个按钮填充上颜色,但我看不出来是什么填充的。
COLORREF CColorButtonDlg::colors[8]=....
void CColorButtonDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
// TODO: Add your message handler code here and/or call default
CDC dc;
CPen nullpen;
CBrush brush;
CPen *oldpen;
CBrush *oldbrush; ////////////////画按钮/////////////////?????????????????????
nullpen.CreateStockObject(NULL_PEN);
brush.CreateSolidBrush(colors[nIDCtl-IDBC_COLORWELL1]); dc.Attach(lpDrawItemStruct->hDC);
oldpen=dc.SelectObject(&nullpen);
oldbrush=dc.SelectObject(&brush);
lpDrawItemStruct->rcItem.right++;
lpDrawItemStruct->rcItem.bottom++;
dc.Rectangle(&lpDrawItemStruct->rcItem);
dc.SelectObject(oldpen);
dc.SelectObject(oldbrush);
dc.Detach(); CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

解决方案 »

  1.   

    COLORREF CColorButtonDlg::colors[8]=....
    void CColorButtonDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    CDC dc;
    CPen nullpen;
    CBrush brush;
    CPen *oldpen;
    CBrush *oldbrush; ////////////////画按钮/////////////////?????????????????????
    nullpen.CreateStockObject(NULL_PEN);//预定的画笔色
    brush.CreateSolidBrush(colors[nIDCtl-IDBC_COLORWELL1]);//预定的画刷颜色 dc.Attach(lpDrawItemStruct->hDC);//关联到目的DC,即按纽DC
    oldpen=dc.SelectObject(&nullpen);//设置画笔
    oldbrush=dc.SelectObject(&brush);//设置画刷
    lpDrawItemStruct->rcItem.right++;
    lpDrawItemStruct->rcItem.bottom++;//定位
    dc.Rectangle(&lpDrawItemStruct->rcItem);//以画笔色为边框,画刷色为背景色画矩形
    dc.SelectObject(oldpen);
    dc.SelectObject(oldbrush);
    dc.Detach();//以上恢复初始状态 CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
    }
      

  2.   

    按钮设置owerdraw了。这个是Dialog的OnDrawItem,button也会自动运行这个函数吗?
    到底这个OnDrawItem它的调用顺序什么样?