windows 编程入门(1)

新建一个win32 工程,自动生成的代码如下:

 

#include "stdafx.h"

#include "Generic.h"

#define MAX_LOADSTRING 100

// Global Variables:

HINSTANCE hInst;                                               // current instance

TCHAR szTitle[MAX_LOADSTRING];                  // The title bar text

TCHAR szWindowClass[MAX_LOADSTRING];  // the main window class name

 

// Forward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

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

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

 

int APIENTRY _tWinMain(HINSTANCE hInstance,

                                             HINSTANCE hPrevInstance,

                                             LPTSTR lpCmdLine,

                                             int nCmdShow)

{

        UNREFERENCED_PARAMETER(hPrevInstance);

        UNREFERENCED_PARAMETER(lpCmdLine);

        // TODO: Place code here.

        MSG msg;

        HACCEL hAccelTable;

       // Initialize global strings

       LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

       LoadString(hInstance, IDC_GENERIC, szWindowClass, MAX_LOADSTRING);

       MyRegisterClass(hInstance);

       // Perform application initialization:

       if (!InitInstance (hInstance, nCmdShow))

       {

             return FALSE;

       }

       hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_GENERIC));

       // Main message loop:

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

       {

              if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

              {

                    TranslateMessage(&msg);  //翻译键盘消息

                    DispatchMessage(&msg);  // 将消息传给窗口函数去处理

              }

       }

      return (int) msg.wParam;              // 传回PostQuitMessage的参数

}

 

ATOM MyRegisterClass(HINSTANCE hInstance)

{

       WNDCLASSEX wcex;

       wcex.cbSize = sizeof(WNDCLASSEX);

       wcex.style = CS_HREDRAW | CS_VREDRAW;

       wcex.lpfnWndProc = WndProc;

       wcex.cbClsExtra = 0;

       wcex.cbWndExtra = 0;

       wcex.hInstance = hInstance;

       wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_GENERIC));

       wcex.hCursor = LoadCursor(NULL, IDC_ARROW);

       wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

       wcex.lpszMenuName = MAKEINTRESOURCE(IDC_GENERIC);

       wcex.lpszClassName = szWindowClass;

       wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

       return RegisterClassEx(&wcex);

}

 

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

       HWND hWnd;

       hInst = hInstance; // Store instance handle in our global variable

       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

       if (!hWnd)

       {

             return FALSE;

       }

       ShowWindow(hWnd, nCmdShow);

       UpdateWindow(hWnd);

       return TRUE;

}

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

       int wmId, wmEvent;

       PAINTSTRUCT ps;

       HDC hdc;

       switch (message)

       {

            case WM_COMMAND:

                     wmId = LOWORD(wParam);

                    wmEvent = HIWORD(wParam);

                    // Parse the menu selections:

                    switch (wmId)

                    {

                         case IDM_ABOUT:

                                   DialogBox(hInst,

                                                     MAKEINTRESOURCE(IDD_ABOUTBOX),

                                                     hWnd,     // 父窗口

                                                     About      

                                                   );

                                   break;

                         case IDM_EXIT:

                                  DestroyWindow(hWnd);

                                  break;

                         default:

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

                    }

                   break;

            case WM_PAINT:

                      hdc = BeginPaint(hWnd, &ps);

                      // TODO: Add any drawing code here...

                      EndPaint(hWnd, &ps);

                      break;

            case WM_DESTROY:

                      PostQuitMessage(0);

                      break;

            default:

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

        }

        return 0;

}

 

// Message handler for about box.

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

       UNREFERENCED_PARAMETER(lParam);

       switch (message)

       {

            case WM_INITDIALOG:

                      return (INT_PTR)TRUE;// TRUE 已经处理过的消息 

            case WM_COMMAND:

                     if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

                     {

                           EndDialog(hDlg, LOWORD(wParam));

                           return (INT_PTR)TRUE;

                     }

                     break;

        }

        return (INT_PTR)FALSE;     // FALSE 未处理的消息 

}

 

MFC程序  以消息为基础,以事件驱动之

#define CALLBACK    __stdcall

(1) 参数从右向左压入堆

(2) 函数自身修改堆

(3) 函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺,如:_fun@8

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值