今天白天作程序的时候出现一个问题,具体如下:
我做的一个基于对话框的程序,程序的主要元素有:
主窗口:mainDlg,
继承的按钮类:CMyButton从CButton
如果,按照下列步骤
1)在mainDlg中拉一个按钮,从ClassWizard将增加的按钮指定为CMyButton类的m_button
2)在CMyButton 的preSubClassWindow中用GetClientRect(&rect)
这是rect.left和rect.top为零,而rect.right,rect.bottom分别为按钮的宽和高.但是用一下方法
1)在CMainDlg类中添加:CMyButton m_button;
在mainDlg的OnInitDialog中写m_button.create("",WS_CHILD|WS_VISIBLE|WS_OWNERDRAW,CRect(100,100,300,300),this,2001);
2)在CMyButton 的preSubClassWindow中用GetClientRect(&rect)
这是rect的四个值都是零
现在,我的程序有一百多个按钮,所以不可能拉一百多个按钮控件上来,只能采用后一种方法动态生成按钮,但这是在步骤2中无法取得rect的四个值,所以没有办法给按钮制定新的边界(制定边界是需要用的这四个数)同时DrawItem中也要用到这四个数.不知道有没有什么好的方法解决这个问题.谢谢
我做的一个基于对话框的程序,程序的主要元素有:
主窗口:mainDlg,
继承的按钮类:CMyButton从CButton
如果,按照下列步骤
1)在mainDlg中拉一个按钮,从ClassWizard将增加的按钮指定为CMyButton类的m_button
2)在CMyButton 的preSubClassWindow中用GetClientRect(&rect)
这是rect.left和rect.top为零,而rect.right,rect.bottom分别为按钮的宽和高.但是用一下方法
1)在CMainDlg类中添加:CMyButton m_button;
在mainDlg的OnInitDialog中写m_button.create("",WS_CHILD|WS_VISIBLE|WS_OWNERDRAW,CRect(100,100,300,300),this,2001);
2)在CMyButton 的preSubClassWindow中用GetClientRect(&rect)
这是rect的四个值都是零
现在,我的程序有一百多个按钮,所以不可能拉一百多个按钮控件上来,只能采用后一种方法动态生成按钮,但这是在步骤2中无法取得rect的四个值,所以没有办法给按钮制定新的边界(制定边界是需要用的这四个数)同时DrawItem中也要用到这四个数.不知道有没有什么好的方法解决这个问题.谢谢
button->Create(...)
前两天我业遇到一个类似的问题,只是结果和你的不一样,我就是这样处理的,不知道行不行,我现在也没有搞清楚,在这里指针和对象的区别.
1.
在mainDlg.h中
#define BUTTONCOUNTS 1000
#define BUTTONSSTARTID 5555//最好大一些,不要重复2.
mainDlg的成员变量
CMyButton m_buts[BUTTONCOUNTS]3.在mainDlg的oncreate中
for(int i=0;i<BUTTONCOUNTS ;i))
{
m_buts[i].create("",WS_CHILD|WS_VISIBLE|WS_OWNERDRAW,CRect(0,0,1,1),this,BUTTONSSTARTID + i);}
4.在mainDlg的onsize中
得到mainDlg客户区大小Getclientrect();
安排每个 button的位置。你自己计算。
5.增回消息响应。
在mainDlg.cpp中用on_command_range宏
在mainDlg.h中回响应函数,可以参照msdn上的sample至此工作基本完成,但最重要的是要测试。