Office中国论坛/Access中国论坛

标题: 请教两个窗口全屏的问题 [打印本页]

作者: lazybird    时间: 2012-9-11 20:45
标题: 请教两个窗口全屏的问题
本帖最后由 lazybird 于 2012-9-11 20:47 编辑

[attach]50366[/attach]

问题1:我将窗口的“弹出”属性设为“是”并最大化全屏之后,想设计一个“退出全屏”的按钮,希望能够将窗口的“弹出”属性设为“否”并仍然最大化,只是将菜单栏显示出来,请问如何实现? 在代码中插入“Me.Popup=False”总是会报错。

问题2:最大化时请问如何将底部windows菜单栏隐藏(在不设置菜单栏自动隐藏的情况下),做到真正的全屏?
作者: t小宝    时间: 2012-9-11 20:45
问题1:窗体打开时不能设置Popup属性,你的要求可以通过2个窗体实现,1个弹出窗体,1个普通窗体,2个窗体都打开并最大化,关闭弹出窗体后就会看到普通窗体还有菜单栏。
问题2:弹出窗体将边框样式属性设为无,打开并最大化后自然会挡住底部windows任务栏。最大化代码是DoCmd.Maximize。
作者: lazybird    时间: 2012-9-11 21:10
多谢版主,第二个问题算是解决了。第一个问题的解决方案不理想,假如我在窗体上进行操作,例如查询筛选数据,那么两个窗体并不会同步显示一样的东西啊,况且同时打开两个窗体也占资源,有没有更好的办法?
作者: t小宝    时间: 2012-9-11 21:35
查询筛选数据 —— 有必要全屏吗?
仅在登录时用一下吧,我还没用过呢{:soso_e101:}
作者: lazybird    时间: 2012-9-11 21:51
呵呵~ 我的程序程序需要将某种产品的数据查询出来显示到一个电视机上,作为展示屏。希望版主帮忙想想办法。
作者: ynjxw    时间: 2012-9-12 15:11
做一个全屏的背景就可以了,其他的窗体可以不全屏,也可以的吧。
作者: lazybird    时间: 2012-9-13 10:40
回楼上的,这样还是不能在显示和不显示Access菜单的两种状态间切换。其实归根到底我的问题是如何实现通过代码改变窗口的“弹出”属性。
作者: lynnwang    时间: 2012-9-13 15:33
其实归根到底我的问题是如何实现通过代码改变窗口的“弹出”属性。

不可的。为什么?
==



作者: lynnwang    时间: 2012-9-13 15:47


在“CWnd::CreateEx”创建窗体时,WS_POPUP   和 WS_CHILD   是不能同时使用的,
只有创建时才可能设置这MS说的。

而你现在要弹出窗体改为子窗体,是同样 的道理的。


如果你非要,那给你一段VC中的参考代码,
对话框在WS_POPUP与WS_CHILD之间转换(原创)
                                    
BOOL Create( UINT nIDTemplate,CWnd* pParentWnd );

BOOL CChildDialog::Create( UINT nIDTemplate,CWnd* pParentWnd )
{
HINSTANCE hInst = AfxFindResourceHandle( MAKEINTRESOURCE( nIDTemplate ), RT_DIALOG);
HRSRC hResource = ::FindResource(hInst,MAKEINTRESOURCE( nIDTemplate ), RT_DIALOG);
HGLOBAL hTemplate = LoadResource(hInst, hResource);
ASSERT( hTemplate );
LPCDLGTEMPLATE lpDialogTemplate = ( LPCDLGTEMPLATE )LockResource( hTemplate );
ASSERT( lpDialogTemplate );
DWORD *ptrStyle = ( DWORD* )&lpDialogTemplate->style;
*ptrStyle &= ~( WS_OVERLAPPEDWINDOW|WS_POPUPWINDOW );
*ptrStyle |= WS_CHILDWINDOW;
UnlockResource( hTemplate );
BOOL bResult = CreateIndirect(hTemplate, pParentWnd, hInst);
FreeResource(hTemplate);

return bResult;
}

MSDN中的资料:
WS_POPUP   Creates a pop-up window. Cannot be used with the WS_CHILD style.
WS_CHILD   Creates a child window. Cannot be used with the WS_POPUP style.


作者: lynnwang    时间: 2012-9-13 16:00
另外告诉你,你也别指望 用 SetParent 来改变。

上面的代码也是通过偷梁换柱来达到目的

WS_POPUP   和 WS_CHILD   至于为什么不能共容,这说来话长,我也是新手一时也说不上。

接分了

作者: lynnwang    时间: 2012-9-13 16:26
WS_POPUP   和 WS_CHILD   至于为什么不能转换 有个形象的比喻
你有一辆大众的捷达,有一天你突然来了灵感或有了需求,需要将大众的捷达改为大众的桑塔娜,
因为你觉得他们都是同公司同时代同兄弟,容易改、也可以改。
但需不知,里面要改的东西太多了,可能改的成本是直接买的成本5倍,
而且开起来的安全与性能还是个问题?
所以这里还不如重一个窗体。


记住:
能够将窗口的“弹出”属性设为“否”并仍然最大化,只是将菜单栏显示出来!这是你目的

而“其实归根到底我的问题是如何实现通过代码改变窗口的“弹出”属性。”是你实现目的的一种方法

方法可以多种,目的就一个,不要被方法套进去了!


回到你的问题,我建议方法:你应该关闭屏幕响应,然后重新以非弹出方式加载窗体,再刷新屏幕
作者: lynnwang    时间: 2012-9-14 21:36
下面链接有段代码,管理员发布的
据说可以转换弹出模式的代码,大家运行试试
这样或许能让你更理解问题所在(透过现象看本质)(运行后移动窗体你就会发现问题)

API改变窗体的弹出窗体模式
http://www.office-cn.net/thread-60059-1-1.html
作者: 咱家是猫    时间: 2012-9-14 23:46
WS_POPUP   为弹出
WS_CHILD    为镶钳式子窗体
如果是VB里就更明白些了,在VB里窗体有一个属性MDIChild,如果为"是",那它就无法逃出主程序的框框了.而且这个属性在VB里运行时也是只读的.
作者: 咱家是猫    时间: 2012-9-14 23:48
不如干脆就建两个窗体,版式一样,相互切换,切换时提取并采用前面窗体的RecordSet如何?
作者: lazybird    时间: 2012-10-6 17:28
经过考虑,还是选择了2楼的方案,相对简单些,适合我这样的菜鸟。多谢各位专家热心解答。{:soso_e183:}
作者: jingyu    时间: 2012-10-8 14:33
[attach]50481[/attach]
[attach]50482[/attach]
测试




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3