现在市面上很多掌上电脑,如恒基伟业的掌上通、联想的天玑等内嵌的都是微软的WinCE操作系统,如果你买的是内嵌WinCE2.0操作系统的PDA,那也就算了,但如果买的是内嵌WinCE3.0操作系统的PDA,你就发现在这种操作系统下面所显示的对话框都是全屏!这种做法,不仅仅让我看的难受,而且在很多实际应用中都带来了不少的麻烦!!那么,对我们开发人员来说,如何在C编程中禁止对话框全屏显示呢?
其实这在技术上实现并不难,只是书店里关于WinCE编程的书太少,就更别说WinCE3.0的编程说明了。要资料你就得从网上找!噢,一不小心就多说了几句废话……。好,我们言归正传吧!
要禁止WinCE3.0操作系统下的对话框全屏显示,总的来说,有两种方法(使用的编程工具是微软发行的VC+ToolKits或EVC)。
第一种方法比较简单直接,就是使用微软偷偷在对话框类里加的一个变量m_bFullScreen,说到这个变量就忍不住要骂微软两句,好好的对话框,你硬要它全屏显示干啥!规定了全屏,又偏要藏一个控制全屏的变量,真是无聊!好了,气出完了,我们继续!这个变量是BOOL型的变量,当其为TRUE时,对话框就会全屏显示,默认当然就是TRUE了,所以我们要在对话框初始化之前,把这个变量设为FALSE。见下例(这里假设你的对话框类名为CXXXDlg):
BOOL CXXXDlg::OnInitDialog()
{
m_bFullScreen=FALSE;
CDialog::OnInitDialog();
…………
…………
…………
Return TRUE;
}
看,就是这么简单,编译一下,你的对话框就不再是全屏咯!
第二种方法就是在对话框的OnInitDialog()函数中去掉Cdialog::OnInitDialog()一行,换成以下语句:
SHINITDLGINFO shidi;
HWND hDlg = m_hWnd;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_SIPDOWN;
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
这样做,就相当于自己创建一个新类型的对话框,该结构的参数可参考EVC的MSDN说明。
以上就简单介绍了如何禁止WinCE3.0操作系统下的对话框全屏显示,但在第一种方法中,若在程序运行过程中,弹出了虚拟键盘后,对话框将又再全屏显示。因此,我们必须对对话框的WM_SETTINGCHANGE消息进行处理。
首先,我们需在CXXXDlg.h中加入函数声明:
afx_msg OnSettingChange();
跟着,我们要在CXXXDlg.cpp中加入函数:
int CXXXDlg::OnSettingChange()
{
return 1;
}
该函数什么都不干,只要返回1就行了。
最后,就是在消息表中添加ON_WM_SETTINGCHANGE()了。
好了,现在可以再次运行你的对话框程序了,怎样?解决了你的问题了吗?如果还有什么疑问,那就Email联系吧:5261314@vip.sina.com。