第一节 Windows 程序的解析
Windows程序的组成
Windows程序=API的调用+资源的管理=窗口类的创建、注册、显示+资源的显示、功能+回调函数的编写+消息循环。
windows程序的基本架构是
源文件
入口
//头文件
#include<xxxxxxx>
//函数的定义
//主函数
int WINAPI WinMain(HINSTANCE hInstance,……)
{
窗口类创建;
窗口类的注册;
窗口类的显示;
消息队列;
return……;
}
回调函数的定义
类外定义的类源文件:
类.cpp
头文件:
resource.h(在创建资源文件.rc时自动创建),并随着.rc通过“添加资源”方式的更新而更新,提供资源的唯一标识符。
各种类.h (根据需要自己设置)
资源文件:
resource.rc
通过创建而创建,可通过VS内添加资源而定义,也可以自行编写,但前者不需要自己更新头文件,后者需要自己更新头文件。
现根据微软提供的窗体应用程序解析这个结构。
源文件
// WindowsProject2.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"//类的头文件
#include "WindowsProject2.h"资源的头文件
#define MAX_LOADSTRING 100//是标题资源的标识符
// 全局变量:
HINSTANCE
hInst; // 当前实例(窗口)句柄
WCHAR
szTitle[MAX_LOADSTRING]; // 标题栏文本
WCHAR
szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
//注册窗体,在其中完成窗体的设计与注册
BOOL InitInstance(HINSTANCE, int);//初始化实例(窗口)
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);//“关于”窗口的函数
//主函数,注意这里是wWinMain说明程序是用Unicode编码的,
//因此要注意不少函数被重新定义了
//如MessageBox 里面的Constant Char 可以通过_T()来转化为LPCWSTR
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,/*实例句柄*/
_In_opt_ HINSTANCE hPrevInstance,/*父亲实例句柄*/
_In_ LPWSTR lpCmdLine,/*通过命令行启动时,自带的参数,是一个特殊的字符串型*/
_In_ int nCmdShow/*是一种可利用或运算来增添特性的int,其中每一位的0/1都代表一种特性*/)
{
//以下两行都是告诉编译器我已经用过了这个参数防止warning
//如果要用到以下两种参数就需要进一步地定义
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此处放置代码。
// 初始化全局字符串
//把IDS_APP_TITLE加载到szTitle中,缓冲区大小为MAX_LOADSTRING
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadStringW(hInstance, IDC_WINDOWSPROJECT2,
szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化: