摘要:代码流程在上,一个窗口程序是由消息驱动的,所以创建一个窗口程序有如下几个步骤注册窗口类,包括结构体的赋值以及注册窗口类使用创建窗口以及和更新显示窗口使用和建立消息循环完成处理消息的回调函数指定该结构体的大小宽度高度变化时重绘窗口回调函数表示
代码
流程
在Windows上,一个窗口程序是由消息驱动的,所以创建一个窗口程序有如下几个步骤:
注册窗口类,包括WNDCLASS结构体的赋值以及RegisterClass注册窗口类
使用CreateWindow创建窗口以及ShowWindow和UpdateWindow更新显示窗口
使用GetMessage和DispatchMessage建立消息循环
完成处理消息的WndProc回调函数
#includeLRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) { char *lpClassName = "FirstWin", *lpWindowName = "Title"; HWND hwnd; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); // 指定该结构体的大小 wndclass.style = CS_HREDRAW | CS_VREDRAW; // 宽度高度变化时重绘 wndclass.lpfnWndProc = WndProc; // 窗口回调函数 wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // NULL表示系统图标,默认图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 默认光标 wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 使用画刷填充背景色,还可以(HBRUSH)GetStockObject(BLACK_BRUSH) wndclass.lpszMenuName = NULL; wndclass.lpszClassName = lpClassName; wndclass.hIconSm = NULL; if (!RegisterClassEx(&wndclass)) { MessageBox(NULL, "Register Failed", "Tips", MB_ICONERROR); return 0; } hwnd = CreateWindow(lpClassName, lpWindowName, WS_OVERLAPPEDWINDOW, //style CW_USEDEFAULT, // x CW_USEDEFAULT, // y 600, // width 400, // height NULL, // hWndParent NULL, // hMenu hInstance, // hInstance NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // 发送 WM_PAINT,保证窗口一定可以刷新显示 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch (message) { case WM_CREATE: MessageBox(NULL, "Create Windows Success", "Tips", MB_OK); break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); DrawText(hdc, "HelloWorld", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd, &ps); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc(hwnd, message, wParam, lParam); }
使用gcc -m32 -mwindows win1.c -o win1.exe编译
运行结果
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/61311.html
摘要:程序界面已实现功能整个窗口居中显示,灰化最大化按钮,空白处添加了消息回调,最后就是获取输入运算后判断是否和预期相同,从而决定弹窗内容这就是一般的的套路完整源码指定该结构体的大小宽度高度变化时重绘窗口回调函数表示系统图标,默认图标默认光标使用 程序界面 showImg(https://segmentfault.com/img/bVbiSCY?w=396&h=298);showImg(ht...
摘要:该函数通过调用实现函数原型参数含义实例句柄对话框模板名指定拥有对话框的窗口指向对话框过程的指针函数作用创建一个非模态对话框,需要使用结束该对话框。 初讲 MessageBox 函数作用:弹出一个对话框,典型的模态型对话框函数原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)...
摘要:上篇文章我许了一个愿,就是想让大家多多关注我,然后我的粉丝就蹭蹭的涨了好几百,谢谢大家的厚爱。可是我发现粉丝是涨了,三连变少了,谢谢大家这次给我三连,我一定再接再厉。地址的寻找阳光总值,种植一个豌豆需要,非常不够用。 目录 前言 游戏的安装 思路 一句话总结 大概的思...
摘要:节选判断是偶数还是奇数用来生成中间色的常量为为执行有点渐变色效果增加命令行窗口我们熟知的操作系统都是可以同时运行多个应用程序的,目前制作的操作系统只有一个命令行窗口,且命令行窗口只能执行一个应用程序。 ...
摘要:截至目前,商店中可用的发行版有以及。尽管上的控制台已经改进了不少可以看看的官方博客,但其依然是最难用的终端模拟器之一,或许没有之一。因此,为了实现我们的目标,一个更强大的终端模拟器是必须的。上的老牌终端模拟器,功能极为强大,要啥有啥。 原文发表在我的 博客 上,欢迎订阅。;) 在两年前的八月,Microsoft 正式发布了 Windows 10 Anniversary Update 周...
阅读 1633·2021-11-22 15:24
阅读 1139·2021-11-12 10:36
阅读 2977·2021-09-28 09:36
阅读 1659·2021-09-02 15:15
阅读 2445·2019-08-30 15:54
阅读 2299·2019-08-30 11:02
阅读 2264·2019-08-29 13:52
阅读 3403·2019-08-26 11:53