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