MFC中利用属性页建立类似Tab控件功能,在属性页上添加退出按钮如何关闭整个窗口

我在MFC中先建立的Dialog一个窗口,然后在这个窗口类中添加了CPropertySheet类对象m_Sheet,之后又建立了几个基类是CPropertyPage的对话框Page1等,然后通过m_Sheet这个对象将他们加到Dialog窗口中。这样就实现了Tab控件的功能。现在我要在Page1中添加一个退出按钮,要能实现退出Dialog窗口的功能。
我也没多少分,求大侠帮忙了!

这个实现起来很简单,首先CDialog提供一个static类指针,用于返回自身初始化好的指针。然后当点击退出按钮后,就调用这个static指针,发送WM_CLOSE即可。
CDialog::m_dialog->PostMessage(WM_CLOSE, 0, 0);追问

请问在哪些地方加哪些代码啊?怎么返回那个个static的指针?还有m_dialog是什么类型的变量?我学MFC不久,VC的指针基本不会用。

追答

那你要好好补补你的基础知识了,不然怎么写好程序呢?
定义static指针,在Dialog头文文件里:
static CMyDialog* m_dialog
在Dialog的CPP文件里进行初始化:
CMyDialog* CMyDialog::m_dialog = NULL;
在Dialog执行OnInitDialog时将this指针赋给m_dialog
m_dialog = this;
其他类里就可以直接使用CMyDialog::m_dialog->PostMessage(WM_CLOSE, 0, 0);

追问

谢谢。我还想问下这样发送了关闭窗口的消息后还需要手动释放CMyDialog窗口的资源么,它的子窗口的资源随着CMyDialog窗口的关闭应该被释放了吧。

追答

不用释放了,它会自动调用析构函数执行的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-24
你的退出,指的是整个程序的退出吗?使用过Exit()吗
第2个回答  2013-09-24
exit(NULL);

MFC中利用属性页建立类似Tab控件功能,在属性页上添加退出按钮如何关闭整 ...
这个实现起来很简单,首先CDialog提供一个static类指针,用于返回自身初始化好的指针。然后当点击退出按钮后,就调用这个static指针,发送WM_CLOSE即可。CDialog::m_dialog->PostMessage(WM_CLOSE, 0, 0);

mfc cpropertysheet怎么关闭
1.去掉应用按钮。在CPropertySheet的构造函数中添加添加语句:this-m_psh.dwFlags |= PSH_NOAPPLYNOW;作用是去掉应用按钮。2.去掉帮助按钮的操作稍微复杂一些,需要在CPropertySheet的构造函数中加上如下语句:this-m_psh.dwFlags &= ~(PSH_HASHELP);page1.m_psp.dwFlags&= ~(PSP_HASHELP);page2.m...

MFC tab control中的子级child对话框有一个按钮,如何通过这个按钮把整个...
主dlg点击弹出tab窗口时,先隐藏,然后用domodle弹出你的tab窗口,你点上图那个确定时,用OnOk()退出 ,主dlg会接着执行doModle()后的代码,在后面的代码你可以将主dlg再显示出来 如果你知道窗口句柄的话,一般都是用SendMessage(WM_CLOSE)关闭某窗口,具体参数我忘了,你百度吧 ...

如何让CMFCTabCtrl关闭按钮关闭属性页
CMFCTabCtrl::EnableActiveTabCloseButton 用于在CMFCTabCtrl的Tab页显示一个关闭按钮,看看关闭按钮怎么实现:void CMFCBaseTabCtrl::OnLButtonDown(UINT nFlags, CPoint point){ m_bWindowPosChanged = FALSE;CWnd::OnLButtonDown(nFlags, point);if (m_rectCloseButton.PtInRect(point)){ m_bT...

MFC 如何在TabControl控件上创建按钮,并能隐藏TabControl控件的选项...
\/\/放到类里:CButton *m_button;\/\/如果变成局域变量按钮会创建了然后马上消失 m_button.Create(\/*填你的TabControl的指针*\/...);关于换页的可参考下面代码 witch (m_tab.GetCurSel())\/\/m_tab控件变量 { case 0: m_list_windows.ShowWindow(SW_HIDE);\/\/隐藏窗口列表控件 m_list...

mfc 如何实现“下一步”分步骤的窗口程序
一种是建一个对话框,添加一个tab控件,然后上一步下一步就是做属性页的页面切换 另一种方法是建一个对话程序,然后点击对话框上的下一步按钮,让另外一个对话框弹出来,然后再对话框弹出后,enddialog 去结束当前对话框,上一步做同样的操作。如果你要求上一步能记住以前的输入,那就另开劈一个...

...属性表单包含多个属性页相当于MFC中的选型卡功能
1,创建Dialog Based Appcation Exe with MFC wizard2,添加资源Large Property Page 一个,后按住CTRL点击它并拖动,重复三次这样就得到了三个Large Property Page 保持默认的ID。3,用Wizard 以PAGE3作为模板,生成我们的嵌套的CMyPage,它派生自CPropertyPage。4,CPropertyPage 类添加4个成员变量: ...

怎样用mfc开发能切换的界面
添加一个CtrlTab类型的控件, 就是标签页 分别创建3个子对话框,分别如图:在主对话框中添加代码,最核心的部分,请参考 m_tabCtrl.InsertItem(0, _T("多开")); m_dlgLaunch.Create(IDD_DIALOG_LAUNCH, &m_tabCtrl); m_vectDlg.push_back(&m_dlgLaunch);m_tabCtrl.InsertItem(1, _T("...

MFC中第二个界面按“上一步”按钮返回上一个界面怎么实现
CXXDlg dlg;dlg.DoModal();ShowWindow(SW_HIDE);上一步按钮:OnButton(){ CParentDlg *p=(CParentDlg*)GetParent();p->ShowWindow(SW_SHOW);CDialog::OnCancel;}

MFC中Tab Control和属性页功能的区别在哪?
Tab控件上所有的子控件其实都是在一个界面上,需要你自己响应selchange事件判断当前的所选标签来对各个子控件进行ShowWindow()操作。属性页那就是几个子控件各属于自己的界面,不需要你响应selchange事件 子控件少时用Tab控件,方便。多时用属性页,免去n多子控件的ShowWindow()操作 ...

相似回答