禁止WinCE3.0操作系统下的对话框全屏显示

类别:VC语言 点击:0 评论:0 推荐:
 

       现在市面上很多掌上电脑,如恒基伟业的掌上通、联想的天玑等内嵌的都是微软的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联系吧:[email protected]

 

本文地址:http://com.8s8s.com/it/it1972.htm