WTL MDI Support Class for WinCE

WTL is a very useful template library for Windows programming, especially for Pocket PC and SmartPhone (which do not even support MFC). But, when I implement a multiview application on SmartPhone and Pocket PC, a block occurred. WTL cannot create a MDI project in WinCE. And, I tried to port a MDI project on the desktop; unfortunately, I failed. So, I decided to create a MDI support class myself, god bless me. It is not such difficult as what I thought initailly.

I created a template class named CMDIBase. You can inherit it from your MainFrame class, like this:

#include "MDIBase.h"

class CMainFrame : public CFrameWindowImpl<CMainFrame>,
                   public CUpdateUI<CMainFrame>,
                   public CMessageFilter,
                   public CIdleHandler,CMDIBase<CMainFrame>

then and a msg chain in CMainFrame’s message map:

CHAIN_MSG_MAP(CMDIBase<CMainFrame>)

and used functions in CMDIBase:

InitailToolBar
SwitchView
EnableUIItem

The description is below. It also was written in the CMDIBase code file.

Description

This class is a WTL-based template class, and only for WinCE because it is not so useful if you can create a WTL MDI project on the desktop.

Note: CMDIBase must be used in a SDI WTL project.

The motivation of making this class is to add Multiple view UI support for WinCE WTL-based project.

It provides some functions for changing the view and menubar or toolbar related to the view. You can update the status of a command item in the menubar or toolbar. The most important thing is that it provides a more reasonable way to handle messages in the right place. It’s just like in an MFC MDI project; you can handle menu commands in the related view class, not like in a WTL MDI project, where you can hardly chain a message into a view and all command messages must be handled by the mainframe.

The following list shows the main functions in CMDIBase:

  • InitailToolBar: It just called a create toolbar function and a movewindow function. If it does not call movewindow, the mainframe cannot be displayed correctly.
  • SwitchView: Switches to the view you want to show, and loads the related menu and toolbar. menuID and toolbarID must be uniform.
  • EnableUIItem: Set the menu item and toolbar item to enable/disable.

CUIUpdate class does not work for these, but it can set the check state correctly. So, the setcheckstatus function is not added in CMDIBase.

More by Author

Must Read