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
对话框类中只覆盖了构造函数和消息映射。