如何从窗口中删除WS_EX_TOPMOST样式?

时间:2014-01-18 13:38:14

标签: c

我尝试使用以下语法创建视频窗口:

hwnd=CreateWindow("Video Window", "Video window", 
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, rect.right-rect.left,rect.bottom-rect.top,        NULL, NULL, hInstance, NULL);

所有工作都按预期工作,但问题是窗口总是在顶部。这意味着即使切换到其他应用程序,我也会看到此窗口。

Window directive计划中我发现了其他风格:WS_EX_TOPMOST

enter image description here

如何以编程方式删除它或者我是否需要以某种方式覆盖它?

我尝试了SetWindowPos

SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

或在CreateWindow使用CreateWindowEx

hwnd=CreateWindowEx(WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_WINDOWEDGE,
                    "Video Window","Video Window",
                    WS_OVERLAPPEDWINDOW  | WS_VISIBLE ,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    rect.right-rect.left,
                    rect.bottom-rect.top,
                    NULL,
                    NULL,
                    hInstance,
                    NULL);

但仍然获得标记WS_EX_TOPMOST

谢谢,

2 个答案:

答案 0 :(得分:5)

实现它的一种方法是在清除与WS_EX_TOPMOST对应的位并设置新的扩展样式之前,在窗口中查询当前的扩展样式。

这样的事情:

long dwExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
dwExStyle &= ~WS_EX_TOPMOST;
SetWindowLong(hwnd, GWL_EXSTYLE, dwExStyle);

答案 1 :(得分:1)

::SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0,  SWP_NOSIZE | SWP_NOMOVE|SWP_NOACTIVATE);