窗口处理函数
//LRESULT : long
//UINT : unsigned int
//WPARAM : unsigned int
//LPARAM : long
//LPSTR : char*
//LPCWSTR : const wchar_t *
//LPCTSTR : const wchar_t * (Unicode)
//WORD : unsigned short
//DWORD : unsigned long
#include<Windows.h>
#include"resource.h"
//窗口处理函数
//第一个参数:当前窗口句柄
//第二个参数:消息类型
//第三个参数:附加信息/附加参数
//第四个参数:附加信息/附加参数
LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{
//创建一个窗口
//流程
//1.设计窗口类
/*
typedef struct tagWNDCLASSW {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCWSTR lpszMenuName;
LPCWSTR lpszClassName;
}
WNDPROC 函数指针类型
//WNDPROC typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
*/
//lpClassName
wchar_t szAppClassName[]=TEXT("我的windows程序");
WNDCLASS wc;
wc.style =CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; //窗口类的风格
wc.lpfnWndProc =WindowProc; //窗口回调函数/窗口处理函数
wc.cbClsExtra =0; //窗口类的附加内存大小
wc.cbWndExtra =0; //窗口附加内存大小
wc.hInstance =hInstance; //当前应用程序实例句柄
wc.hIcon =LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); //图标句柄,需要加载图标图片
wc.hCursor =LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1)); //光标句柄,需要加载光标图片
wc.hbrBackground=CreateSolidBrush(RGB(255,255,0));//红,绿,蓝 0->255 0:最暗, 255:最亮, RGB(0,0,0):黑色, RGB(255,255,255):白色
wc.lpszMenuName =NULL; //菜单名
wc.lpszClassName=szAppClassName; //窗口类型名 Spy++
//2.注册窗口类
//ATOM
if(0==RegisterClass(&wc))
{
MessageBox(NULL,TEXT("此程序不能运行在windows NT平台"),TEXT("提示"),MB_OK);
return 0;
}
//3.创建窗口
//WS:Window style
HWND hWnd =CreateWindow(
szAppClassName, //窗口类型名
TEXT("这是我的第一个Windows窗口程序"), //窗口左上角标题
WS_BORDER | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SYSMENU, //窗口的风格
200, 300, //窗口左上角坐标
800, 600, //窗口的宽和高
NULL, //父窗口句柄
NULL, //菜单句柄
hInstance, //应用程序实例句柄
NULL //创建窗口的附加参数,WM_CREATE消息,lParam来接受这个参数
);
if(hWnd==NULL)
{
MessageBox(NULL,TEXT("创建窗口失败"),TEXT("提示"),MB_OK);
return 0;
}
//4.显示窗口
//SW_SHOW:原来在什么位置,就在什么位置显示
//SW_SHOWMAXIMIZED:最大化显示
//SW_SHOWMINIMIZED:最小化显示
//SW_SHOWNORMAL:正常显示
//SW_HIDE:隐藏运行
ShowWindow(hWnd,SW_SHOW);
//5.更新窗口 //窗口显示的时候,重新绘制一下
UpdateWindow(hWnd);
//6.消息循环
/*typedef struct tagMSG {
HWND hwnd; //消息发向窗口的窗口句柄
UINT message; //消息编号
WPARAM wParam; //附加信息
LPARAM lParam; //附加信息
DWORD time; //消息放入消息队列的时间
POINT pt; //消息放入消息队列时鼠标坐标
}*/
//Windows程序都是通过消息机制驱动运行
//GetMessage:什么时候返回FALSE
//当获取到WM_QUIT消息时,返回FALSE,退出循环,没有获取到这个消息,返回非0,不退出循环
MSG msg;
while(GetMessage(&msg,NULL,0,0)) //0
{
//将虚拟键消息转化为字符消息
//一个按下消息+抬起消息=》字符消息,
TranslateMessage(&msg);
//将消息分发给窗口处理函数
DispatchMessage(&msg);
}
return 0;
}
//窗口处理函数
//Windows Message缩写
LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE: //窗口关闭消息
DestroyWindow(hWnd);//销毁窗口, 干掉界面,不会发出WM_QUIT,会发出一个WM_DESTROY消息
break;
case WM_DESTROY: //窗口销毁消息
PostQuitMessage(0); //发出WM_QUIT
break;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam); //交给操作系统默认处理
}
编写程序代码运行如图所示