我们可以用windows.h的库编写界面应用 其实就是对更重消息进行处理,在windows编程中,一切皆句柄
下列图片截取于猎豹学院的视频
代码如下
#include <Windows.h>
/**
H是Handler的简写
事件驱动编程模型
句柄:在window 对任何东西操作都是靠句柄操作的。windows一切都是窗口。
C 一切皆指针,windows 一切皆句柄
实例:
**/
//窗口回调函数 H是Handler的简写
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
/*
相当于main 实例句柄
参数:1.当前实例
*/
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hwnd;//窗口句柄
MSG msg;//消息
WNDCLASS wc;//窗口类
//1.设计窗口类
wc.style=0;
wc.lpfnWndProc= (WNDPROC)WndProc;//窗口过程
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hInstance=hInstance;//当前实例句柄
wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);//图标句柄实例
wc.hCursor=LoadCursor(NULL,IDC_ARROW);//鼠标实例
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);//例
wc.lpszMenuName=NULL;
wc.lpszClassName=TEXT("MyWndClass");
//2、注册窗口类
RegisterClass(&wc);
//3.创建窗口
hwnd=CreateWindow(
TEXT("MyWndClass"),
TEXT("hello sdk application"),//标题
WS_OVERLAPPEDWINDOW,//窗口的样式
100,//窗口x坐标
100,//y
1000,//窗口大小宽
1000,//高
NULL,//父窗口
NULL,//窗口菜单句柄
hInstance,
NULL);
//4.显示he更新窗口
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
//5.消息循环
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);//转发到窗口
}
return msg.wParam;
}
//窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
PAINTSTRUCT ps;
HDC hdc;//dc句柄
RECT rect;
//对各种 消息进行处理
switch(message){
case WM_SIZE:
hdc =BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
Ellipse(hdc,0,0,200,200);
DrawText(hdc,TEXT("HELLO WINDOS"),-1,&rect,
DT_SINGLELINE |DT_CENTER |DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_LBUTTONDOWN:
//MessageBox(hwnd,TEXT("MOSE CLICK"),TEXT("消息"),MB_OK);
//PostQuitMessage(0);
return 0;
case WM_PAINT://绘制
hdc =BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
Ellipse(hdc,0,0,200,200);
DrawText(hdc,TEXT("HELLO WINDOS"),-1,&rect,
DT_SINGLELINE |DT_CENTER |DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY://销毁窗口
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
效果: