VC實現顯示、自動隱藏工作列(SHAppBarMessage)
一、顯示和隱藏工作列
要想對工作列進行操作,首先當然需要獲得工作列的控制代碼,所以首先利用FindWindow獲取控制代碼,再操作
示例程式碼:
1、隱藏工作列
HWND hWnd = FindWindow(_T("Shell_TrayWnd"),NULL);
ShowWindow(hWnd,SW_HIDE);
2、顯示工作列
HWND hWnd = FindWindow(_T("Shell_TrayWnd"),NULL);
ShowWindow(hWnd,SW_SHOW);
二、自動隱藏工作列和取消自動隱藏工作列(隱藏於自動隱藏不同)
需要利用一API函式:SHAppBarMessage
UINT_PTR SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData
);
引數說明:
dwMessage 可以為下列引數
ABM_ACTIVATE 啟用一個 appbar
ABM_GETAUTOHIDEBAR 檢索螢幕邊緣的 appbar
ABM_GETSTATE 檢索最頂層的Microsoft Windows工作列
ABM_GETTASKBARPOS 檢索工作列
ABM_NEW 註冊一個新的appbar,該系統併發送一訊息給appbar
ABM_QUERYPOS appbar 大小和螢幕位置
ABM_REMOVE 取消註冊一個 appbar,並從系統內部列表移出
ABM_SETAUTOHIDEBAR 在螢幕邊緣註冊或取消註冊appbar
ABM_SETPOS 設定appbar 的大小和螢幕位置
ABM_SETSTATE 設定appbar為最頂層
ABM_WINDOWPOSCHANGED 當appbar得狀態傳送改變時向系統傳送訊息
pData
一個APPBARDATA結構體
示例程式碼:
void AutoHideTaskBar(BOOL bHide)
{
//這三句視情況加於不加
#ifndef ABM_SETSTATE
#define ABM_SETSTATE 0x0000000a
#endif
LPARAM lParam;
if(bHide == TRUE)
{
lParam = ABS_AUTOHIDE;//自動隱藏
}
else
{
lParam = ABS_ALWAYSONTOP;//取消自動隱藏
}
APPBARDATA apBar;
memset(&apBar,0,sizeof(apBar));
apBar.cbSize = sizeof(apBar);
apBar.hWnd = FindWindow("Shell_TrayWnd", NULL);
if(apBar.hWnd != NULL)
{
apBar.lParam = lParam;
SHAppBarMessage(ABM_SETSTATE,&apBar); //設定工作列自動隱藏
}
}
呼叫 AutoHideTaskBar(TRUE);//or
AutoHideTaskBar(FALSE);//