1. 程式人生 > >VC隱藏工作列,讓視窗全屏

VC隱藏工作列,讓視窗全屏

這裡我選用實現對話方塊的全屏的方案是:

1 隱藏工作列

2 將對話方塊最大化顯示並且去掉標題欄

一  單獨隱藏工作列,很容易實現

缺陷:隱藏後任務欄所佔據的空間還是沒有騰出來

程式碼如下:
HWND hWnd;
hWnd = FindWindow("Shell_TrayWnd",NULL);
ShowWindow(hWnd,SW_HIDE);

設定工作列自動隱藏 ,自動隱藏後還讓視窗自動擴充套件而佔滿了任務原先所在區域,

缺陷:滑鼠接近桌面最下邊的時候,工作列又會自動恢復

程式碼如下:

#ifndef ABM_SETSTATE
#define ABM_SETSTATE 0x0000000a
#endif

APPBARDATA apBar;
memset(&apBar, 0, sizeof(apBar));
apBar.cbSize = sizeof(apBar);
apBar.hWnd = hWnd;
if(apBar.hWnd != NULL)
{
apBar.lParam = ABS_AUTOHIDE | ABS_ALWAYSONTOP;
SHAppBarMessage(ABM_SETSTATE, &apBar); //設定工作列自動隱藏
}

隱藏工作列設定工作列自動隱藏兩者結合就能解決問題:

void HideTaskBar(BOOL bHide)
{
int nCmdShow;
HWND hWnd;
LPARAM lParam;

hWnd = FindWindow("Shell_TrayWnd",NULL);
if(bHide == TRUE)
{
nCmdShow = SW_HIDE;
lParam = ABS_AUTOHIDE | ABS_ALWAYSONTOP;
}
else
{
nCmdShow = SW_SHOW;
lParam = ABS_ALWAYSONTOP;
}

ShowWindow(hWnd,nCmdShow);//隱藏工作列


#ifndef ABM_SETSTATE
#define ABM_SETSTATE 0x0000000a
#endif

APPBARDATA apBar;
memset(&apBar, 0, sizeof(apBar));
apBar.cbSize = sizeof(apBar);
apBar.hWnd = hWnd;
if(apBar.hWnd != NULL)
{
apBar.lParam = lParam;
SHAppBarMessage(ABM_SETSTATE, &apBar); //設定工作列自動隱藏
}
}

二  隱藏了工作列然後將對話方塊最大化顯示並且去掉標題欄就能實現全屏了:

在OnInitDialog()新增 如下程式碼:

ModifyStyle(WS_CAPTION,0,0);

SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0);

當然這裡要注意這兩個步驟的順序,不能顛倒。

這裡還有一個很簡單的方法:

獲得桌面的大小,將對話方塊大小設定為桌面大小並且去掉對話方塊標題欄。

在OnInitDialog()中新增

1 獲得桌面大小

一種方法,先取得桌面視窗控制代碼HWND hDeskTopWnd=::GetDesktopWindow();

接著取得

CRect rect;

::GetWindowRect(hDeskTopWnd, &rect);

第二種方法 獲得螢幕當前畫素

int x= GetSystemMetrics(SM_CXSCREEN);

int y= GetSystemMetrics(SM_CYSCREEN);

2

ModifyStyle(WS_CAPTION,0,0);//去掉標題欄

SetWindowPos(&wndTopMost, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, SWP_SHOWWINDOW);

//SetWindowPos(&wndTopMost, 0, 0, x, y, SWP_SHOWWINDOW);//這種應該是這樣,還沒試驗過^_^

以上都是簡單的實現,先要變換控制元件位置和大小還要另外再做處理