【问题标题】:MSDN SetBitmap doesn't work, CButton shows up blankMSDN SetBitmap 不起作用,CButton 显示为空白
【发布时间】:2015-08-14 18:43:11
【问题描述】:

我正在尝试创建一个按钮,其中包含使用CButton::SetBitmap() 从资源中获取的 bmp 图像。使用此代码:

BOOL MyDialog::OnInitDialog()
{
    __super::OnInitDialog();

    m_myBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_MY_BITMAP ));
    m_myButton.SetBitmap( m_myBitmap );

    return TRUE;
}

但按钮显示为灰色,上面没有图像。我验证了我的位图是否使用 GDIPlus 正确加载,并将其保存为 jpeg,一切似乎都很好。为什么按钮上没有显示图像?

【问题讨论】:

  • 这段代码中的错误检查被严重破坏,只有在 winapi 函数失败后才调用 GetLastError()。可能意外正确,m_myBitmap 变量似乎与 m_bm 变量没有任何关系。正如发布的那样,代码根本没有意义。

标签: c++ windows mfc msdn


【解决方案1】:

我找到了。您需要在 CButton 上设置 BS_BITMAP 标志,否则不会发生任何事情。此外,似乎有 2 个功能可以让您修改按钮样式:

CButton::ModifyStyle();
CButton::SetButtonStyle();

由于某种不明原因,CButton::SetButtonStyle(); 没有为我正确设置标志,因此造成混乱。

在正确加载资源的情况下,这可行:

BOOL MyDialog::OnInitDialog()
{
    __super::OnInitDialog();

    m_myBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_MY_BITMAP ));
    m_myButton.ModifyStyle( 0, BS_BITMAP );
    m_myButton.SetBitmap( m_myBitmap );

    return TRUE;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2020-04-15
    • 2020-03-27
    相关资源
    最近更新 更多