文章类型: VC&C++
关键词: VC获得桌面工作区与任务栏大小(宽度与高度),获取和设置任务栏的显示与隐藏
内容摘要: VC获得桌面工作区与任务栏大小(宽度与高度),获取和设置任务栏的显示与隐藏

VC获得桌面工作区与任务栏大小(宽度与高度),获取和设置任务栏的显示与隐藏

2017/9/6 17:04:14    来源:apple    阅读:

获得桌面工作区大小,即不包括任务栏的大小,制作窗口全屏时经常用到,方法如下:


RECT rt;

 SystemParametersInfo(SPI_GETWORKAREA,0,(PVOID)&rt,0);


获得任务栏高度与宽度方法有二:


1.判断位置


       RECT rt;


SystemParametersInfo(SPI_GETWORKAREA,   0,   &rt,   0)    // 获得工作区大小


  //任务栏在下面的高度  


  int   y   =   ::GetSystemMetrics(SM_CYSCREEN)-rt.Height();  


  //上面  


  int   y   =   rt.top;  


 // 左  


  int   y   =   rt.left;  


 // 右  


  int   y   =   ::GetSystemMetrics(SM_CXSCREEN)-rt.Width();


2.得到高度,然后可判断位置


CRect   rect;  


CWnd *pWndPrev=   FindWindow("Shell_TrayWnd", "");     // 调用本对象即this的Findwindow函数,返回窗口指针


  pWndPrev->GetWindowRect(&rect); 


   //rect.bottom-rect.top   就是任务栏的高度  


if(rect.top>0)   //下面


if(rect.left>0)   //左面 


或者


CWnd*   p   =   NULL   ;   

       HWND   hwnd   =   ::FindWindow("Shell_TrayWnd",NULL)   ;     // 调用公有的FindWindow函数,返回窗口句柄

       if(hwnd)   

       {   

                p   =   CWnd::FromHandle(hwnd)   ;   

       }   

       p->GetWindowRect();//包含有宽度

3.获取任务栏的状态

HWND hWnd;
	hWnd = ::FindWindow("Shell_TrayWnd", NULL);// handle to window
	if (hWnd)
	{
		CWnd *p = CWnd::FromHandle(hWnd);
		bTrayWndStateFlag = p->IsWindowVisible();//目的:启动程序时,用来保存任务栏的当前状态(运行当前程序前的任务栏的状态)。Add by 石民生 on 2017.09.06
	}

4.设置任务栏的状态

//Desc:在参数设置的系统设置选项卡中加入了程序运行任务栏是否自动隐藏
	bool bShowTaskBar = false;
	GetPrivateProfileString("SuperholterSet", "HideTaskbar", "0", chTmp, 10, m_szIniPath);
	if (strcmp(chTmp, "1") == 0)
	{
		bShowTaskBar = false;//自动隐藏任务栏
	}
	else
	{
		bShowTaskBar = true;//显示任务栏
	}	

	SetTaskBarState(bShowTaskBar);//对以上代码进行优化,当程序运行时根据设置来决定是否自动隐藏任务栏
	
	
	..................
	
	/**
*函数名:SetTaskBarState
*功能:自动显示隐藏任务栏
*参数说明:bAutoHideFlag,当值为true时,自动隐藏任务栏;当值为false时,取消自动隐藏,任务栏恢复正常
*返回值:void
*说明:对源代码进行优化,修改,重构
*日期:2016-8-17-10:22
*作者:sms
*/
void CMainFrame::SetTaskBarState(bool bShowTastBarFlag)
{
	int nCmdShow;
	HWND hWnd;
	LPARAM lParam;
	hWnd = ::FindWindow("Shell_TrayWnd", NULL);

	if (bShowTastBarFlag)
	{
		nCmdShow = SW_SHOW;
		lParam = ABS_ALWAYSONTOP;//取消自动隐藏
	}
	else
	{
		nCmdShow = SW_HIDE;
		lParam = ABS_AUTOHIDE | 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); //设置任务栏自动隐藏 
	}
}


↑ 上一篇文章:(VC++) CString Format的用法 关键词:(VC++),CString,Format,用法,Win.. 发布日期:2017/9/4 14:42:27
↓ 下一篇文章:从java到C++——new和delete的动态内存管理 关键词:从java到C++——new和delete的动态内存管理 发布日期:2017/9/8 9:25:39
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......