#include "stdafx.h"
#include <windows.h>
//6.处理窗口过程
LRESULT CALLBACK WindowProc(
HWND hwnd,//消息所属的窗口句柄
UINT uMsg,//具体的消息名称 WX_XXXX消息名
WPARAM wParam,//键盘附加消息
LPARAM lParam//鼠标附加消息
)
{
//返回值用默认处理方式
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(
HINSTANCE hInstance, //应用程序实例句柄
HINSTANCE hPrevInstance, //在win32环境下参数一般为null不起作用
LPSTR lpCmdLine, //char * argv[]
int nShowCmd) //显示命令 最大化 最小化 正常
{
/*
1.设计窗口
2.注册窗口
3.创建窗口
4.显示更新
5.通过循环取消息
6.处理消息(窗口过程)
*/
//1.设计窗口
WNDCLASS wc;
wc.cbClsExtra = 0;//类的额外内存
wc.cbClsExtra = 0;//窗口额外内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景
wc.hCursor = LoadCursor(NULL, IDC_IBEAM);//设置光标 如果第一个参数为NULL 代表使用系统提供的光标
wc.hIcon = LoadIcon(NULL, IDI_EXCLAMATION);//图标 如果第一个参数为NULL 代表使用系统提供的图标
wc.hInstance = hInstance;//应用程序实例句柄 传入WinMain中的形参即可
wc.lpfnWndProc = WindowProc;//回调函数 窗口过程
wc.lpszClassName = TEXT("wc");//指定窗口类名称
wc.lpszMenuName = NULL;//菜单名称
wc.style = 0;//显示风格 0代表默认
//2.注册窗口
RegisterClass(&wc);
//3.创建窗口
/*
lpClassName, 类名
lpWindowName, 标题名
dwStyle, WS_OVERLAPPEDWINDOW 混合风格
x, 显示坐标 CW_USEDEFAULT 默认值
y, 显示坐标 CW_USEDEFAULT 默认值
nWidth, 宽 CW_USEDEFAULT 默认值
nHeight, 高 CW_USEDEFAULT 默认值
hWndParent, 父窗口 NULL
hMenu, 菜单 NULL
hInstance, 实际句柄 hInstance
lpParam 附加值 NULL
*/
HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("wc"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//4.显示更新
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
//5.通过循环取消息
/*
HWND hwnd;z主窗口句柄
UINT message; 具体消息名称
WPARAM wParam; 附加消息 键盘消息
LPARAM lParam; 附加消息 鼠标消息
DWORD time; 消息产生时间
POINT pt; 附加消息 鼠标消息 坐标xy
*/
MSG msg;
while (1)
{
/*
_Out_ LPMSG lpMsg, 消息
_In_opt_ HWND hWnd, 捕获窗口 NULL代表捕获所有窗口
_In_ UINT wMsgFilterMin, 最大和最小的过滤的消息 一般填入
_In_ UINT wMsgFilterMax 填代表捕获所有消息
*/
if (GetMessage(&msg, NULL, 0, 0) == FALSE)
{
break;
}
//翻译消息
TranslateMessage(&msg);
//不为false 分发消息
DispatchMessage(&msg);
}
//6.处理消息(窗口过程)
return 0;
}