A Non Full-Screen Dialog Class for Windows CE






4.92/5 (17 votes)
This article describes a non full screen dialog class that does not switch to full screen when the SIP is activated.
Introduction
Showing a non full screen dialog under pocket pc is actually pretty easy. All you have to do is set the m_bFullScreen
member of the CDialog class to FALSE
in your dialog's constructor. It's after making a dialog non full screen that the problem begins. When you invoke any one of the SIP components, i.e. Keyboard, Transcriber, Block Recognizer etc. a dialog created in the above process will loose all its posture and will go full screen! To stop this erratic behavior, all you need to do is handle two windows messages, WM_ACTIVATE
and WM_SETTINGCHANGE
, and just call their default implementation in CWnd
.
So, to put it all together, I've written a dialog class that handles all these, so that you don't have to hard code all these all the time whenever you make a non full screen dialog box.
How to use
To instantly turn any CDialog
derived class into a non full screen dialog, just do the following:
- Add
CNonFSDialog
header and source,NonFSDialog.h
andNonFSDialog.cpp
to your project - Include the
CNonFSDialog
headerNonFSDialog.h
in your dialog#include "NonFSDialog.h"
- Instead of inheriting from
CDialog
, you'll have to inherit fromCNonFSDialog
.// Assuming dialog class name is CNonFullScreenDialogDlg class CNonFullScreenDialogDlg : public CNonFSDialog { ...... }
- Now if you are in a search-replace mood ;-), replace all occurrences of
CDialog
in your dialogs source (cpp) withCNonFSDialog
. But if you are in a selective mode, you could only change the reference to theCDialog
class in the ctor...///////////////////////////////////////////////////////////////////////////// // CNonFullScreenDialogDlg dialog CNonFullScreenDialogDlg::CNonFullScreenDialogDlg(CWnd* pParent /*=NULL*/) : /*CDialog*/CNonFSDialog(CNonFullScreenDialogDlg::IDD, pParent)
and, in theBEGIN_MESSAGE_MAP
macro...BEGIN_MESSAGE_MAP(CNonFullScreenDialogDlg, /*CDialog*/CNonFSDialog) //{{AFX_MSG_MAP(CNonFullScreenDialogDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP()
The reason you can get away by modifying just these two is cause only the constructor and message map have been overridden in theCNonFSDialog
dialog class.