-1

我想问一下如何创建一个行为类似于任务栏(shell_traywnd)的窗口?在一个名为 Enable Viacam(残疾人相机鼠标)的 Windows 应用程序中,我看到该应用程序在屏幕顶部创建了一个类似任务栏的窗口(见下图),它将所有其他窗口拉到它下面。 Enable_Viacam 的窗口(屏幕顶部)

我使用 Winspector 软件检查此 Enable Viacam 的窗口以查看其 WS_ /WS_EX_属性,以便我尝试模拟它,但使用这些属性调用 CreateWindowEx 并没有给我想要的结果。

这是我的尝试(此处未显示消息循环和窗口过程)

    hwnd = CreateWindowEx(
    WS_EX_TOOLWINDOW | WS_EX_TOPMOST | WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_CONTROLPARENT,
    "#32770","Window",
    WS_OVERLAPPEDWINDOW | WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_BORDER | DS_3DLOOK,
    0, /* x */
    0, /* y */
    GetSystemMetrics(SM_CXSCREEN), /* width */
    50, /* height */
    NULL,NULL,hInstance,NULL);

任何想法都非常感谢,谢谢!

4

1 回答 1

0

Apparently this window type is called an appbar I created window with style WS_EX_TOOLWINDOW and WS_POPUP and followed that MSDN link

My code now is

APPBARDATA abd = {0};
abd.cbSize = sizeof(APPBARDATA);
abd.hWnd = hwnd;
abd.uCallbackMessage = 888;

SHAppBarMessage(ABM_NEW, &abd);

abd.uEdge = ABE_TOP;
abd.rc.left = 0;
abd.rc.right = GetSystemMetrics(SM_CXSCREEN);
abd.rc.top = 0;
abd.rc.bottom = height;
SHAppBarMessage(ABM_QUERYPOS, &abd);

abd.rc.bottom = abd.rc.top + height;
SHAppBarMessage(ABM_SETPOS, &abd);

Have fun coding guys

于 2021-08-23T13:38:17.783 回答