我尝试使用以下语法创建视频窗口:
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);
或在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
谢谢,
答案 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);