这里我选用实现对话框的全屏的方案是:
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);//这种应该是这样,还没试验过^_^
以上都是简单的实现,先要变换控件位置和大小还要另外再做处理