win32窗口程序的详细注释

来源:互联网 发布:曲靖哪里有卖网络机柜 编辑:程序博客网 时间:2024/04/29 00:27
// win32project.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "win32project.h"#define MAX_LOADSTRING 100// Global Variables:HINSTANCE hInst;// current instanceTCHAR szTitle[MAX_LOADSTRING];// The title bar textTCHAR szWindowClass[MAX_LOADSTRING];// the main window class name// Forward declarations of functions included in this code module:ATOMMyRegisterClass(HINSTANCE hInstance);BOOLInitInstance(HINSTANCE, int);LRESULT CALLBACKWndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACKAbout(HWND, UINT, WPARAM, LPARAM);int APIENTRY _tWinMain(HINSTANCE hInstance,//当前实例句柄                     HINSTANCE hPrevInstance,//NULL,为了兼容                     LPTSTR    lpCmdLine,//该字符串包含传递给应用程序的命令行参数                     int       nCmdShow)//指定程序的窗口应该如何显示{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine); // TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);//将szTitle赋值为字符串IDS_APP_TITLELoadString(hInstance, IDC_WIN32PROJECT, szWindowClass, MAX_LOADSTRING);//将szWindowClass赋值为字符串IDC_WIN32PROJECTMyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT));// Main message loop:while (GetMessage(&msg, NULL, 0, 0))//编写消息循环代码{if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);//请求Windows为那些与键盘有关的消息做一些转换工作DispatchMessage(&msg);//请求Windows分派消息到窗口过程,由窗口过程函数对消息进行处理}}return (int) msg.wParam;}////  FUNCTION: MyRegisterClass()////  PURPOSE: Registers the window class.////  COMMENTS:////    This function and its usage are only necessary if you want this code//    to be compatible with Win32 systems prior to the 'RegisterClassEx'//    function that was added to Windows 95. It is important to call this function//    so that the application will get 'well formed' small icons associated//    with it.//ATOM MyRegisterClass(HINSTANCE hInstance)//设计窗口类{WNDCLASSEX wcex;//创建WNDCLASSEX类型的对象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_WIN32PROJECT));//指定窗口类的图标句柄wcex.hCursor= LoadCursor(NULL, IDC_ARROW);//指定窗口类的光标句柄wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);//指定窗口类的背景画刷句柄//wcex.hbrBackground = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));//BLACK_BRUSH,DKGRAY_BRUSH, GRAY_BRUSHwcex.lpszMenuName= MAKEINTRESOURCE(IDC_WIN32PROJECT);//lpszMenuName是一个以空终止的字符串,指定菜单资源的名字。//如果该窗口没有菜单,则应该将其设为0.wcex.lpszClassName= szWindowClass;//指定窗口类的名字wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//标识某个窗口最小化时显示的图标return RegisterClassEx(&wcex);//调用RegisterClassEx()函数向系统注册窗口类}////   FUNCTION: InitInstance(HINSTANCE, int)////   PURPOSE: Saves instance handle and creates main window////   COMMENTS:////        In this function, we save the instance handle in a global variable and//        create and display the main program window.//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);//通知Windows应用程序重绘客户区   return TRUE;}////  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)////  PURPOSE:  Processes messages for the main window.////  WM_COMMAND- process the application menu//  WM_PAINT- Paint the main window//  WM_DESTROY- post a quit message and return//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...TextOut(hdc,100,100,L"Visual C++ 2010",sizeof("Visual C++ 2010")-1);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;case WM_LBUTTONDOWN:MessageBox(hWnd, TEXT("单击鼠标左键"),TEXT("提示"),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;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;}
启动VS2010,选择Visual C++,选择Win32,选择Win32项目,选择Windows应用程序,会生成一个完整的Windows应用程序。不需要添加任何代码,现在就可以编译并运行该程序。在该程序中,并没有手动编写任何代码,Win32应用程序向导就生成了一个具有菜单栏的窗口。