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