CDialog全屏效果怎么实现?

LiSCode 2010-01-05 01:17:49
效果类似于QQ远程协助,但这里的核心问题不是实现远程协助,问题如下

首先是建立一个单文档的工程,然后添加两个对话框,如 dlg1 和 dlg2
其中 dlg2 的属性要设置成Child,而不是popup,是没有标题栏的

dlg1是普通的带标题栏的对话框

在MainFrame里声明 dlg1的指针,建立非模态对话框
通过菜单调出 dlg1,

在dlg1里声明 dlg2的指针,也是创建非模态对话框,并且 dlg2作为 dlg1的子对话框,嵌入dlg1中,

也就是说,dlg1相当于dlg2的“外壳”,

那么主程序调出dlg1后,实际上dlg1的客户区加载的是dlg2的内容,

以上全都没有问题,问题就在于,在dlg1中有个菜单,或者按钮,响应之后是要把 dlg2弄成全屏状态,

就是没有标题栏,没有边框等等,dlg2占满整个屏幕,


最好有源码,谢谢


...全文
118 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gudujian0910 2010-01-05
  • 打赏
  • 举报
回复
我给你个代码绝对好用,在相应类里增加BOOL m_bFullScreen;以下是全屏按钮的响应函数:
注意:第一次单击按钮没有效果,因为没有设置全屏标志;自己看着设置下就OK了
m_bFullScreen=!m_bFullScreen; // 设置全屏显示标志
//一种更好的全屏显示
LONG style = ::GetWindowLong(this->m_hWnd,GWL_STYLE);
if(m_bFullScreen)//全屏显示
{
style &= ~(WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(this->m_hWnd,GWL_STYLE, style);
this->ShowWindow(SW_SHOWMAXIMIZED);
CRect rect;
this->GetWindowRect(&rect);
::SetWindowPos(this->m_hWnd,HWND_NOTOPMOST,rect.left-1, rect.top-1, rect.right-rect.left + 3, rect.bottom-rect.top + 3, SWP_FRAMECHANGED);
}
else
{
style |= WS_DLGFRAME | WS_THICKFRAME;
SetWindowLong(this->m_hWnd, GWL_STYLE, style);
this->ShowWindow(SW_NORMAL);
}
hejian2266 2010-01-05
  • 打赏
  • 举报
回复
dlg2中响应WM_SIZE消息OnSize,在其中调用SetWindowPos,将窗口大小设为屏幕分辨率大小。
获取屏幕大小可以这样:
int nWidth=GetSystemMetrics(SM_CXSCREEN); //屏幕宽度
int nHeight=GetSystemMetrics(SM_CYSCREEN); //屏幕高度
caocheng8230 2010-01-05
  • 打赏
  • 举报
回复
建议你就不要用DIALOG了,使用CWnd子类化吧,然后将DIALOG作为其子窗口,控制其位置,大小
昨夜无风 2010-01-05
  • 打赏
  • 举报
回复
SetWindowPos
yschenwei 2010-01-05
  • 打赏
  • 举报
回复
隐藏工具栏跟菜单栏,然后设置窗口大小为屏幕分辨率大小。
LiSCode 2010-01-05
  • 打赏
  • 举报
回复
自己顶

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