ACTIVE WINDOW - 如何防止标题栏蓝/灰变化

时间:2011-07-13 11:48:18

标签: windows winapi focus

我在对话框中嵌入了一个模式较少的属性表。我没有为控件使用新的窗口类,但确实使属性表成为对话框中容器的子窗口。除了一件事,一切都很好。当用户单击属性表时,对话框的标题栏从蓝色(ACTIVE)变为灰色(INACTIVE);当属性表处于活动状态时,我希望将对话框的标题栏保持为蓝色,因为属性表似乎是用户对话框的一部分。属性表没有标题栏。

c ++ win32api no mfc

问题:

1)当属性表处于活动状态时,是否有某种方法可以将对话框标题栏保持为蓝色?

2)如果我为属性表使用了一个新的窗口类并将该类的控件添加到对话框中,它的工作方式会不同吗?

1 个答案:

答案 0 :(得分:3)

非常感谢Sertac Akyus提出的建议。

当工作表处于活动状态时,看起来其中一个属性表的页面处于活动状态。我无法使属性表的主对话框处于活动状态。因此,只要页面变为活动状态,您就可以在页面对话框中使用WM_ACTIVATE消息处理程序,使用WM_NCACTIVATE TRUE将主对话框的标题栏设置为蓝色。当页面取消激活时,除非在主对话框中激活窗口,否则还必须使用WMNCACTIVATE FALSE将主对话框的标题栏设置为灰色。

这是我使用的代码。

    case WM_ACTIVATE:
        switch LOWORD(wParam)
        {
        case WA_ACTIVE:                 // 1
        case WA_CLICKACTIVE:            // 2
            SendMessage (hwndContainer,WM_NCACTIVATE,TRUE,NULL);
            return true;
        case WA_INACTIVE:
            if ((HWND) lParam != hwndContainer)
            {
                SendMessage (hwndContainer,WM_NCACTIVATE,FALSE,NULL);
                return true;
            };
        }
        break;

hwndContainer是包含属性表的对话框的HWND。

如果您想在对话框演示中获得我的小资产表的副本,请给我发送电子邮件。 mike.z.dorl@gmail.com