组织 Win32 窗口控件的最佳方式是什么?

问题描述 投票:0回答:1

我目前正在尝试学习Win32 API来开发Windows 10/11的本机GUI程序。这些将用作包含标签、文本框、按钮、下拉菜单和菜单栏的基本工具。我目前正在分别创建类和窗口时围绕所有基本 Win32 对象(例如 ATOM 和 HWND)编写 C++ 包装器。

我已经能够制作一个带有 2 个按钮的基本窗口,这些按钮可以在调整窗口大小时调整大小。展望未来,我希望能够使用水平和垂直布局框自动组织“小部件”(我的抽象类的名称)。根据我的研究,“STATIC”类窗口似乎执行我需要的容器化,甚至可以根据需要对容器进行样式化。

这是我创建的图表,用于显示我尝试实现的窗口和父级层次结构的外观:

我遇到了两个问题:

  1. 如果我将按钮设为框架的子级,则按钮不会继承主父窗口的字体,并且按下时不会传递 WM_COMMAND 消息。
  2. 如果我将按钮设置为窗口的子级,则框架会定期绘制在按钮上。

我更愿意采用第一种方法,但它似乎破坏了 API 的默认功能。解决这个问题的最佳方法是什么?

c++ windows winapi
1个回答
0
投票

您必须通过每个单独控件上的

WM_SETFONT
设置所需的字体。控件不继承其父窗口的字体。

WM_COMMAND
(和
WM_NOTIFY
)由子控件发送到其直接父窗口,因此父窗口的
WndProc
需要处理该消息。这意味着如果按钮是框架的子级,则框架需要处理按钮的通知。

由于您正在设计自己的类框架,请考虑让父级

WndProc
将这些消息反射回发送它们的子窗口,以便子级
WndProc
可以处理它自己的通知。

如果另一个控件具有相同的父级,并且该框架在 z 顺序上高于该控件,则您的框架可以显示在另一个控件的顶部。

© www.soinside.com 2019 - 2024. All rights reserved.