请教各位大神~!对话框中子窗口的全屏和还原问题~~~~

hannah_zzz 2013-08-16 05:19:20
用MFC向导建立的对话框,在对话框中增加了picture control控件,
然后再定义了一个类
class C2DPushGraph : public CWnd {...}
在对话框中定义了该类的对象
C2DPushGraph m_PushGraph;
并用SubclassDlgIte函数将picture control控件和m_PushGraph联系起来。刚刚查了一下,貌似就是创建了一个派生类控件的意思。

然后在对象m_PushGraph的cpp中增加了ON_WM_LBUTTONDBLCLK()的消息映射,在相应的消息函数OnLButtonDblClk(UINT nFlags, CPoint point)中进行全屏和还原的处理。处理代码如下:
void C2DPushGraph::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加控件通知处理程序代码
CRect rect_full;
if(nFull == FALSE) // nFull = FALSE; 当前不是全屏
{
SetParent(GetDesktopWindow());
GetDesktopWindow()->GetWindowRect(rect_full);
MoveWindow(rect_full,TRUE);
Invalidate(TRUE);
nFull = TRUE;
}
else // nFull = TRUE; 当前是全屏
{
SetParent(pParent_graph); // 将父窗口设置为对话框
MoveWindow(rect_graph,TRUE); // 覆盖picture control的位置
Invalidate(TRUE);
nFull = FALSE;
}
}

问题:发现双击全屏是可以的,但是再双击恢复原来的大小后,变成了有边框的窗口,并且可拉伸改变窗口的大小…………
我的本意只是将其恢复为原来的样子,就像嵌在对话框中一样,是不能拖动和拉伸边缘来改变大小的。
所以请教各位大侠,应该怎样能达到我的效果?
小女子先行谢过!
...全文
194 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
only_delusion 2013-08-20
  • 打赏
  • 举报
回复
引用 12 楼 zr190068545 的回复:
[quote=引用 11 楼 lin98666lin 的回复:] [quote=引用 8 楼 zr190068545 的回复:] [quote=引用 7 楼 lin98666lin 的回复:] 一般都不这么用,这么做显得有点不合规矩。 建议创建后 不要修改父窗口 但是既然你修改了,那就给你解决办法吧。 用spy++看下才创建时 子窗口的属性和附加属性, 再看下最大化后还原的窗口属性,比对 是否多出了几个属性。1.多出属性: 用Modify 和modifyEx或者用Setwindowlong函数去掉多出来的属性、
那如果不修改父窗口,要怎么才能全屏呢?[/quote] 用我说的方法试了么? 应该是可行的。 正常实现: 1.新建一个窗口 显示和当前双击的图片一样的popup窗口 2.子窗口设置为popup 和父窗口联动。 [/quote] 那就不用picture control控件了么?直接在窗口内绘图就可以么?[/quote] 嗯 是的 .. 既然你已经改好了就可以了,一般方法都会有多种,找一个自己喜欢的实现功能就好了。
hannah_zzz 2013-08-20
  • 打赏
  • 举报
回复
引用 9 楼 qicaofeng 的回复:
--! 没看懂 不过就算成功也有个缺陷,切换后任务栏一直会显示除非是置顶 全屏前 DWORD dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle &= ~WS_CHILD; dwStyle |= WS_POPUP; ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); 然后设置父窗口 退出全屏 DWORD dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle &= ~WS_POPUP; dwStyle |= WS_CHILD; ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); 然后设置父窗口
呃,搞定了,把thickframe去掉了就好了……谢谢你给的代码~ 算算这个小小的问题也已经困扰我快一个月了,真是菜到不行了
hannah_zzz 2013-08-20
  • 打赏
  • 举报
回复
引用 11 楼 lin98666lin 的回复:
[quote=引用 8 楼 zr190068545 的回复:] [quote=引用 7 楼 lin98666lin 的回复:] 一般都不这么用,这么做显得有点不合规矩。 建议创建后 不要修改父窗口 但是既然你修改了,那就给你解决办法吧。 用spy++看下才创建时 子窗口的属性和附加属性, 再看下最大化后还原的窗口属性,比对 是否多出了几个属性。1.多出属性: 用Modify 和modifyEx或者用Setwindowlong函数去掉多出来的属性、
那如果不修改父窗口,要怎么才能全屏呢?[/quote] 用我说的方法试了么? 应该是可行的。 正常实现: 1.新建一个窗口 显示和当前双击的图片一样的popup窗口 2.子窗口设置为popup 和父窗口联动。 [/quote] 那就不用picture control控件了么?直接在窗口内绘图就可以么?
only_delusion 2013-08-19
  • 打赏
  • 举报
