【问题标题】:how to add bitmap image to buttons in MFC?如何将位图图像添加到 MFC 中的按钮?
【发布时间】:2011-01-04 02:01:45
【问题描述】:

我正在尝试将图像添加到现有按钮..我已经在一定程度上做到了,问题是我可以添加所有者绘制的图像但无法添加我想要的确切图像..例如看下面的代码

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 );

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

【问题讨论】:

    标签: mfc cbitmap


    【解决方案1】:

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

    1. 创建位图对象
    2. 使用 LoadBitmap() 加载位图
    3. 使用 idGetDlgItem() 方法获取按钮的句柄
    4. 修改样式以便我们可以为其分配位图
    5. 在按钮的句柄上使用 SetBitmap() 来分配位图

    代码:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 如何调用子类窗口?
        【解决方案4】:

        你不知道这有多大帮助。感谢您的发布。还必须将其他一些内容更改为位图...

        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 );
        

        【讨论】:

          【解决方案5】:

          使用功能包中的按钮类。他们支持在按钮上显示文本和图像,您的常规按钮无法做到这一点。查看 VS 安装目录中的“samples”目录。

          【讨论】:

            【解决方案6】:

            我想为@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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-01-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-02-05
              • 1970-01-01
              • 2020-08-24
              相关资源
              最近更新 更多