我目前正在尝试学习Win32 API来开发Windows 10/11的本机GUI程序。这些将用作包含标签、文本框、按钮、下拉菜单和菜单栏的基本工具。我目前正在分别创建类和窗口时围绕所有基本 Win32 对象(例如 ATOM 和 HWND)编写 C++ 包装器。
我已经能够制作一个带有 2 个按钮的基本窗口,这些按钮可以在调整窗口大小时调整大小。展望未来,我希望能够使用水平和垂直布局框自动组织“小部件”(我的抽象类的名称)。根据我的研究,“STATIC”类窗口似乎执行我需要的容器化,甚至可以根据需要对容器进行样式化。
这是我创建的图表,用于显示我尝试实现的窗口和父级层次结构的外观:
我遇到了两个问题:
我更愿意采用第一种方法,但它似乎破坏了 API 的默认功能。解决这个问题的最佳方法是什么?
您必须通过每个单独控件上的
WM_SETFONT
设置所需的字体。控件不继承其父窗口的字体。
WM_COMMAND
(和 WM_NOTIFY
)由子控件发送到其直接父窗口,因此父窗口的 WndProc
需要处理该消息。这意味着如果按钮是框架的子级,则框架需要处理按钮的通知。
由于您正在设计自己的类框架,请考虑让父级
WndProc
将这些消息反射回发送它们的子窗口,以便子级 WndProc
可以处理它自己的通知。
如果另一个控件具有相同的父级,并且该框架在 z 顺序上高于该控件,则您的框架可以显示在另一个控件的顶部。