回复
引用 8 楼 zr190068545 的回复:
[quote=引用 7 楼 lin98666lin 的回复:] 一般都不这么用,这么做显得有点不合规矩。 建议创建后 不要修改父窗口 但是既然你修改了,那就给你解决办法吧。 用spy++看下才创建时 子窗口的属性和附加属性, 再看下最大化后还原的窗口属性,比对 是否多出了几个属性。1.多出属性: 用Modify 和modifyEx或者用Setwindowlong函数去掉多出来的属性、
那如果不修改父窗口,要怎么才能全屏呢?[/quote] 用我说的方法试了么? 应该是可行的。 正常实现: 1.新建一个窗口 显示和当前双击的图片一样的popup窗口 2.子窗口设置为popup 和父窗口联动。
hannah_zzz 2013-08-19
  • 打赏
  • 举报
回复
引用 4 楼 VisualEleven 的回复:
可以在主对话框中放入一个子对话框,子对话框上放上你的Picture Control控件,双击事件在子对话框中处理
呃,这样的话改动的地方会比较多…… 如果还是按上面的方法要怎么解决呢?
Eleven 2013-08-19
  • 打赏
  • 举报
回复
可以在主对话框中放入一个子对话框,子对话框上放上你的Picture Control控件,双击事件在子对话框中处理
hannah_zzz 2013-08-19
  • 打赏
  • 举报
回复
各位大侠呢?坐等解决办法~~~
hannah_zzz 2013-08-19
  • 打赏
  • 举报
回复
引用 9 楼 qicaofeng 的回复:
--! 没看懂 不过就算成功也有个缺陷,切换后任务栏一直会显示除非是置顶 全屏前 DWORD dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle &= ~WS_CHILD; dwStyle |= WS_POPUP; ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); 然后设置父窗口 退出全屏 DWORD dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle &= ~WS_POPUP; dwStyle |= WS_CHILD; ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); 然后设置父窗口
加进去试了,完全没有用啊~~~~
qicaofeng 2013-08-19
  • 打赏
  • 举报
回复
--! 没看懂 不过就算成功也有个缺陷,切换后任务栏一直会显示除非是置顶 全屏前 DWORD dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle &= ~WS_CHILD; dwStyle |= WS_POPUP; ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); 然后设置父窗口 退出全屏 DWORD dwStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dwStyle &= ~WS_POPUP; dwStyle |= WS_CHILD; ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle); 然后设置父窗口
hannah_zzz 2013-08-19
  • 打赏
  • 举报
回复
引用 7 楼 lin98666lin 的回复:
一般都不这么用,这么做显得有点不合规矩。 建议创建后 不要修改父窗口 但是既然你修改了,那就给你解决办法吧。 用spy++看下才创建时 子窗口的属性和附加属性, 再看下最大化后还原的窗口属性,比对 是否多出了几个属性。1.多出属性: 用Modify 和modifyEx或者用Setwindowlong函数去掉多出来的属性、
那如果不修改父窗口,要怎么才能全屏呢?
only_delusion 2013-08-19
  • 打赏
  • 举报
回复
一般都不这么用,这么做显得有点不合规矩。 建议创建后 不要修改父窗口 但是既然你修改了,那就给你解决办法吧。 用spy++看下才创建时 子窗口的属性和附加属性, 再看下最大化后还原的窗口属性,比对 是否多出了几个属性。1.多出属性: 用Modify 和modifyEx或者用Setwindowlong函数去掉多出来的属性、
hannah_zzz 2013-08-18
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
你对话框属性设置的对吗?Border: NONE , Style : Child
对话框??你是指对话框里和那个控件相关联的窗口吧?如果是的话用的是这个语句 CreateEx( wndStatic.GetExStyle(), NULL, NULL, WS_CHILD | WS_VISIBLE | wndStatic.GetStyle(), rectStatic, pParent, nStaticID, NULL))
Eleven 2013-08-16
  • 打赏
  • 举报
回复
你对话框属性设置的对吗?Border: NONE , Style : Child

15,979

社区成员

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

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