建立派生自CPropertySheet的CProsht类,派生自CPropertyPage的三个类CProp1,CProp2,CProp3.在CProsht类里定义三个页面成员,然后在CProsht的构造函数里ADD上三个页面。在C***View类里有某个消息响应函数用来弹出非模态向导
void C***View::PopWizard()
{
CPropSht *propSheet=new CPropSht(_T(""));
propSheet->SetWizardMode();
propSheet->Create(this);
propSheet->ShowWindow(SW_SHOW);
}
发现显示出来的向导里每一个属性页的大小是一样的,即使资源里所建属性页的大小并不一样,最后显示的大小跟资源里最大的属性页一样。
现在我需要定义每一个属性页的大小,当然要使每一个属性页大小不一样。
于是我在CProp1类定义了OnInitDialog(),用来实现OnInitDialog版本。
BOOL CProp1::OnInitDialog()
{
CPropertyPage::OnInitDialog()
CRect rectWnd;
GetWindowRect(&rectWnd);
SetWindowPos(NULL,0,0,rectWnd.Width()-100,rectWnd.Height(),SWP_NOMOVE
| SWP_NOZORDER | SWP_NOACTIVATE);
return true;
}结果发现显示的向导还是一点改变都没有。
请问如何改变每一个属性页的大小?
void C***View::PopWizard()
{
CPropSht *propSheet=new CPropSht(_T(""));
propSheet->SetWizardMode();
propSheet->Create(this);
propSheet->ShowWindow(SW_SHOW);
}
发现显示出来的向导里每一个属性页的大小是一样的,即使资源里所建属性页的大小并不一样,最后显示的大小跟资源里最大的属性页一样。
现在我需要定义每一个属性页的大小,当然要使每一个属性页大小不一样。
于是我在CProp1类定义了OnInitDialog(),用来实现OnInitDialog版本。
BOOL CProp1::OnInitDialog()
{
CPropertyPage::OnInitDialog()
CRect rectWnd;
GetWindowRect(&rectWnd);
SetWindowPos(NULL,0,0,rectWnd.Width()-100,rectWnd.Height(),SWP_NOMOVE
| SWP_NOZORDER | SWP_NOACTIVATE);
return true;
}结果发现显示的向导还是一点改变都没有。
请问如何改变每一个属性页的大小?
解决方案 »
- 如何使用C++处理FLASH组件中的几个事件?
- winCap 做的一个小工具 如何才能 在使用的时候 不需要电脑安装wincap包就运行
- 如何在picture控件上显示文字和擦除文字
- 想学习COM和COM+,请高手推荐一本VC6.0的书
- 极具挑战性的问题,是高手的就帮小弟我解决此问题吧,在线等待,急急急!!!!!!!!!!!!!!
- 一个C++遗传算法的程序,在VC6下无法编译通过,请高手指点
- 向数据库里写入数据纪录
- 如何调试动态链结库,你们都用什么方法?
- 请问那里能下载到vc源代码,特别是用啊ATL写的COM?
- 我写完一个类似俄罗斯方块的程序,有没有人想看看执行程序?
- 如何写代码实现当前窗口覆盖其父(或者上一个)窗口?
- 对话框动态添加按钮,求各位高手帮帮忙!
的3个属性页的大小确实不一样了。比如上面的SetWindowPos写成
((CPropertySheet*)GetParent())->SetWindowPos......但是也出现了一个非常严重的问题,就是向导的“上一步”“下一步”/“完成”“取消”这些按钮的位置并没有改变,还是按照资源里最大的那个页的布局来的。这样把属性页的显示改小之后,会出现看不到这些按钮的情形。有办法改变这些按钮的位置么?使得不同页它们的位置不一样?
或者,有其他方案可以解决这个问题吗?
有可能的话我也不想去改这些,但是不得不改。
因为资源里三个属性页最大的第二页那个我必须把它做成可扩展的,也就是说初始显示它是不完整的,按下该页上的某个按钮之后才完整显示。就像xp附件画图程序里面的颜色编辑对话框那样,按下“自定义颜色”之后对话框会延展出来。
但该死的向导自动把每一个属性页都变成资源里第二页的完整大小了,不仅其他两页变成空泛很难看,就是扩展功能也变得不可能。因为刚开始要隐藏一部分,虽然可以隐藏控件,但页框还是完整的,太怪了。现在按照我上一楼说的,倒是可以把页框也变小了,但是”下一步“那些按钮也都看不到了,哭啊
如果要自己调整PropertySheet,需要设置各个页面的大小,按钮可以通过GetDlgItem根据ID获得句柄,再移动位置。
tab控件不能很好地表现流程性。就是几个属性页表示的是有先后顺序的一个流程,当然是用向导更好些。老师也要求了用向导的。
因为“上一步”那些按钮不是我自己添加的,是向导自己生成,找不到这些按钮的ID,自然GetDlgItem然后移动位置的方法不可用。回Mdesigner:
表单类无setSize
关注吧,
谢谢。
我也在网上找了好几天这方面的资料,发现有些是自己写一个类继承CPropertySheet,再自己定义方法来改变属性表单大小的。如:http://www.codeguru.com/Cpp/controls/propertysheet/sizing/article.php/c599/
这里放上来给有同样需要的大家看看。过两天我再依照这些资料做做看,有困难再找大家求助,没困难就结贴。谢谢热心回复的各位
这里把spy++查到的CPropertySheet的几个ID列出来
//afxres.h #define ID_APPLY_NOW
#define ID_WIZBACK
#define ID_WIZNEXT
#define ID_WIZFINISH可以移动位置了。但是移动之后,即使是可用的(不是灰色)的按钮都不能按了。例如向导在第一页按下一步不会进入第二页。为什么呢?
CWnd *pWnd = GetDlgItem(ID_WIZNEXT);
pWnd->MoveWindow(200,350,80,25);就只是这样而已,怎么就不能用了?求解