MFC怎么实现圆形按钮
在MFC下用标准控件拖出来的Button都是矩形的,太难看了,我现在想实现的是不规则形状的Button。比如说我想实现圆形的Button,鼠标只有放到圆形区域上才有效,也...
在MFC下用标准控件拖出来的Button都是矩形的,太难看了,我现在想实现的是不规则形状的Button。
比如说我想实现圆形的Button,鼠标只有放到圆形区域上才有效,也就是才能按下Button。而不能够仅仅实现看起来是圆形的图片,但我把鼠标放到圆形图片外还能按下Button,这样的话就是一个矩形的Button用了圆形的图标作为Button的图标而已,没有达到我想要的效果。
我现在搜到的几种解决方法,一个是用别人已经写好的类库,比如说CButtonST类,但是似乎这个类只能换图标,至少我还没找到可以把Button的形状设置为圆形的方法;
另一种方法是重写CButton类的DrawItem函数,但是这个函数的结构体我不是很清楚。
总之,请提供一种可以实现我想要的效果的方法。
成功实现的话我会追加分数。万分感谢! 展开
比如说我想实现圆形的Button,鼠标只有放到圆形区域上才有效,也就是才能按下Button。而不能够仅仅实现看起来是圆形的图片,但我把鼠标放到圆形图片外还能按下Button,这样的话就是一个矩形的Button用了圆形的图标作为Button的图标而已,没有达到我想要的效果。
我现在搜到的几种解决方法,一个是用别人已经写好的类库,比如说CButtonST类,但是似乎这个类只能换图标,至少我还没找到可以把Button的形状设置为圆形的方法;
另一种方法是重写CButton类的DrawItem函数,但是这个函数的结构体我不是很清楚。
总之,请提供一种可以实现我想要的效果的方法。
成功实现的话我会追加分数。万分感谢! 展开
推荐于2016-04-29 · 知道合伙人互联网行家
关注
展开全部
第一步:往项目中添加MyButton.h 和MyButton.cpp
两个文件。
第二步:然后将自己需要的BitMap文件导入。
第三步:在项目工程的CARMDlg::OnInitDialog()中添加如下代码:
SetIcon(m_hIcon,
TRUE);
// Set big icon
SetIcon(m_hIcon,
FALSE);
// Set small icon
m_bkg.LoadBitmap(IDB_BMP_BKG);//系统的背景颜色
m_nCollectGoods.SetBitmap(IDB_BITMAP_BUTTON,BUTTON_STATE_UP);
m_nCollectGoods.SetBitmap(IDB_BITMAP_BUTTONB,BUTTON_STATE_DOWN);
m_nCollectGoods.HideText(FALSE);
m_nCollectGoods.FontStyle(L"MS Sans Serif", 14,
8, TRUE, FALSE);
m_nCollectGoods.SetTextColor(RGB(255,0,0));
第四步:在CARMDlg::OnPaint()中添加如下代码,实现对窗口的重绘:
//CDialog::OnPaint();
CPaintDC dc(this);
CBrush brush;
brush.CreatePatternBrush(&m_bkg);
CBrush *pOld =
dc.SelectObject(&brush);
CRect rc;
GetClientRect(rc);
dc.FillRect(rc,&brush);
dc.SelectObject(pOld);
pOld->DeleteObject();
brush.DeleteObject();
两个文件。
第二步:然后将自己需要的BitMap文件导入。
第三步:在项目工程的CARMDlg::OnInitDialog()中添加如下代码:
SetIcon(m_hIcon,
TRUE);
// Set big icon
SetIcon(m_hIcon,
FALSE);
// Set small icon
m_bkg.LoadBitmap(IDB_BMP_BKG);//系统的背景颜色
m_nCollectGoods.SetBitmap(IDB_BITMAP_BUTTON,BUTTON_STATE_UP);
m_nCollectGoods.SetBitmap(IDB_BITMAP_BUTTONB,BUTTON_STATE_DOWN);
m_nCollectGoods.HideText(FALSE);
m_nCollectGoods.FontStyle(L"MS Sans Serif", 14,
8, TRUE, FALSE);
m_nCollectGoods.SetTextColor(RGB(255,0,0));
第四步:在CARMDlg::OnPaint()中添加如下代码,实现对窗口的重绘:
//CDialog::OnPaint();
CPaintDC dc(this);
CBrush brush;
brush.CreatePatternBrush(&m_bkg);
CBrush *pOld =
dc.SelectObject(&brush);
CRect rc;
GetClientRect(rc);
dc.FillRect(rc,&brush);
dc.SelectObject(pOld);
pOld->DeleteObject();
brush.DeleteObject();
展开全部
使用免费或者X解(你懂的)的界面库,如MagicSkin可以实现。
另外,圆形按钮不是很新鲜的东西了,很多开源网站都可以找到实现的源代码。
另外,圆形按钮不是很新鲜的东西了,很多开源网站都可以找到实现的源代码。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
它们被花粉染得金黄,匆匆钻出时,冷风劲吹他们的甲。
在莱茵河的微风中摇曳絮语
秋天泛黄了萧瑟拂过沧桑的回忆
我欢迎一切.忍受一切,
如果这世界完蛋??
既然水为怀云设景,怡情的中意飞扬哈哈
在莱茵河的微风中摇曳絮语
秋天泛黄了萧瑟拂过沧桑的回忆
我欢迎一切.忍受一切,
如果这世界完蛋??
既然水为怀云设景,怡情的中意飞扬哈哈
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要按钮自绘才可以实现,关于按钮自绘网上有很多资料。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
= = 杨彬彬~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询