视窗。 更改下拉菜单的位置

有没有办法改变popup菜单的位置。 使用顶级窗口,我可以通过CBTProccallback函数和MoveWindow来完成。 我可以用菜单做同样的事吗? 需要这样做,以便popup式菜单仅位于其父窗口的区域中。 像一个光窗口pipe理器。

是的,在WH_CBT钩子回调中,每当创建菜单窗口时,都会收到一个“nCode”的HCBT_CREATEWND通知。 测试类名称,标准菜单/子菜单窗口将有一个类名“#32768”。 然后,您可以发送一个MN_GETHMENU消息到窗口来找出哪个菜单即将被激活。 但是如文档所述 ,在收到通知时移动窗口还为时过早,菜单甚至不可见,所以您可能需要对窗口进行分类并处理额外的消息。

请注意,当显示菜单窗口时,不需要挂钩来通知,可以为WM_ENTERIDLE消息放置一个处理程序,测试'wParam'以查看菜单是否导致消息,从lParam获取菜单窗口'再次发送一个'MN_GETHMENU'来找出具体的菜单。 此时可以移动窗口而不需要进一步的消息处理。 请注意,“WM_ENTERIDLE”会被多次调用,所以你需要跟踪你已经移动了一个特定的窗口。