如何创建一个没有菜单、栏、框架、3D 效果等的窗口,并且与另一个窗口的大小完全相同?
Posted
技术标签:
【中文标题】如何创建一个没有菜单、栏、框架、3D 效果等的窗口,并且与另一个窗口的大小完全相同?【英文标题】:How can I create an Window without menu, bar, frame, 3D effect...etc with exact same size of another window? 【发布时间】:2020-07-27 06:50:05 【问题描述】:目前我正在尝试创建在指定进程的窗口上生成的 WaterMark 窗口。
下面的例子是指定notepad.exe的程序的执行。
但是,如果你仔细观察,你会发现 WaterMark Window 的大小实际上与原始 Window 的大小并不相同。
我正在调整窗口样式以弄清楚如何让我的 WaterMark 窗口的大小与原始窗口的大小完全相同
如果有人有建议,请帮助我。
下面是我设置水印窗口样式的代码。
void OnCmSetAttribute(void) ModifyStyleEx( 0, WS_EX_LAYERED | WS_EX_TRANSPARENT); SetLayeredWindowAttributes(RGB(255,255,255), 204, LWA_ALPHA | LWA_COLORKEY);
【问题讨论】:
“如果你看得够近的话” - 我仔细看了看,但可能还不够近。请同时添加预期行为和观察到的行为。 【参考方案1】:您可以使用GetWindowRect
获取窗口大小。不过,您必须知道窗口处理程序。
要知道这里的窗口句柄是一个小代码(你可以找到整个东西here。)
(不编译代码。)
EnumWindows (&Enum, (LPARAM)&_windows);
BOOL CALLBACK Enum (HWND hwnd, LPARAM lParam)
WINDOWPLACEMENT place;
char window_title[200];
UINT class_length = 0;
UINT title_length = 0;
class_length = GetClassNameA(hwnd, buf, buf_size);
title_length = GetWindowTextA(hwnd, window_title, ARRAYSIZE(window_title));
GetWindowPlacement(hwnd, &place);
GetWindowRect(hWnd, &lpRect);
在 Windows Vista 及更高版本中,Window Rect 现在包括投影所占据的区域。 要获取不包括投影的窗口边界,请使用
DwmGetWindowAttribute
,指定DWMWA_EXTENDED_FRAME_BOUNDS
。
【讨论】:
对不起,我没有在我的问题中提到。我的整个代码实际上处理原始窗口的 HWND。此外,已经从 GetWindowRect 函数中检索了窗口大小。不过,谢谢你写答案。 @KigaelLee 添加了有关投影的信息。以上是关于如何创建一个没有菜单、栏、框架、3D 效果等的窗口,并且与另一个窗口的大小完全相同?的主要内容,如果未能解决你的问题,请参考以下文章