窗口的创建
先RegisterWindow():注册
再CreateWindow():创建
最后如果想的话UpdateWindow():更新
就像一个公司一样,先注册公司,然后就可以着手创建公司了,再然后更新公司产品。
窗口过程
窗口过程是由msg(message)
触发事件让窗口感应来完成任务的。
代码(别怕长,最后有妙招)
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;//一个窗口类
HWND hwnd;//还记得这个是什么吗?对,就是窗口句柄
MSG Msg;//消息
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = ; //上面所说的事件处理函数,现在因为这个目前还无法编译成功
wc.hInstance = hInstance;//他要你传一个应用程序实例句柄
wc.hCursor = LoadCursor(NULL, IDC_ARROW);//他说要个鼠标句柄
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//请告诉它窗口的颜色,可以不要加1,也可以加2、加3都可以
wc.lpszClassName = "WindowClass";//窗口类名,注意不是窗口标题、窗口名
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //他说他要一个图标
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //emm...这个就跟上面的填一样的
/*
LoadIcon会传回一个图标句柄
LoadCursor会传回一个鼠标句柄
*/
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}//注册窗口,如果注册失败,则弹出对话框
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,//EX窗口风格
"WindowClass",//刚才所说的窗口类名
"Caption",//这个就是窗口标题啦
WS_VISIBLE|WS_OVERLAPPEDWINDOW,//普通窗口风格,WS_VISIBLE它指的是窗口初始是否可见;WS_OVERLAPPEDWINDOW指的是一般窗口风格,剧透一下,将来的控件窗口就不需要了。
CW_USEDEFAULT,CW_USEDEFAULT,//窗口左上角的xy坐标
640,480,//窗口的宽和高,不知道为什么它不是长和宽,而是宽和高(长)
NULL,//这个是个窗口句柄,NULL为桌面
NULL,//HMENU昨天忘记讲了,它不仅代表了一个菜单,还是一个窗口标识,将来控件会用到
hInstance,//填空题:HINSTANCE代表了_____,答案:应用程序实例句柄
NULL);//附加参数(没什么卵用)
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}//与上面一样,窗口创建失败则弹出一个对话框
while(GetMessage(&Msg, NULL, 0, 0) > 0){//获取消息Get得到
TranslateMessage(&Msg);//翻译消息,甭管它是什么,照做就行
DispatchMessage(&Msg);//与上面同理,要真有兴趣可以一搜
}//~~这就是我们传说中的消息循环~~
return Msg.wParam;
}
嘿嘿,我所说的妙招要看你有没有一款特殊的编译器一一DevC++
相信有很多人都用的是VS,那样就只能用手打代码喽😝
DevC++找到插入键,点击会弹出一个菜单,选择winmain() 自动就会有哦~
DevC++在MicrosoftStore现在卖48¥哦
所以还是老老实实打代码吧
实在太lazy的话跟作者私信吧
另外,关于WS_VISIBLE若是你实在不想选,也可以用ShowWindow(hwnd,____) 把它给显示出来哦,他也是一个隐藏窗口的好东西,在第二个参数填入SW_SHOW或者是SW_SHOWWINDOW就可以显示窗口了,填入SW_HIDE就可以隐藏窗口了,并且不是SW_MINIMISE(最小化)顺便说一下,最大化是SW_MAXIMISE,有兴趣的同志可以尝试一下(可以说是使公司让大家知道)
又是打代码!
不过没事,将来我们搞扫雷、登录系统的时候,会有更多的代码要打的!
不过作者还是手打了近三百四百多行代码
淘汰一批畏惧困难的(逃)