所有的Windows应用程序必须包含两个基本函数:
(1)应用程序主函数WinMain()
WinMain()函数定义了窗口句柄,创建初始化窗口并启动一个消息循环。
(2)窗口处理函数WinProc()
WinProc()函数处理所有从操作系统传递到窗口的消息。每一个窗口,无论是简单的或复杂的,都要有一个窗口处理函数。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.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 ;
}
程序运行效果如图: