手把手教你写第一个Windows窗口
来源:http://www.tudoupe.com时间:2022-05-09
首个 Window 窗口
- 效果展示
- 详细过程
- 设计窗口类
- 注册窗口类
- 创建窗口
- 显示窗口
- 更新窗口
- 消息循环
- 源代码
- 实用工具
- 图标制作软件
- 图标库
效果展示
首个 Window 窗口
详细过程
设计窗口类
首先,如果要稍后使用自定义的窗口类型名称和窗口标题,则不得缺少这些名称和标题。
随后为窗口类创建了标准操作,按步逐步进行。
上述软件创建了一个窗口级 wc, 然后初始化了其所有参数 。
让我们审查WNDCLASS参数:
typedef struct tagWNDCLASSA {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
} WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;
让我们逐一审查每个参数。
1. 存在窗口样式(样式),是可选的,在使用多种样式时由“”链接。
CS_HREDRW CS_VREDAW(如果横向和纵向调整)是一般设置。
| 常量/值 | 说明 |
|---|---|
| CS_BYTEALIGNCLIENT | 将窗口的工作区域对齐到字节边界( x 方向) 。 此样式会改变显示窗口的宽度和水平位置 。 |
| CS_BYTEALIGNWINDOW | 在字节边框上对齐窗口( x 方向) 。 此样式会改变显示窗口的宽度和水平位置 。 |
| CS_CLASSDC | 要提供设备上下文,类中的所有窗口都共享此属性 。Windows是针对具体过程的,因此这样可以让许多线形应用程序生成相同的窗口 。同时,线线可能试图进入装置上下文。 发生这种情况时,系统只允许一条线正确执行绘图任务 。 |
| CS_DBLCLKS | 当用户双击该类别中的窗口时,它会向窗口进程发送双击消息。 |
| CS_DROPSHADOW | 启用窗口的阴影效果 。SPISETDROPSHADOW_ 效应 被混合开关。 通常,用于短期生存(例如菜单),用于帮助个人的日常生活。在其他窗口的顺序中,划下它们与 Z 的链接。使用此样式的窗口必须从类中创建; 它们不能是子窗口 。 |
| CS_GLOBALCLASS | 程序的全球类别是指示窗口类 。 |
| CS_HREDRAW | 当移动或调整工作空间宽度以改变工作空间宽度时,整个窗口将被重新油漆。 |
| CS_NOCLOSE | 删除窗口菜单中的“关闭”选项。 |
| CS_OWNDC | 为每个窗口分配该类唯一的设备上下文 。 |
| CS_PARENTDC | 设置父窗口的子窗口剪切矩形 。允许儿童窗口绘制父窗口标记为 CSPARENTDC_ style 位的窗口会接收系统的标准设备上下文 。它不包括母级或次级设备设置。SCPARENTDC_ 指定它能改进应用程序的性能 。 |
| CS_SAVEBITS | 这些窗口的屏幕图像元素被保存为位图 。 删除窗口后,系统使用存储的位图恢复屏幕上的图像 。所覆盖的其他窗口也包括在内。 因此,如果位图的内存没有被删除,因此,随后的屏幕活动不会使保存的照片无法使用。,系统不会向隐藏的窗口发送 WMPAINT_ 消息。这一设计适用于小型窗口(例如,菜单或对话框窗口)然后在采取任何额外的屏幕行动之前将其删除。此方法会延长显示窗口所需的时间 。因为系统必须首先分配 内存( 内存) 以便存储位图 。 |
| CS_VREDRAW | 如果您移动或调整窗口大小以调整工作空间的高度,它会重新拖动整个窗口。 |
2、窗口处理函数
我们想要个性化的窗口处理功能。
艺术成果的处理产生了长期的结果。
| 参数 | 描述 | 类型 |
|---|---|---|
| hWnd | 窗口控件( 当前窗口的窗口控件) | HWND代表结构体指示器。 |
| uMsg | 信件号( 例如, (鼠点击, 拖动) | UINT (usigned int) |
| wParam | 添加的窗口信息( 如鼠标的坐标) | WPARAM (usigned int) |
| lParam | 窗口附加信息 | LPARAM (long) |
例如:
LRESUT CALBANK 函数( HWND hWnd, UINT ummsg, WPARAM wPAram, LPARAM lPAram) 的名称固定。以下函数完全自写。WM_CLOSE和WM_DESTROY都是必需的。记住在结束时引用操作系统的默认信件处理功能。
3. 额外窗口类扩展空间大小(字节)
设置为0
4. Windows的额外扩展空间大小(单位:字节)
设置为0
5、窗口句柄
WinMain 函数的第一个参数设置为当前应用程序的样本控件 。
6、窗口图标句柄
使用默认的窗口图标控件, 例如 :
wc.hIcon = NULL;
使用自定义的窗口图标手柄, 如 :
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));
加载 Icon: 打开含有图标的文件 。
第一个论点是应用程序示例处理。
如果没有系统资源,请使用NULL。
如果资源是自定义的,请使用 hInstance 。
第二个论点是资源代号(信头文件和资源.h的一致性),参数类型是LPCWSTR。
MaTIINTROUNCE () 将给定类型转换为 LPCWSTR 。
7、光标图标句柄
使用默认的光标图标控件, 例如 :
wc.hCursor = NULL;
使用自定义光标图标手柄, 如 :
wc.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR));
8、背景画刷句柄
使用 RGB 模式设定窗口背景的颜色 。
例如:
wc.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));
9、菜单名
wc.lpszMenuName = NULL;
使这个阶段 NULL 。
10、窗口类型名
启动时唯一的窗口类型名称
例如:
wc.lpszClassName = szAppClassName;
提示:几个API以W开头,表示其字符组是Unicode。
注册窗口类
注册的窗口类使用登记册分类方法,我们需要做的就是将先前定义的窗口类名称传给地址,然后建立一个简单的条件,检查注册是否成功。
例如:
创建窗口
创建带有 CreativeWindow 函数的窗口, 然后只是初始化参数和检查, 以查看窗口是否正确构建 。
例如:
使用 HWND hWnd 获取已生产的窗口, 窗口可以定制, 但并不总是用于 hWnd 。
系统中的创建窗口函数定义如下。
HWND WINAPI CreateWindow(
In_optLPCTSTR lpClassName,
In_optLPCTSTR lpWindowName,
InDWORD dwStyle,
Inint x,
Inint y,
Inint nWidth,
Inint nHeight,
In_optHWND hWndParent,
In_optHMENU hMenu,
In_optHINSTANCE hInstance,
In_optLPVOID lpParam
);
窗口常用风格
| 风格 | 描述 |
|---|---|
| WS_CAPTION | 该窗口有一个标题栏 |
| WS_SYSMENU | 窗口的标题栏有一个窗口菜单 。 |
| WS_MAXIMIZEBOX | 窗口的最大按钮不能与 WS_ EX_ CONTEXTHEP 样式连接 。 |
| WS_MINIMIZEBOX | 窗口显示一个无法与 WS_ EX_CONTEXTHEP 样式结合使用的最小化按钮。 |
| WS_MAXIMIZE | 窗口最初是最大化的 |
| WS_MINIMIZE | 窗口最初是最小化的 |
| WS_CHILD | 因为窗口是一个子窗口, 它不能有一个菜单栏 。 |
| WS_DISABLED | 窗口最初被禁用, 无法接收用户输入 。 要在建立窗口后修改此设置, 请使用“ 启用窗口” 方法 。 |
| WS_HSCROLL | 窗口中存在水平滚动条。 |
| WS_VSCROLL | 窗口中存在垂直滚动条。 |
| WS_ICONIC | 窗口最初是最小化的 |
显示窗口
要在已建窗口中通过, 请使用 ShowWindow 方法 。
SW_SHOW 是常规显示模式设置 。
更新窗口
要通过新生成的窗口, 请使用“ 更新窗口” 函数 。
消息循环
一位朋友问为什么需要一个循环。
因为如果没有循环, 窗口会闪烁 。
我们构建一个变量以接收窗口信件, 然后使用 GetMessage、 TranslateMessage 和 SentraMessage 方法处理没有的邮件 。
源代码
实用工具
可能有些小伙伴不知道如何设计自己的图标和时间轴, 这不仅仅是把照片的后缀换成.. 我不知道你在说什么。我们可以用卷卷做这个, 我会给一个图标制作程序和一个网站, 有很多免费的图标。
图标制作软件
icofx
这是程序的一个链接。
网站:https://pan.org/我不知道你在说什么,宝贝.pwd=czjy
提取码:czjy
下载压缩后,将箭头显示的快捷键复制到桌面。
使用方法:
将图像拖放到 icfx 界面中, 然后选择创建图标或光标, 然后 CTRL+S 将保存它们 。
现在让我们讨论如何为该项目增加资源。
最初,下列材料将放入项目文件夹:
然后,在这个项目中, 找到资源文件 并按下图表。
下一步, 在导入图标( Icon) 和光标( Cursor) 之间选择 。
下一步,在项目文件夹中查找并添加相关资源。

图标库
https://www.iconfont.cn/
相关新闻
- 2022-08-04 WPF的由来
- 2022-08-04 Win11勒索软件防护怎么打开?Win11安
- 2022-08-04 Windows系统jdk的配置
- 2022-08-04 Windows10 OneNote怎么重新登录?如何重
- 2022-08-04 超好用的 Windows 效率工具推荐
- 2022-08-04 Windows如何在CMD或PowerShell中配置代理
- 2022-08-04 powershell和cmd对比
- 2022-08-04 【QT】Windows下QT下载安装
- 2022-08-04 windows下 C++ 实现类属性的get和set方
- 2022-08-04 Win11快速助手在哪里?Win11打开快速
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
