Winapi:处理自定义和默认的非客户端控件

Winapi : Handling custom and default non-client controls

本文关键字:客户端 控件 默认 处理 自定义 Winapi      更新时间:2023-10-16

非客户端控制事件都默认由DefWindowProc控制。我想创建自己的自定义非客户端控件;这导致我拦截WM_NCPINT消息,并可能创建自己的句柄来控制非客户端区域中的窗口。如果我要创建一个最小化或最大化按钮,那么我必须重新创建(从头开始?)并拦截默认窗口过程假设要处理的所有事件,因为我的自定义按钮的大小、位置和属性与默认按钮不同。然而,我仍然不太确定这是否是人们模仿默认非客户端控件创建自定义非客户端控件的常见方式,所以我想确保我是否走在正确的轨道上:

  1. 不传入默认窗口样式指定创建非客户端控制(最小化的存在,"最大化"、"关闭"按钮)
  2. 创建我自己的窗口控件(用于例如按钮)
  3. 拦截所有与之相关的消息他们如果自定义窗口是默认值,例如最小化按钮,然后发送与相关的消息那个按钮(然而,我只看到WM_CLOSE消息,没有WM_MINIMIZE或WM_MAXIMIZE)

我在处理所有违约程序方面遇到了麻烦;如果可能的话,我想看看DefWindowProc里面有什么(这样我就可以模仿它们的功能,同时添加我的)

听起来好像你想自定义所有东西。如果你绝对必须对用户施加一些"噪音",那么只需将你的东西放在客户端区域,并且没有任何非客户端区域(没有边界等)。你可能必须实现窗口拖动,但我认为仅此而已。

干杯&hth。,

在标题通常放置按钮的地方绘制自定义按钮。位置并不重要。在回调的WM_COMMAND部分中,使用ShowWindow(hwnd, SW_MAXIMIZE)ShowWindow(hwnd, SW_RESTORE)。这就是它的全部。