如何更改CPropertySheet上面的next,finish,back这些按钮的位置 如何更改CPropertySheet上面的next,finish,back这些按钮的位置,这些按钮都被封装在类中了因为不知道这些按钮的id所以我得不到他们的指针,请问如何得到呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 5.6 使用属性对话框属性对话框不同于普通对话框的是它能同时提供多个选项页,而每页都可以由资源编辑器以编辑对话框的方式进行编辑,这样给界面开发带来了方便。同时使用上也遵守普通对话框的规则,所以学习起来很方便。属性对话框由两部分构成:多个属性页(CPropertyPage)和属性对话框(CPropertySheet)。首先需要编辑属性页,在资源编辑器中选择插入,并且选择属性对话框后就可以插入一个属性页,如图,或者选择插入一个对话框,然后将其属性中的Style设置为Child,Border设置为Thin也可以,如图。然后根据这个对话框资源生成一个新类,在选择基类时选择CPropertyPage,ClassWizard会自动生成相关的代码。而对于CPropertySheet也需要生成新类,并且将所有需要加入的属性页对象都作为成员变量。属性对话框也分为有模式和无模式两种,有模式属性对话框使用DoModal()创建,无模式属性对话框使用Create()创建。下面的代码演示了如何创建属性对话框并添加属性页: //修改CPropertySheet派生类的构造函数为如下形式CSheet::CSheet() :CPropertySheet("test sheet", NULL, 0){ m_page1.Construct(IDD_PAGE_1); m_page2.Construct(IDD_PAGE_2); AddPage(&m_page1); AddPage(&m_page2);}//创建有模式属性对话框void CMy56_s1Dlg::OnMod() { CSheet sheet; sheet.DoModal();}//创建无模式属性对话框void CMy56_s1Dlg::OnUnm() { CSheet *sheet=new CSheet; sheet->Create();}对于属性对话框可以使用下面的一些成员函数: CPropertyPage* CPropertySheet::GetActivePage( )得到当前活动页的指针。 BOOL CPropertySheet::SetActivePage( int nPage )用于设置当前活动页。 int CPropertySheet::GetPageCount()用于得到当前页总数。 void CPropertySheet::RemovePage( int nPage )用于删除一页。 而对于属性页来将主要通过重载一些函数来达到控制的目的: void CPropertyPage::OnOK() 在属性对话框上按下“确定”按钮后被调用 void CPropertyPage::OnCancel() 在属性对话框上按下“取消”按钮后被调用 void CPropertyPage::OnApply() 在属性对话框上按下“应用”按钮后被调用 void CPropertyPage::SetModified( BOOL bChanged = TRUE ) 设置当前页面上的数据被修改标记,这个调用可以使“应用”按钮为允许状态。 此外利用属性对话框你可以生成向导对话框,向导对话框同样拥有多个属性页,但同时只有一页被显示,而且对话框上显示的按钮为“上一步”,“下一步”/“完成”,向导对话框会按照你添加页面的顺序依次显示所有的页。在显示属性对话框前你需要调用void CPropertySheet::SetWizardMode()。使用向导对话框时需要对属性页的BOOL CPropertyPage::OnSetActive( )进行重载,并在其中调用void CPropertySheet::SetWizardButtons( DWORD dwFlags )来设置向导对话框上显示的按钮。dwFlags的取值可为以下值的“或”操作: PSWIZB_BACK 显示“上一步”按钮 PSWIZB_NEXT 显示“下一步”按钮 PSWIZB_FINISH 显示“完成”按钮 PSWIZB_DISABLEDFINISH 显示禁止的“完成”按钮 void CPropertySheet::SetWizardButtons( DWORD dwFlags )也可以在其他地方调用,比如说在显示最后一页时先显示禁止的“完成”按钮,在完成某些操作后再显示允许的“完成”按钮。 在使用向导对话框时可以通过重载一些函数来达到控制的目的: void CPropertyPage::OnWizardBack() 按下了“上一步”按钮。返回0表示有系统决定需要显示的页面,-1表示禁止页面转换,如果希望显示一个特定的页面需要返回该页面的ID号。 void CPropertyPage::OnOnWizardNext() 按下了“下一步”按钮。返回值含义与void CPropertyPage::OnWizardBack()相同。 void CPropertyPage::OnWizardFinish() 按下了“完成”按钮。返回FALSE表示不允许继续,否则返回TRUE向导对话框将被结束。 在向导对话框的DoModal()返回值为ID_WIZFINISH或IDCANCEL。下面的代码演示了如何创建并使用向导对话框: //创建有模式向导对话框void CMy56_s1Dlg::OnWiz() { CSheet sheet; sheet.SetWizardMode(); int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL}//重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮BOOL CPage1::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT); return CPropertyPage::OnSetActive();}BOOL CPage2::OnSetActive() { ((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH); return CPropertyPage::OnSetActive();} http://www.vchelp.net/vchelp/zteach/teach_road_5.asp?type_id=66&class_id=1&cata_id=14&article_id=756 1)定义#define PS_ID_BACK 0x3023 //BACK按钮#define PS_ID_NEXT 0x3024 //next按钮#define PS_ID_FINISH 0x3025 //Finish按钮2)得到它们的指针,比如back按钮吧CWnd * pWndBack = GetDlgItem(PS_ID_BACK);pWndBack->MoveWindow(...) ; //这样就可以移动了 在CYourProperty的初始化函数中CWnd *pWnd = GetDlgItem(ID_WIZNEXT);// //向导模式下ID_WIZNEXT,ID_WIZFINISH, ID_WIZBACK, IDCANCEL//普通模式下IDOK, IDCANCEL, ID_APPLY_NOW, IDHELPpWnd->setWindowPos(^^^);//参数查msdn吧 联想移动硬盘F310漏电! 宽字符处理 OnMouseMove的奇怪现象,谁解释一下. 关于VC中文字竖排的问题,请大家帮忙。 关于文本读写----极简单! ★★★有关IP多播的跨网段发送数据问题,请高手们进来帮个忙,重金奖励,最高金额500可用分,请您吃饭!★★★ 这是怎么样发生的啊?疑惑不解~~(请高手赐教啊) 为什么我的按钮不立体? 各位,请教一个c/s问题:服务器采用异步通信,怎样实现与多个用户同时通信 vc入门问题:用API函数做串口通信时,如何向串口发送一个回车键,我的函数如下: 500分求教: C程序如何应用到我的VC程序里
CSheet::CSheet()
:CPropertySheet("test sheet", NULL, 0)
{
m_page1.Construct(IDD_PAGE_1);
m_page2.Construct(IDD_PAGE_2);
AddPage(&m_page1);
AddPage(&m_page2);
}
//创建有模式属性对话框
void CMy56_s1Dlg::OnMod()
{
CSheet sheet;
sheet.DoModal();
}
//创建无模式属性对话框
void CMy56_s1Dlg::OnUnm()
{
CSheet *sheet=new CSheet;
sheet->Create();
}
对于属性对话框可以使用下面的一些成员函数: CPropertyPage* CPropertySheet::GetActivePage( )得到当前活动页的指针。
BOOL CPropertySheet::SetActivePage( int nPage )用于设置当前活动页。
int CPropertySheet::GetPageCount()用于得到当前页总数。
void CPropertySheet::RemovePage( int nPage )用于删除一页。
而对于属性页来将主要通过重载一些函数来达到控制的目的:
void CPropertyPage::OnOK() 在属性对话框上按下“确定”按钮后被调用
void CPropertyPage::OnCancel() 在属性对话框上按下“取消”按钮后被调用
void CPropertyPage::OnApply() 在属性对话框上按下“应用”按钮后被调用
void CPropertyPage::SetModified( BOOL bChanged = TRUE ) 设置当前页面上的数据被修改标记,这个调用可以使“应用”按钮为允许状态。
此外利用属性对话框你可以生成向导对话框,向导对话框同样拥有多个属性页,但同时只有一页被显示,而且对话框上显示的按钮为“上一步”,“下一步”/“完成”,向导对话框会按照你添加页面的顺序依次显示所有的页。在显示属性对话框前你需要调用void CPropertySheet::SetWizardMode()。使用向导对话框时需要对属性页的BOOL CPropertyPage::OnSetActive( )进行重载,并在其中调用void CPropertySheet::SetWizardButtons( DWORD dwFlags )来设置向导对话框上显示的按钮。dwFlags的取值可为以下值的“或”操作:
PSWIZB_BACK 显示“上一步”按钮
PSWIZB_NEXT 显示“下一步”按钮
PSWIZB_FINISH 显示“完成”按钮
PSWIZB_DISABLEDFINISH 显示禁止的“完成”按钮
void CPropertySheet::SetWizardButtons( DWORD dwFlags )也可以在其他地方调用,比如说在显示最后一页时先显示禁止的“完成”按钮,在完成某些操作后再显示允许的“完成”按钮。 在使用向导对话框时可以通过重载一些函数来达到控制的目的: void CPropertyPage::OnWizardBack() 按下了“上一步”按钮。返回0表示有系统决定需要显示的页面,-1表示禁止页面转换,如果希望显示一个特定的页面需要返回该页面的ID号。
void CPropertyPage::OnOnWizardNext() 按下了“下一步”按钮。返回值含义与void CPropertyPage::OnWizardBack()相同。
void CPropertyPage::OnWizardFinish() 按下了“完成”按钮。返回FALSE表示不允许继续,否则返回TRUE向导对话框将被结束。
在向导对话框的DoModal()返回值为ID_WIZFINISH或IDCANCEL。下面的代码演示了如何创建并使用向导对话框:
//创建有模式向导对话框
void CMy56_s1Dlg::OnWiz()
{
CSheet sheet;
sheet.SetWizardMode();
int iRet=sheet.DoModal();//返回ID_WIZFINISH或IDCANCEL
}
//重载BOOL CPropertyPage::OnSetActive( )来控制显示的按钮
BOOL CPage1::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
BOOL CPage2::OnSetActive()
{
((CPropertySheet*)GetParent())->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);
return CPropertyPage::OnSetActive();
}
#define PS_ID_BACK 0x3023 //BACK按钮
#define PS_ID_NEXT 0x3024 //next按钮
#define PS_ID_FINISH 0x3025 //Finish按钮
2)得到它们的指针,比如back按钮吧CWnd * pWndBack = GetDlgItem(PS_ID_BACK);
pWndBack->MoveWindow(...) ; //这样就可以移动了
CWnd *pWnd = GetDlgItem(ID_WIZNEXT);//
//向导模式下ID_WIZNEXT,ID_WIZFINISH, ID_WIZBACK, IDCANCEL
//普通模式下IDOK, IDCANCEL, ID_APPLY_NOW, IDHELP
pWnd->setWindowPos(^^^);//参数查msdn吧