一个简洁的Win32程序框架

来源:互联网 发布:淘宝千禧银楼是真的吗 编辑:程序博客网 时间:2024/05/06 21:58

摘自:Programming Windows Embedded CE 6.0 Developer Reference

作者:Douglas Boling

HelloCE.cpp

——————————————————————————————————————

//==================================================================

// HelloCE - A simple application for Windows CE

// Written for the book Programming Windows CE

// Copyright (C) 2007 Douglas Boling

//==================================================================

#include <windows.h>                 // For all that Windows stuff

#include "helloce.h"                 // Program-specific stuff

 

//----------------------------------------------------------------------

// Global data

 

const TCHAR szAppName[] = TEXT("HelloCE");

HINSTANCE hInst;                     // Program instance handle

 

// Message dispatch table for MainWindowProc

const struct decodeUINT MainMessages[] = {

    WM_PAINT, DoPaintMain,

    WM_DESTROY, DoDestroyMain,

};

 

//==================================================================

// Program entry point

//

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    LPWSTR lpCmdLine, int nCmdShow) {

    MSG msg;

    int rc = 0;

    HWND hwndMain;

 

    // Initialize this instance.

    hwndMain = InitInstance (hInstance, lpCmdLine, nCmdShow);

    if (hwndMain == 0) return 0x10;

 

    // Application message loop

    while (GetMessage (&msg, NULL, 0, 0)) {

        TranslateMessage (&msg);

        DispatchMessage (&msg);

    }

    // Instance cleanup

    return TermInstance (hInstance, msg.wParam);

}

//----------------------------------------------------------------------

// InitInstance - Instance initialization

//

HWND InitInstance (HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) {

    WNDCLASS wc;

    HWND hWnd;

 

    // Save program instance handle in global variable.

    hInst = hInstance;

 

#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)

    // If Windows Mobile, only allow one instance of the application

    hWnd = FindWindow (szAppName, NULL);

    if (hWnd) {

        SetForegroundWindow ((HWND)(((DWORD)hWnd) | 0x01));   

        return 0;

    }

#endif

 

    // Register application main window class.

    wc.style = 0;                             // Window style

    wc.lpfnWndProc = MainWndProc;             // Callback function

    wc.cbClsExtra = 0;                        // Extra class data

    wc.cbWndExtra = 0;                        // Extra window data

    wc.hInstance = hInstance;                 // Owner handle

    wc.hIcon = NULL,                          // Application icon

    wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor

    wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

    wc.lpszMenuName = NULL;                   // Menu name

    wc.lpszClassName = szAppName;             // Window class name

 

    if (RegisterClass (&wc) == 0) return 0;

 

    // Create main window.

    hWnd = CreateWindow (szAppName,           // Window class

                         TEXT("HelloCE"),     // Window title

                         // Style flags

                         WS_VISIBLE | WS_CAPTION | WS_SYSMENU,

                         CW_USEDEFAULT,       // x position

                         CW_USEDEFAULT,       // y position

                         CW_USEDEFAULT,       // Initial width

                         CW_USEDEFAULT,       // Initial height

                         NULL,                // Parent

                         NULL,                // Menu, must be null

                         hInstance,           // Application instance

                         NULL);               // Pointer to create

                                              // parameters

    if (!IsWindow (hWnd)) return 0;  // Fail code if not created.

 

    // Standard show and update calls

    ShowWindow (hWnd, nCmdShow);

    UpdateWindow (hWnd);

    return hWnd;

}

//----------------------------------------------------------------------

// TermInstance - Program cleanup

//

int TermInstance (HINSTANCE hInstance, int nDefRC) {

    return nDefRC;

}

//==================================================================

// Message handling procedures for main window

//

//----------------------------------------------------------------------

// MainWndProc - Callback function for application window

//

LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam,

                              LPARAM lParam) {

    INT i;

    //

    // Search message list to see if we need to handle this

    // message.  If in list, call procedure.

    //

    for (i = 0; i < dim(MainMessages); i++) {

        if (wMsg == MainMessages[i].Code)

            return (*MainMessages[i].Fxn)(hWnd, wMsg, wParam, lParam);

    }

    return DefWindowProc (hWnd, wMsg, wParam, lParam);

}

//----------------------------------------------------------------------

// DoPaintMain - Process WM_PAINT message for window.

//

LRESULT DoPaintMain (HWND hWnd, UINT wMsg, WPARAM wParam,

                     LPARAM lParam) {

    PAINTSTRUCT ps;

    RECT rect;

    HDC hdc;

 

    // Get the size of the client rectangle

    GetClientRect (hWnd, &rect);

 

    hdc = BeginPaint (hWnd, &ps);

    DrawText (hdc, TEXT ("Hello Windows CE!"), -1, &rect,

              DT_CENTER | DT_VCENTER | DT_SINGLELINE);

 

    EndPaint (hWnd, &ps);

    return 0;

}

//----------------------------------------------------------------------

// DoDestroyMain - Process WM_DESTROY message for window.

//

LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam,

                       LPARAM lParam) {

    PostQuitMessage (0);

    return 0;

}

——————————————————————————————————————

HelloCE.h

——————————————————————————————————————

//================================================================

// Header file

//

// Written for the book Programming Windows CE

// Copyright (C) 2007 Douglas Boling

//================================================================

// Returns number of elements

#define dim(x) (sizeof(x) / sizeof(x[0]))

 

//----------------------------------------------------------------------

// Generic defines and data types

//

struct decodeUINT {                            // Structure associates

    UINT Code;                                 // messages

                                               // with a function.

    LRESULT (*Fxn)(HWND, UINT, WPARAM, LPARAM);

};

struct decodeCMD {                             // Structure associates

    UINT Code;                                 // menu IDs with a

    LRESULT (*Fxn)(HWND, WORD, HWND, WORD);    // function

};

 

//----------------------------------------------------------------------

// Function prototypes

//

HWND InitInstance (HINSTANCE, LPWSTR, int);

int TermInstance (HINSTANCE, int);

 

// Window procedures

LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);

 

// Message handlers

LRESULT DoPaintMain (HWND, UINT, WPARAM, LPARAM);

LRESULT DoDestroyMain (HWND, UINT, WPARAM, LPARAM);

——————————————————————————————————————

JOYZML(朱铭雷)

原创粉丝点击