Windows CE 的非全屏对话框类






4.92/5 (17投票s)
本文描述了一个非全屏对话框类,该类在激活 SIP 时不会切换到全屏模式。
引言
在 Pocket PC 下显示非全屏对话框实际上非常简单。你只需要在对话框的构造函数中将 CDialog 类的 m_bFullScreen 成员设置为 FALSE。问题在于在使对话框非全屏之后。当你调用任何一个 SIP 组件(例如键盘、听写器、手写识别器等)时,以上述过程创建的对话框将失去其姿态并切换到全屏!为了阻止这种不稳定的行为,你只需要处理两个窗口消息,WM_ACTIVATE 和 WM_SETTINGCHANGE,并简单地调用 CWnd 中的默认实现。
因此,为了概括一下,我已经编写了一个对话框类来处理所有这些问题,这样你就无需每次创建非全屏对话框时都硬编码所有这些内容。
如何使用
要立即将任何 CDialog 派生类转换为非全屏对话框,只需执行以下操作:
- 将 CNonFSDialog头文件和源代码(NonFSDialog.h和NonFSDialog.cpp)添加到你的项目中
- 在你的对话框中包含 CNonFSDialog头文件NonFSDialog.h#include "NonFSDialog.h" 
- 你必须从 CNonFSDialog继承,而不是从CDialog继承。// Assuming dialog class name is CNonFullScreenDialogDlg class CNonFullScreenDialogDlg : public CNonFSDialog { ...... }
- 现在,如果你想进行搜索和替换 ;-),请在对话框的源代码(cpp)中替换所有 CDialog的出现为CNonFSDialog。但如果你是选择性模式,你可以只更改构造函数中对CDialog类的引用...///////////////////////////////////////////////////////////////////////////// // CNonFullScreenDialogDlg dialog CNonFullScreenDialogDlg::CNonFullScreenDialogDlg(CWnd* pParent /*=NULL*/) : /*CDialog*/CNonFSDialog(CNonFullScreenDialogDlg::IDD, pParent) 以及,在BEGIN_MESSAGE_MAP宏中...BEGIN_MESSAGE_MAP(CNonFullScreenDialogDlg, /*CDialog*/CNonFSDialog) //{{AFX_MSG_MAP(CNonFullScreenDialogDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP()你只需要修改这两个地方的原因是,CNonFSDialog对话框类中只覆盖了构造函数和消息映射。


