如何从窗口中删除WS_EX_TOPMOST样式?
我尝试使用以下语法创建video窗口:
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
如何以编程方式删除它或者我是否需要以某种方式覆盖它?
我试过SetWindowPos
:
SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
或者在CreateWindowEx
上使用CreateWindow
代替:
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
谢谢,
进行此操作的一种方法是在清除与WS_EX_TOPMOST对应的位并设置新的扩展样式之前,在窗口中查询其当前的扩展样式。
像这样的东西:
long dwExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); dwExStyle &= ~WS_EX_TOPMOST; SetWindowLong(hwnd, GWL_EXSTYLE, dwExStyle);
::SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE|SWP_NOACTIVATE);