WINDOWS窗口创建及消息处理代码

简介:

以前看过很多次,现在默默的一个一个打出来。。

代码:

复制代码
 1 /* header file */
 2 #include <Windows.h>
 3 
 4 /* global var */
 5 HINSTANCE hinst;
 6 
 7 /* function declaire*/
 8 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
 9 LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
10 
11 /* function display a window */
12 int WINAPI WinMain(HINSTANCE hInstance,
13     HINSTANCE hPrevInstance,
14     LPSTR lpCmdLine,
15     int nCmdShow)
16 {
17     WNDCLASSEX wcx;        //windows class
18     HWND hwnd;            //windows handle
19     MSG msg;            //message
20     BOOL fGotMessage;    //if get message succeed
21     hinst = hInstance;    //app object handle , it's save global var
22     //fill window form data struct
23     wcx.cbSize = sizeof(wcx);    //size of struct
24     wcx.style = CS_HREDRAW | CS_VREDRAW;    //style:redraw GUI when change size
25     wcx.lpfnWndProc = MainWndProc;        //function of deal windows Message
26     wcx.cbClsExtra = 0;        //don't use class mem
27     wcx.cbWndExtra = 0;        //don't use windows form mem
28     wcx.hInstance = hInstance;        //belong to APP instance handle
29     wcx.hIcon = LoadIcon(NULL,IDI_APPLICATION);        //ICON,default
30     wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //background:white
31     wcx.lpszMenuName = NULL;        //menu:null
32     wcx.lpszClassName = "MainWClass";        //windows form class name
33     wcx.hIconSm = (HICON)LoadImage(hInstance,        //little icon
34         MAKEINTRESOURCE(5),
35         IMAGE_ICON,
36         GetSystemMetrics(SM_CXSMICON),
37         GetSystemMetrics(SM_CYSMICON),
38         LR_DEFAULTCOLOR);
39 
40     //register windows form class
41     if(!RegisterClassEx(&wcx))
42     {
43         return 1;
44     }
45 
46     //create windows form
47     hwnd = CreateWindow(
48         "MainWClass",        //windows form name
49         "CH 2-3",        //windows form title
50         WS_OVERLAPPEDWINDOW,    //windows form style
51         CW_USEDEFAULT,        //x:default
52         CW_USEDEFAULT,        //Y:default
53         CW_USEDEFAULT,        //width:default
54         CW_USEDEFAULT,        //heigh:default
55         (HWND) NULL,        //parent class:none
56         (HMENU) NULL,        //menu:make window form menu
57         hInstance,        //APP programe instance handle
58         (LPVOID) NULL);        //data when create window form:none
59 
60     if(!hwnd)
61     {
62         return 1;
63     }
64 
65     //display window form
66     ShowWindow(hwnd, nCmdShow);
67     UpdateWindow(hwnd);
68 
69     //get message again and again
70     while(
71         (fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0
72         && fGotMessage != -1)
73     {
74         TranslateMessage(&msg);
75         DispatchMessage(&msg);
76     }
77     return msg.wParam;
78 }
79 
80 /* MainWndProc 
81 function of deal with windows form message*/
82 LRESULT CALLBACK MainWndProc(HWND hwnd,
83     UINT uMsg,
84     WPARAM wParam,
85     LPARAM lParam
86     )
87 {
88     switch (uMsg)
89     {
90     case WM_DESTROY:
91         ExitThread(0);
92         return 0;
93     default:
94         return DefWindowProc(hwnd, uMsg, wParam, lParam);
95     }
96 }
复制代码

 

截图:

窗口没出来。。

目录
相关文章
|
6月前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
5月前
|
缓存 开发工具 git
windows系统通过git上传代码
windows系统通过git上传代码
44 1
|
1月前
|
API Windows
Windows之窗口原理
这篇文章主要介绍了Windows窗口原理和如何使用Windows API创建和管理窗口。
54 0
|
2月前
|
Windows
Windows7电脑启动时提示文件winload.exe无法验证其数字签名,错误代码0xc0000428的解决方法
Windows7电脑启动时提示文件winload.exe无法验证其数字签名,错误代码0xc0000428的解决方法
|
3月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
2月前
|
Linux 开发者 Python
从Windows到Linux,Python系统调用如何让代码飞翔🚀
【9月更文挑战第10天】在编程领域,跨越不同操作系统的障碍是常见挑战。Python凭借其“编写一次,到处运行”的理念,显著简化了这一过程。通过os、subprocess、shutil等标准库模块,Python提供了统一的接口,自动处理底层差异,使代码在Windows和Linux上无缝运行。例如,`open`函数在不同系统中以相同方式操作文件,而`subprocess`模块则能一致地执行系统命令。此外,第三方库如psutil进一步增强了跨平台能力,使开发者能够轻松编写高效且易维护的代码。借助Python的强大系统调用功能,跨平台编程变得简单高效。
41 0
|
3月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
184 0
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
247 0
|
3月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
64 0
|
3月前
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
69 0