Home Index  | Back

New Page 1
Lesson 1 -Building Your First Windows Application

1.1 : Creating a Windows Application

1.2 : Creating a Dialog-Based Application

1.3 : Creating DLLs, Console Applications, and More

1.4 : Changing Your AppWizard Decisions
 1.5 : Understanding AppWizard’s Code
 1.6 : Understanding a MDI Application
 1.7 : Understanding the Components of a Dialog-Based Application

Lesson 2 - Dialogs and Controls

2.1 : Understanding Dialog Boxes

2.2 : Creating a Dialog Box Resource

 2.3 : Writing a Dialog Box Class
 2.4 : Using the Dialog Box Class
Lesson 3 - Messages and Commands

3.1 : Understanding Message Routing

3.2 : Understanding Message Loops

 3.3 : Reading Message Maps
 3.4 : Learning How ClassWizard Helps You Catch Messages
 3.5 : Recognizing Messages
 3.6 : Understanding Commands
 3.7 : Understanding Command Updates
 3.8 : Learning How ClassWizard Helps You Catch Commands and Command Updates

Lesson 4 - Documents and Views

4.1 : Understanding the Document Class

4.2 : Understanding the View Class

4.3 : Creating the Rectangles Application

 4.4 : Other View Classes

4.5 : Document Templates, Views, and Frame Windows

Lesson 5 - Drawing on the Screen

5.1 :Understanding Device Contexts

 5.2 : Introducing the Paint1 Application
 5.3 : Building the Paint1 Application
 5.4 : Scrolling Windows
 5.5 : Building the Scroll Application
Lesson 6 - Building a Complete Application: ShowString

6.1 : Building an Application That Displays a String

 6.2 : Building the ShowString Menus
 6.3 : Building the ShowString Dialog Boxes
 6.4 : Making the Menu Work
 6.5 : Making the Dialog Box Work
 6.6 : Adding Appearance Options to the Options Dialog Box
Lesson 7 -  Status Bars and Toolbars

7.1 : Working with Toolbars

 7.2 : Working with Status Bars
Lesson 8 - Common Controls

8.1 : The Progress Bar Control

 8.2 : The Up-Down Control
 8.3 : The Image List Control
 8.4 : The List View Control
 8.5 : The Tree View Control
 8.6 : The Rich Edit Control
 8.7 : The Date Picker Control
 8.8 : Month Calendar Control
 8.9 : Scrolling the View
Lesson 9 - Property Pages and Sheets

9.1 : Introducing Property Sheets

 9.2 : Creating the Property Sheet Demo Application
 9.3 : Running the Property Sheet Demo Application
Lesson 10 - ActiveX Concepts

10.1 : The Purpose of ActiveX

10.2 : Object Linking

10.3 : Object Embedding

 10.4 : Containers and Servers
 10.5 : Toward a More Intuitive User Interface
 10.6 : The Component Object Model  

10.7 : Automation

 10.8 : ActiveX Controls

Lesson 11 -  Building an ActiveX Control

11.1 : Creating a Rolling-Die Control

11.2 : Displaying the Current Value

11.3 : Reacting to a Mouse Click and Rolling the Die 

 11.4 : Creating a Better User Interface
 11.5 : Generating Property Sheets
Lesson 12 - Database Access

12.1 : Understanding Database Concepts

12.2 : Creating an ODBC Database Program

 12.3 : Choosing Between ODBC and DAO
 12.4 : OLE DB

Lesson - 1 : Building Your First Windows Application

1.6 : Understanding a Multiple Document Interface Application

A multiple document interface application also has menus, and it enables the user to have more than one document open at once. This section presents the code that is generated when you choose an MDI application with no database or compound document support, but instead with a toolbar, a status bar, Help, 3D controls, source file comments, and the MFC library as a shared DLL. As with the SDI application, these are the defaults after Step 1. The focus here is on what differs from the SDI application in the previous section.

