小弟正在学习vc界面编程,请问如何为如何为按钮载入图标或者位图?小弟程序如下:
     m_bitmap.LoadBitmap(IDB_BITMAP3);
    CButton *m_pButton;
    m_pButton=(CButton*)GetDlgItem(IDOK);// IDOK是按钮的ID
    m_pButton->SetBitmap(HBITMAP(m_bitmap));
以上程序可以载入位图资源,但是必须将按钮属性设为bitmap,这样的话,按钮上的文字就无法显示了,如何让文字也一起显示呢?
还有就是如何为按钮载入图标资源?哪位大侠知道,请指教。

解决方案 »

  1.   

    一 简单的方法就是,还是用你现在的方法,只不过那位图上输入文字
    二 控件的自绘 http://www.vckbase.com/document/viewdoc/?id=551
      

  2.   

    文字一起显示的话,使用CButtonST吧
      

  3.   

    控件自绘
    把文字放在BitMap里,如果有必要,多弄几个BitMap,随使用的时候自动更换。
      

  4.   

    嗯,如楼上几位大哥所说。从CButton派生一个类,重写其DrawItem()虚函数。
    简单的几行代码,仅作参考:
    void CCustomButton::PreSubclassWindow() 
    {
        //modify the button,add the owner draw style
        ModifyStyle(NULL,BS_OWNERDRAW);
        
        CButton::PreSubclassWindow();
    }void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
        CDC dc;
        dc.Attach(lpDrawItemStruct->hDC);
        dc.SetBkMode(TRANSPARENT);    CRect rect;
        GetClientRect(&rect);
        
        //draw the frame
        if ( (lpDrawItemStruct->itemState) & ODS_SELECTED )
        {
            CPen pen( PS_INSIDEFRAME,2,RGB(128,0,255));
            CPen *ppen = NULL;
            ppen = dc.SelectObject(&pen);
            dc.Rectangle(&rect);
            dc.SelectObject(ppen);
        }
        else if ( (lpDrawItemStruct->itemState) & ODS_FOCUS )
        {
            CPen pen( PS_INSIDEFRAME,2,RGB(255,0,255));
            CPen *ppen = NULL;
            ppen = dc.SelectObject(&pen);
            dc.Rectangle(&rect);
            dc.SelectObject(ppen);
        }
        else
        {
            CPen pen( PS_INSIDEFRAME,2,RGB(0,128,255));
            CPen *ppen = NULL;
            ppen = dc.SelectObject(&pen);
            dc.Rectangle(&rect);
            dc.SelectObject(ppen);
        }
        //fill
        rect.DeflateRect(2,2,2,2);
        if ((lpDrawItemStruct->itemState) & ODS_DISABLED)
        {
            
            dc.FillSolidRect(&rect,RGB(0,128,0));
            dc.SetTextColor( RGB(187,0,187) );
        }
        else
        {
            dc.FillSolidRect(&rect,RGB(0,255,0));
            dc.SetTextColor( RGB(255,0,0) );
        }
        //draw the text
        CString title;
        GetWindowText(title);
        dc.DrawText(title,&(lpDrawItemStruct->rcItem),DT_CENTER 
            | DT_VCENTER | DT_SINGLELINE);}
      

  5.   

    建议派生一个CButton类,画位图,再画文字存入缓存中,最后一起显示