标签:
一、MFC对话框
1.对话框的分类
模式和非模式
2.相关类
CDialog类 - 父类CWnd类
CCommonDialog - 父类是CDialog类,称为通用对话框类,包括颜色对话框、文件对话框、字体对话框、
查找对话框、页面设置对话框、打印对话框。
CPropertyPage类 - 父类是CDialog类,称为属性页对话框。
3.CDialog类的使用类
3.1 创建基于模式对话框的应用程序
(1)添加对话框资源,与对话框类关联
(2)在应用程序类的InitInstance函数中创建和显示对话框窗口
CDialog::DoModal( )
(3)对话框的关闭
不要做任何处理,点击OK或关闭的时,会自动调用相关函数
CDialog::OnOk
CDialog::OnOk
3.2 创建基于非模式对话框的应用程序
(1)添加对话框资源,与对话框类关联
(2)窗口的创建和显示与一般的框架窗口类似
(3)处理对话框的关闭(销毁对话框)
重写CDialog::OnOk( )和CDialog::OnOk( )函数,在函数中调用DestroyWindow销毁对话框窗口
重写CWnd::PostNcDestroy( )函数,在函数中完成对象的自我销毁,delete this;
4. DoModal函数的执行过程
4.1 查找并加载资源
4.2 将父窗口设置为不可用状态
4.3 创建对话框,进入对话框的消息循环
4.4 点击OK、Cancel或者关闭按钮时,跳出循环,并且隐藏对话框窗口
4.5 将父窗口设置为可用和活动状态
4.6 销毁对话框窗口
4.7 释放对话框资源
4.8 返回
dlg.DoModal( )
{
//1 查找加载资源
HRSRC hResource = ::FindResource( hInst, m_lpszTemplateName, RT_DIALOG );
hDialogTemplate = LoadResource( hInst, hResource );
//2 将父窗口设置为不可用状态
HWND hWndParent = PreModal( );
::EnableWindow( hWndParent, FALSE );
//3 创建对话框,进入对话框的消息循环
CreateRunDlgIndirect( lpDialogTemplate, CWnd::FromHandle(hWndParent), hInst )
{
BOOL bRet = CreateDlgIndirect( lpDialogTemplate, pParentWnd, hInst )
{
RunModalLoop( dwFlags ) == m_nModalResult;
//4 点击OK、Cancel或者关闭按钮时,跳出循环,并且隐藏对话框窗口
SetWindowPos( NULL, 0, 0, 0, 0, SWP_HIDEWINDOW |
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER );
}
}
//5 将父窗口设置为可用和活动状态
::EnableWindow( hWndParent, TRUE );
::SetActiveWindow( hWndParent );
//6 销毁对话框窗口
DestroyWindow( );
//7 释放对话框资源
FreeResource( hDialogTemplate );
return m_nModalResult;
}
二、控件操作
标签:
原文地址:http://www.cnblogs.com/csqtech/p/5727563.html