步骤如下:
1、我在自己的工程中增加了一个CButton的派生类:CRgnBtn
2、在派生类中重载PreSubclassWindow函数,添加如下代码:
//获取按钮大小
CRect rc;
//创建对象
GetClientRect(&rc );
// 创建区域并赋予对话框.
CRgn rgn;
//直接从RECT结构定义的椭圆形区域
rgn.CreateEllipticRgn (0 , 0 , rc.Width( ) , rc.Height ( ) );
//设置区域
SetWindowRgn( (HRGN) rgn ,TRUE );
3、然后在view类OnCreate函数中添加创建按钮代码:
//创建不规则按钮
m_RgnBtn.Create(NULL,WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON,CRect(210,130,390,180),
this,IDC_BUTTON_RGN);
其中m_RgnBtn为我添加的CRgnBtn对象。
4、可是无法看到按钮变成椭圆。后来我调试了一下,发现程序进入执行GetClientRect(&rc )后,rc的值还都是0,这是为什么??
5、另外一旦设置了区域,按钮就无法点击了,而且无法响应消息,这是为什么呢?恳请诸位老师帮忙了!!
1、我在自己的工程中增加了一个CButton的派生类:CRgnBtn
2、在派生类中重载PreSubclassWindow函数,添加如下代码:
//获取按钮大小
CRect rc;
//创建对象
GetClientRect(&rc );
// 创建区域并赋予对话框.
CRgn rgn;
//直接从RECT结构定义的椭圆形区域
rgn.CreateEllipticRgn (0 , 0 , rc.Width( ) , rc.Height ( ) );
//设置区域
SetWindowRgn( (HRGN) rgn ,TRUE );
3、然后在view类OnCreate函数中添加创建按钮代码:
//创建不规则按钮
m_RgnBtn.Create(NULL,WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON,CRect(210,130,390,180),
this,IDC_BUTTON_RGN);
其中m_RgnBtn为我添加的CRgnBtn对象。
4、可是无法看到按钮变成椭圆。后来我调试了一下,发现程序进入执行GetClientRect(&rc )后,rc的值还都是0,这是为什么??
5、另外一旦设置了区域,按钮就无法点击了,而且无法响应消息,这是为什么呢?恳请诸位老师帮忙了!!
解决方案 »
- win7 vs2010 ie8 如何调试bho啊?有没有朋友知道的?
- 请问下,开发类似VS08的界面需要MFC吗?
- MFC中编译出现的问题
- 请大家帮忙看一下对话框加载时的界面显示问题?
- 使用snmp_pp.lib出现以下错误,100分请高手解决
- 如何用面向对象的思想来编程
- Myview自定义函数中一个for循环,该函数执行时间很长,约20多分钟(循环使用sleep等待),想在MyView类加个按钮消息,让for循环“暂停执行”的,我该怎样做?不用多线程,有办法吗?
- VC中如何使用Active控件中的Toolbar和Imagelist控件
- 告诉我一本学习VC++的傻瓜书,它能使我快速入门。
- 谁在国庆节加班?不幸的同志们举手...
- 知道父窗口句柄,如何截获内部消息
- 谁有MFC ODBC实例详解的资料啊 急求啊
http://www.vckbase.com/document/viewdoc/?id=1960
CRgn rgn;
//直接从RECT结构定义的椭圆形区域
rgn.CreateEllipticRgn (0 , 0 , rc.Width( ) , rc.Height ( ) );
//设置区域
SetWindowRgn( (HRGN) rgn ,TRUE );
要放:
//创建不规则按钮
m_RgnBtn.Create(NULL,WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON,CRect(210,130,390,180),
this,IDC_BUTTON_RGN);
后。
也就是不能在:
PreSubclassWindow
中。