Child风格对话框转换成Popup风格对话框
来源:互联网 发布:max809焊盘数据 编辑:程序博客网 时间:2024/06/10 11:08
对于同一个Dialog资源,在不同的环境中可能需要显示的方式不一样。本人在开发中遇到的就是这种问题,在一种环境中需要的是对话框做嵌入式child显示,而另一处环境需要的是popup弹出式显示,有的人说弄两个资源,一个是子对话内嵌另一个是弹出式对话框,这样又不免重复了。
首先,资源里的对话框设置为CHILD类型嵌入式对话框,对话框类重写虚函数virtual void PreSubclassWindow(),类中增加一个标识变量(是否模态显示) BOOL m_bIsModal,
void CMyDlg::PreSubclassWindow()
{
if ( m_bIsModal)
{
if(m_hWnd != NULL)
{
//获得当前的风格
LONG lStyle = GetWindowLong(m_hWnd, GWL_STYLE);
lStyle &= ~WS_CHILD; //去除CHILD 风格
lStyle &= ~WS_DISABLED; //去除DISABLED 风格
lStyle |= WS_POPUP; //添加POPUP 风格
lStyle |= WS_VISIBLE; //添加VISIBLE 风格
lStyle |= WS_SYSMENU; //添加SYSMENU 风格
lStyle |= WS_CAPTION;
//设置修改的风格
SetWindowLong(m_hWnd, GWL_STYLE, lStyle);
}
}
CSubUIDlg::PreSubclassWindow();
}
其次,在OnInitDialog中调整对话显示位置
void CMyDlg::OnInitDialog()
{
if(m_bIsModal && m_hWnd)
{
CRect rectFrame, rectDlg;
CWnd* pMainWnd = AfxGetMainWnd();
if(pMainWnd != NULL)
{
pMainWnd->GetClientRect(rectFrame);
pMainWnd->ClientToScreen(rectFrame);
GetWindowRect(rectDlg);
int nXPos = rectFrame.left + (rectFrame.Width() / 2) - (rectDlg.Width() / 2);
int nYPos = rectFrame.top + (rectFrame.Height() / 2) - (rectDlg.Height() / 2);
::SetWindowPos(m_hWnd, HWND_TOP, nXPos, nYPos, rectDlg.Width(), rectDlg.Height(), SWP_NOCOPYBITS);
}
}
}
这样,就可以把内嵌风格对话框资源转变成模态对话框显示了。
- Child风格对话框转换成Popup风格对话框
- xp风格的对话框
- 对话框 设置XP风格
- Activity对话框风格设置
- 对话框风格的窗口
- Android对话框之对话框风格的窗体
- 使用WindowsXP风格的对话框
- 使用WindowsXP风格的对话框
- 对话框风格引起的问题
- 对话框风格引起的一系列问题
- Android对话框风格的窗口
- android修改HOLO对话框风格
- android修改HOLO对话框风格
- 实现iphone风格的对话框
- MFC中popup、child、overlapped对话框的区别
- MFC中popup、child、overlapped对话框的区别
- 转载 使对话框程序具有xp 风格
- MFC 对话框XP风格渲染简单方式
- [前端笔试]我遇到的那些前端笔试题~
- 01:求平均年龄
- 【HDU6183】Color it(线段树)
- 夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插
- listen的参数backlog的意义
- Child风格对话框转换成Popup风格对话框
- Store的用法
- 欢迎使用CSDN-markdown编辑器
- linux shell 定时备份mysql数据库
- Android 拷贝已有数据库到私有目录下以及数据库升级(data/data/databases/)
- 获得持之以恒徽章???
- Spring源码阅读(八)—SpringMVC基础Servlet
- vim的常用指令
- Excel 空行取上一行的值