gpt4 book ai didi

C++ CButton 仅显示位图图标

转载 作者:行者123 更新时间:2023-11-28 05:41:16 26 4
gpt4 key购买 nike

我在 Visual Studio 2012 update 4 上使用 C++,我有一个对话框,我想在其中显示一个显示无边框位图(.bmp 文件)的按钮 help icon

我已经扩展了 CButton 以添加我的工具提示,等等。

使用资源 View 打开对话框 .rc 文件,我将按钮属性 Bitmap 设置为 true。然后,从 Dialog OnInitDialog 函数中,我使用这段代码来设置位图,标识为 IDB_HELP

myButton.SetBitmap((HBITMAP)LoadImage(AfxGetApp()->m_hInstance,
MAKEINTRESOURCE(IDB_HELP), IMAGE_BITMAP, 16, 16, LR_COLOR));

但它显示这个 ugly button而且我不想要那个半边框。

我尝试在资源 View 中将其设为FlatTransparent,但它只会变得更丑。

然后我尝试通过将 Owner Draw 设置为 true 然后在我的按钮类中重新定义 DrawItem 来绘制图像,但我可以也不太清楚这一点。

有没有制作纯图标按钮的简单方法?

最佳答案

您必须使用所有者绘图按钮或自定义绘图。下面是一个简单的例子,它使用图标而不是位图(为它分配透明背景更容易)

class CMyButton:public CButton
{
void OnPaint()
{
CPaintDC dc(this);
CRect rc = dc.m_ps.rcPaint;
dc.FillSolidRect(&rc, GetSysColor(COLOR_3DFACE));
BOOL offset = (BST_PUSHED & GetState()) ? 1 : 0;
int w = 24;
int h = 24;
HICON hicon = (HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDC_ICON),
IMAGE_ICON, w, h, LR_DEFAULTCOLOR);
DrawIconEx(dc, offset, offset, hicon, w, h, 0, 0, DI_NORMAL);
DestroyIcon(hicon);
}

DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyButton, CButton)
ON_WM_PAINT()
END_MESSAGE_MAP()

用法:

BOOL CMyDialog::OnInitDialog()
{
BOOL res = CDialogEx::OnInitDialog();
static CMyButton bn;
bn.SubclassDlgItem(IDC_BUTTON1, this);
return res;
}

关于C++ CButton 仅显示位图图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37052222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com