Five classes have been created for you. For the application FirstMDI, they are

  • CAboutDlg, a dialog class for the About dialog box

  • CFirstMDIApp, a CWinApp class for the entire application

  • CFirstMDIDoc, a document class

  • CFirstMDIView, a view class

  • CMainFrame, a frame class

  • The App class header is shown in Listing 1.3.

    Listing 1.3 FirstMDI.h—Main Header File for the FirstMDI Application

    // FirstMDI.h : main header file for the FIRSTMDI application

    //

    #if !defined(AFX_FIRSTMDI_H__CDF38D9E
    _8718_11D0_B02C_0080C81A3AA2__INCLUDED_)

    #define AFX_FIRSTMDI_H__CDF38D9E_8718
    _11D0_B02C_0080C81A3AA2__INCLUDED_

    #if _MSC_VER >= 1000

    #pragma once

    #endif // _MSC_VER >= 1000

    #ifndef __AFXWIN_H__

    #error include ‘stdafx.h’ before including this file for PCH

    #endif

    #include "resource.h" // main symbols

     

    //////////////////////////////////////////

    // CFirstMDIApp:

    // See FirstMDI.cpp for the implementation of this class

    //

    class CFirstMDIApp : public CWinApp

    {

    public:

    CFirstMDIApp();

    // Overrides

    // ClassWizard generated virtual function overrides

    //{{AFX_VIRTUAL(CFirstMDIApp)

    public:

    virtual BOOL InitInstance();

    //}}AFX_VIRTUAL

    // Implementation

    //{{AFX_MSG(CFirstMDIApp)

    afx_msg void OnAppAbout();

     

    // NOTE - The ClassWizard will add and remove member functions here. DO NOT EDIT what you see in these blocks of generated code !

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

    };

    ///////////////////////////////////////

    //{{AFX_INSERT_LOCATION}}

    // Microsoft Developer Studio will insert additional declarations immediately

    // before the previous line.

    #endif //!defined(AFX_FIRSTMDI_H__CDF38D9E
    _8718_11D0_B02C_0080C81A3AA2__INCLUDED_)

    How does this differ from FirstSDI.h? Only in the classnames. The constructor is also the same as before. OnAppAbout() is just like the SDI version. How about InitInstance()? It is in Listing 1.4.

    Listing 1.4 CFirstMDIApp::InitInstance()

    BOOL CFirstMDIApp::InitInstance()

    {

    AfxEnableControlContainer();

    // Standard initialization

    // If you are not using these features and want to reduce the size

    // of your final executable, you should remove from the following

    // the specific initialization routines you don’t need.

    #ifdef _AFXDLL

    Enable3dControls(); // Call this when using MFC in a shared DLL

    #else

    Enable3dControlsStatic(); // Call this when linking to MFC statically

    #endif

    // Change the registry key under which your settings are stored.

    // You should modify this string to be something appropriate,

    // such as the name of your company or organization.

    SetRegistryKey(_T("Local AppWizard-Generated Applications"));

    LoadStdProfileSettings(); // Load standard INI file options (including // MRU)

    // Register the application’s document templates. Document templates

    // serve as the connection between documents, frame windows, and views.

    CMultiDocTemplate* pDocTemplate;

    pDocTemplate = new CMultiDocTemplate(

    IDR_FIRSTMTYPE,

    RUNTIME_CLASS(CFirstMDIDoc),

    RUNTIME_CLASS(CChildFrame),// custom MDI child frame

    RUNTIME_CLASS(CFirstMDIView));

    AddDocTemplate(pDocTemplate);

    // create main MDI Frame window

    CMainFrame* pMainFrame = new CMainFrame;

    if (!pMainFrame->LoadFrame(IDR_MAINFRAME))

    return FALSE;

    m_pMainWnd = pMainFrame;

     

    // Parse command line for standard shell commands, DDE, file open

    CCommandLineInfo cmdInfo;

    ParseCommandLine(cmdInfo);

    // Dispatch commands specified on the command line

    if (!ProcessShellCommand(cmdInfo))

    return FALSE;

    // The main window has been initialized, so show and update it.

    pMainFrame->ShowWindow(m_nCmdShow);

    pMainFrame->UpdateWindow();

    return TRUE;

    }

    What’s different here? Using WinDiff can help. WinDiff is a tool that comes with Visual C++ and is reached from the Tools menu.Using WinDiff to compare the FirstSDI and FirstMDI versions of InitInstance() confirms that, other than the classnames, the differences are

  • The MDI application sets up a CMultiDocTemplate and the SDI application sets up a CSingleDocTemplate.

  • The MDI application sets up a mainframe window and then shows it; the SDI application does not.

  • This shows a major advantage of the Document/View paradigm: It enables an enormous design decision to affect only a small amount of the code in your project and hides that decision as much as possible.

    Next>>
     
    © Dewsoft Overseas