65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows CE 的非全屏对话框类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (17投票s)

2002年9月8日

BSD

1分钟阅读

viewsIcon

111889

downloadIcon

385

本文描述了一个非全屏对话框类,该类在激活 SIP 时不会切换到全屏模式。

引言

在 Pocket PC 下显示非全屏对话框实际上非常简单。你只需要在对话框的构造函数中将 CDialog 类的 m_bFullScreen 成员设置为 FALSE。问题在于在使对话框非全屏之后。当你调用任何一个 SIP 组件(例如键盘、听写器、手写识别器等)时,以上述过程创建的对话框将失去其姿态并切换到全屏!为了阻止这种不稳定的行为,你只需要处理两个窗口消息,WM_ACTIVATEWM_SETTINGCHANGE,并简单地调用 CWnd 中的默认实现。

因此,为了概括一下,我已经编写了一个对话框类来处理所有这些问题,这样你就无需每次创建非全屏对话框时都硬编码所有这些内容。

如何使用

要立即将任何 CDialog 派生类转换为非全屏对话框,只需执行以下操作:

  1. CNonFSDialog 头文件和源代码(NonFSDialog.hNonFSDialog.cpp)添加到你的项目中
  2. 在你的对话框中包含 CNonFSDialog 头文件 NonFSDialog.h
     #include "NonFSDialog.h"
    
  3. 你必须从 CNonFSDialog 继承,而不是从 CDialog 继承。
    // Assuming dialog class name is CNonFullScreenDialogDlg
    class CNonFullScreenDialogDlg : public CNonFSDialog
    {
    	......
    }
    
  4. 现在,如果你想进行搜索和替换 ;-),请在对话框的源代码(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 对话框类中只覆盖了构造函数和消息映射。
© . All rights reserved.