当然可以实现拉.不过,在桌面的每个边缘,你只能有一个自动隐藏的appbar;不过你的代码中有重复.
BOOL CTryDlgDlg::RegisterAccessBar(HWND hwndAccessBar, BOOL fRegister)
{
APPBARDATA abd;
// Specify the structure size and handle to the appbar.
abd.cbSize = sizeof(APPBARDATA);
abd.hWnd = hwndAccessBar; if (fRegister)
{
// Provide an identifier for notification messages.
abd.uCallbackMessage = APPBAR_CALLBACK; // Register the appbar.
//请删除这里的代码
// if (!SHAppBarMessage(ABM_NEW, &abd))
// return FALSE; abd.uEdge = ABE_RIGHT;
// 消息ABM_SETAUTOHIDEBAR本身就有注册的意思.所以你不能注册两回
BOOL RET = SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd);
// g_uSide = ABE_TOP; // default edge
}
else
{
// Unregister the appbar.
SHAppBarMessage(ABM_REMOVE, &abd);
}
return TRUE;
}
BOOL CTryDlgDlg::RegisterAccessBar(HWND hwndAccessBar, BOOL fRegister)
{
APPBARDATA abd;
// Specify the structure size and handle to the appbar.
abd.cbSize = sizeof(APPBARDATA);
abd.hWnd = hwndAccessBar; if (fRegister)
{
// Provide an identifier for notification messages.
abd.uCallbackMessage = APPBAR_CALLBACK; // Register the appbar.
//请删除这里的代码
// if (!SHAppBarMessage(ABM_NEW, &abd))
// return FALSE; abd.uEdge = ABE_RIGHT;
// 消息ABM_SETAUTOHIDEBAR本身就有注册的意思.所以你不能注册两回
BOOL RET = SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd);
// g_uSide = ABE_TOP; // default edge
}
else
{
// Unregister the appbar.
SHAppBarMessage(ABM_REMOVE, &abd);
}
return TRUE;
}
不行嘛!还是隐藏不掉。你能不能把你做过的贴出来。
或者email给我[email protected],谢谢啦!
SHAppBarMessage(ABM_SETAUTOHIDEBAR, &abd);
的作用只是通知桌面自己是个隐藏栏,要桌面对此作出调整。
要真正隐藏只能自己实现,一般来说是将自己MoveWindow缩到边界上去。
SHAppBarMessage的其他消息也只有通知的义务,而不对窗口本身进行操作。
协议的遵守要靠你自己完成,你可以遵守也可以不遵守,总之窗口是你自己的。MSDN里有大大小小的错误和模糊的地方,实际的情况自己编过才知道。
哦,下班啰...