在VS2013中建立末模版工程会生成下面这些文件:
External Dependencies包含要用到的所有没有加入工程的文件;
Header Files包含工程中要用到的头文件;
Resource Files各种资源文件;
Source Files各种cpp原文件。
头文件参数
Header Files/resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Win32Project4.rc
//
#define IDS_APP_TITLE 103
#define IDR_MAINFRAME 128
#define IDD_WIN32PROJECT4_DIALOG 102
#define IDD_ABOUTBOX 103
#define IDM_ABOUT 104
#define IDM_EXIT 105
#define IDI_WIN32PROJECT4 107
#define IDI_SMALL 108
#define IDC_WIN32PROJECT4 109
#define IDC_MYICON 2
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 130
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 110
#endif
#endif
Header Files/stdafx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
Header Files/targetver.h
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
#include <SDKDDKVer.h>
Header Files/Win32Project4.h
#pragma once
#include "resource.h"
CPP文件参数
Source Files/atdafx.cpp
// stdafx.cpp : source file that includes just the standard includes
// Win32Project4.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
Source Files/<工程名>.cpp
这个文件中有5个函数(一个主函数),3个结构体,1个宏定义。
下面是参数&声明定义:
// Win32Project4.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "Win32Project4.h"
#define MAX_LOADSTRING 100
// 各种全局变量
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文字
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 模块函数声明
// 注册该窗口应用程序,参数:窗口句柄
ATOM MyRegisterClass(HINSTANCE hInstance);
// 窗口消息回调函数,保存句柄并创建主窗口 成功返回true
BOOL InitInstance(HINSTANCE, int);
// 获取主窗口消息
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// 处理About对话框的各种消息
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
主函数_tWinMain共接收4个参数,详情见注释:
int APIENTRY _tWinMain(
_In_ HINSTANCE hInstance, // 应用程序当前实例句柄
_In_opt_ HINSTANCE hPrevInstance, // 应用实例指向其他实例的句柄
_In_ LPTSTR lpCmdLine, // 指向应用程序命令行参数的指针
_In_ int nCmdShow // 指定窗口显示方式
)
{
UNREFERENCED_PARAMETER(hPrevInstance); // 禁止显示hPrevInstance变量未使用的警告
UNREFERENCED_PARAMETER(lpCmdLine); // 禁止显示lpCmdLine变量未使用的警告
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); // 初始化全局字符串
LoadString(hInstance, IDC_WIN32PROJECT4, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance); // 装载字符串表资源
// 应用初始化,初始化失败返回 FALSE
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
//LoadAccelerators调入加速键表
//hInstance模块的一个事例的句柄
//(LPCTSTR)IDC_FIRSTVIEW指向一个以空结尾的字符串的指针,
//该字符串包含了即将调入的加速键表的名字
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT4));
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
//TranslateAccelerator 翻译加速键表。该函数处理菜单
//命令中的加速键。如果失败则执行TranslateMessage,DispatchMessage
//msg.hwnd 窗口句柄,翻译该窗口的消息
//hAccelTable 加速键表句柄
//&msg MSG结构体指针
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg); // 将虚拟键消息转换为字符消息
DispatchMessage(&msg); // 传送消息给窗口程序
}
}
// 主消息循环结束
return (int) msg.wParam; // 返回退出相关消息
}
MyRegisterClass用来注册窗口应用程序。定义见下:
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX); // 窗口类大小
wcex.style = CS_HREDRAW | CS_VREDRAW; // 窗口类型
wcex.lpfnWndProc = WndProc; // 指定窗口处理函数为WndProc
wcex.cbClsExtra = 0; // 窗口类扩展
wcex.cbWndExtra = 0; // 窗口实例扩展
wcex.hInstance = hInstance; // 当前实例句柄
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT4)); // 窗口图标
wcex.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口中使用的光标类型
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // 窗口背景色
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT4); // 窗口中菜单样式
wcex.lpszClassName = szWindowClass; // 窗口类名
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); // 设置窗口小图标
return RegisterClassEx(&wcex); // 注册窗口类,注册成功返回窗口类标识号,失败返回NULL
}
WinProc函数定义:
//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - 当用户从菜单选中一个命令项目、
// 当一个控件发送通知消息给去父窗口
// 或者按下一个快捷键将发送 WM_COMMAND 消息
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出程序消息
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;
}
WndProc函数定义:
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;
}