Windows应用程序组成
所有的Windows应用程序必须包含两个基本函数:
(1)应用程序主函数WinMain()
WinMain()函数定义了窗口句柄,创建初始化窗口并启动一个消息循环。
(2)窗口处理函数WinProc()
WinProc()函数处理所有从操作系统传递到窗口的消息。每一个窗口,无论是简单的或复杂的,都要有一个窗口处理函数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 包含程序中所需的数据类型和数据类型的定义
#include <windows.h>
// 窗口函数说明
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//初始化窗口类
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wc;
char szApplicationName[]="EXAM";//窗口标题名
// 定义窗口类
wc.style=CS_HREDRAW|CS_VREDRAW;//定义窗口类型为当窗口大小变化时窗口重画
wc.lpfnWndProc=WndProc; //定义窗口处理函数
wc.cbClsExtra=0; //定义窗口类无扩展
wc.cbWndExtra=0; //窗口实例无扩展
wc.hInstance=hInstance; //当前实例句柄
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为默认图标
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景为白色
wc.lpszMenuName=NULL; //窗口中无菜单
wc.lpszClassName=szApplicationName; //定义窗口类名称
//注册窗口类
RegisterClass(&wc);
// 创建窗口
hwnd=CreateWindow
(
szApplicationName, //窗口类名
szApplicationName, //窗口的标题名
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance, //创建此窗口的应用程序的当前句柄
NULL
);
//显示窗口
ShowWindow(hwnd,nCmdShow);
//绘制用户处
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
#include <windows.h>
// 窗口函数说明
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//初始化窗口类
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wc;
char szApplicationName[]="EXAM";//窗口标题名
// 定义窗口类
wc.style=CS_HREDRAW|CS_VREDRAW;//定义窗口类型为当窗口大小变化时窗口重画
wc.lpfnWndProc=WndProc; //定义窗口处理函数
wc.cbClsExtra=0; //定义窗口类无扩展
wc.cbWndExtra=0; //窗口实例无扩展
wc.hInstance=hInstance; //当前实例句柄
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为默认图标
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景为白色
wc.lpszMenuName=NULL; //窗口中无菜单
wc.lpszClassName=szApplicationName; //定义窗口类名称
//注册窗口类
RegisterClass(&wc);
// 创建窗口
hwnd=CreateWindow
(
szApplicationName, //窗口类名
szApplicationName, //窗口的标题名
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance, //创建此窗口的应用程序的当前句柄
NULL
);
//显示窗口
ShowWindow(hwnd,nCmdShow);
//绘制用户处
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
//窗口函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
程序运行效果如图: