WinCE在开启程序的时候会有主窗口从屏幕中间逐渐扩大至整个屏幕的过程,这是Microsoft好心开了一个Animation的效果,如果需要把此效果关闭,共有以下几种方法:
1、
修改注册表(
SDI
和
主
Dialog
::
DoModal
均适用)
这种方法无需考虑窗口是SDI还是Dialog,因为它是从系统自身的层面上去解决的。用此方法更改后,在该系统平台上运行的所有应用程序除了个别有特别设置的,都会统一地打开或关闭该效果。
具体的注册表项为:
[HKEY_LOCAL_MACHINE/SYSTEM/GWE] Animate =dword: 0
0为关闭Animation效果,1为打开。
注意:此方法可用于解决当程序中用CreateProcess或其他函数调用系统程序时,animaiton效果无法用下面几种方法消除的问题。
2、
用
SetWindowLong
函数(
SDI
和
主
Dialog
::
DoModal
均适用)
在全屏语句前添加
::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,WS_EX_NOANIMATION);
注意:如果是SDI窗口,则要确保在该语句前窗口尚未显示,即CreateWindow语句中不能有WS_VISIBLE参数,若要显示窗体则可在全屏语句后用ShowWindow显示。
3
、
SDI
窗体(
MainFrame
,
ChildView
)
1
)在Overwrite PreCreateWindow函数中加入cs.dwExStyle = WS_EX_NOANIMATION;这样一句话,就可以了!
2
)用Win32编程,解决办法是在InitInstance函数中使用如下代码:
hWnd = CreateWindowEx(WS_EX_NOANIMATION , szWindowClass, szTitle, WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
替换
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
这样就可以了。
4、
Dialog
::
DoModal
创建的窗口
由于Dialog.DoModal的时候是不调用PreCreateWindow,所以没法重载PreCreateWindow,但是在rc文件中可以看到EXSTYLE WS_EX_APPWINDOW | 0x80000000L这样一行,所以我们在后面添加 | WS_EX_NOANIMATION,这样保存rc,重新编译运行,就可以发现Dialog是一下子显示出来,没有动画效果了。