如何将位图图像添加到MFC中的按钮?

时间:2010-01-12 07:50:06

标签: mfc cbitmap

我正在尝试将图像添加到现有按钮..我已经完成了一定程度,问题是我可以添加一个ownerdrawn图像,但我无法添加我想要的extact图像..例如见下面的代码

CButton* pBtn= (CButton*)GetDlgItem(ID_WIZBACK);

   pBtn->ModifyStyle( 0, BS_ICON );

   HICON hIcn= (HICON)LoadImage(
        AfxGetApp()->m_hInstance,
  MAKEINTRESOURCE(IDI_ICON3),
        IMAGE_ICON,
        0,0, // use actual size
        LR_DEFAULTCOLOR
    );

    pBtn->SetIcon( hIcn );

使用上面的代码将位图转换为图标以添加到我的按钮...如何将精确的位图图像直接添加到现有按钮。请帮我修补..

6 个答案:

答案 0 :(得分:2)

我实际上修复了问题..我做的是用HBITMAP替换HICON并且它的工作完美...基本上两者都能正常工作但在我的情况下当我将图标加载到按钮时图标的背景是没有改变...我试过Bitmap然后它工作得很好。现在正在努力定位图像并添加文本......我想我可以通过

答案 1 :(得分:2)

在mfc中将位图分配给按钮的步骤:

  1. 创建位图对象
  2. 使用 LoadBitmap()
  3. 加载位图
  4. 使用 id GetDlgItem()方法获取按钮句柄
  5. 修改样式以便我们可以为其指定位图
  6. 在按钮的句柄上使用 SetBitmap()来指定位图
  7. 代码:

    CBitmap bmp;
    
    bmp.LoadBitmap( IDB_BITMAP4 );
    
    CButton* pButton = (CButton* )GetDlgItem(IDC_BUTTON1);
    
    pButton->ModifyStyle(0,BS_BITMAP);
    
    pButton->SetBitmap(bmp);
    

答案 2 :(得分:1)

您可以使用CBitmapButton::SubclassWindow对现有按钮进行子类化,然后使用LoadBitmaps

答案 3 :(得分:1)

你不知道这有多大帮助。谢谢发帖。还必须将其他一些东西改为位图......

CButton* pBtn= (CButton*)GetDlgItem(ID_MYDIALOG);
pBtn->ModifyStyle( 0, BS_BITMAP );

HBITMAP hIcn= (HBITMAP)LoadImage(
  AfxGetApp()->m_hInstance,
  MAKEINTRESOURCE(IDB_MYPIC),
  IMAGE_BITMAP,
  0,0, // use actual size
  LR_DEFAULTCOLOR
  );

pBtn->SetBitmap( hIcn );

答案 4 :(得分:0)

使用Feature Pack中的按钮类。他们支持在按钮上显示文本和图像,您的常规按钮不能这样做。查看VS安装目录中的“samples”目录。

答案 5 :(得分:0)

我想在@Amruta Ghodke的回答中添加一些想法:

您可以使用GetWindowRectSetWindowPos功能调整按钮大小。请参阅以下示例:

CRect rc;

pButton->GetWindowRect(rc);
pButton->SetWindowPos(NULL, rc.left, rc.top, myWidth, myHeight, SWP_NOSENDCHANGING | SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE);

如果要显示透明图像,请使用软件Pixelformer将PNG转换为启用Alpha的BMP。你必须:

  1. 转到图片 - >属性并设置RGB color with alpha channel
  2. 使用A8:R8:G8:B8格式导出文件并停用Premultiplied alphaTop-down row order