如何创建一个没有菜单、栏、框架、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 效果等的窗口,并且与另一个窗口的大小完全相同?的主要内容,如果未能解决你的问题,请参考以下文章

Lion 全屏菜单栏不向下滑动

jquery实现简易大气3D导航下拉菜单菜单栏效果

如何实现窗口指向状态栏项的UI效果?

Delphi主窗口任务栏菜单的问题(转发WM_SYSCOMMAND到Application)

delphi怎么设置个性图片菜单、分页菜单和图片标题栏啊,

Glut 窗口 - MAC OSX 中的菜单栏