我在CButton控件下派生了一个类,扩充了消息,如何在该控件上绘图???
我用了DRAWITEM(),但不响应,图画在了按扭底下?????

解决方案 »

  1.   

    首先设置你的按钮为 OwnerDraw 类型
    然后在DrawItem(...)中绘图。void CThumbnailButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
          CDC*  pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
          ......
    }没问题的!^o^
      

  2.   

    void CDatabaseLogin::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    CDC buttomDC;
    CBitmap bitmapTrans;
    BITMAP bmp;
    CDC mem;
    CRect rc;

    buttomDC.Attach(lpDrawItemStruct->hDC);
    mem.CreateCompatibleDC(&buttomDC);
    rc=lpDrawItemStruct->rcItem;
    UINT state = lpDrawItemStruct->itemState;
    if(state & ODS_FOCUS)
    {
    bitmapTrans.LoadBitmap(IDB_BTN_DOWN);
    bitmapTrans.GetBitmap(&bmp);
    CBitmap* old=mem.SelectObject(&bitmapTrans);
    buttomDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,
    0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
    mem.SelectObject(old);
    bitmapTrans.DeleteObject();
    buttomDC.SetBkMode(TRANSPARENT);
    if(nIDCtl == IDC_ODBC_SQL_SAVE){
    buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
    }
    else
    buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
    }
    else
    {
    bitmapTrans.LoadBitmap(IDB_GETFOCUS);
    bitmapTrans.GetBitmap(&bmp);
    CBitmap* old2=mem.SelectObject(&bitmapTrans);
    buttomDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,
    0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
    mem.SelectObject(old2);
    bitmapTrans.DeleteObject();
    buttomDC.SetBkMode(TRANSPARENT);
    if(nIDCtl == IDC_ODBC_SQL_SAVE){
    buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
    }
    else
    buttomDC.DrawText("保存",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
    }
    CFormView::OnDrawItem(nIDCtl, lpDrawItemStruct);
    }
      

  3.   

    设置你的按钮为 OwnerDraw 类型