Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104647581
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-14 23:30:30

作者:徐景周 来源:赛迪网 

8.如何禁止/启用系统热键

bool bOld;
● 禁止系统热键
 //屏蔽掉系统键
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,&bOld,
SPIF_UPDATEINIFILE);
● 启用系统热键
//恢复系统热键	
SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,&bOld,
SPIF_UPDATEINIFILE);

9.如何隐藏/显示WINDOWS系统任务栏

● 隐藏系统任务栏

//隐藏WINDOWS系统任务栏
	::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);

● 显示系统任务栏

//恢复WINDOWS系统任务栏正常显示
::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);

10.如何实现窗口到系统区图标间的动画效果

//********************************************************************************
//* 名称:FindTrayWnd
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:在显示窗体动画效果前,先寻找系统区位置
//********************************************************************************
BOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam)
{
    TCHAR szClassName[256];
    GetClassName(hwnd, szClassName, 255);
    // 比较窗口类名
    if (_tcscmp(szClassName, _T("TrayNotifyWnd")) == 0)
    {
        CRect *pRect = (CRect*) lParam;
        ::GetWindowRect(hwnd, pRect);
        return TRUE;
    }
    // 当找到时钟窗口时表示可以结束了
    if (_tcscmp(szClassName, _T("TrayClockWClass")) == 0)
    {
        CRect *pRect = (CRect*) lParam;
        CRect rectClock;
        ::GetWindowRect(hwnd, rectClock);
        pRect->right = rectClock.left;
        return FALSE;
    }
    return TRUE;
}
//********************************************************************************
//* 名称:WinAnimation
//* 作者:徐景周(jingzhou_xu@163.net)
//* 功能:显示窗口动画效果的涵数
//********************************************************************************
void CScreenSnapDlg::WinAnimation(BOOL ShowFlag) 
{
    CRect rect(0,0,0,0);
    // 查找托盘窗口 
    CWnd* pWnd = FindWindow("Shell_TrayWnd", NULL);
    if (pWnd)
    {
        pWnd->GetWindowRect(rect);
		EnumChildWindows(pWnd->m_hWnd, FindTrayWnd, (LPARAM)&rect);
		//rect 为托盘区矩形
		CRect rcWnd;
		GetWindowRect(rcWnd);
		if(ShowFlag)		//窗体滑向系统区
		  DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rcWnd,rect);
		else		//窗体从系统区滑出
		  DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rect,rcWnd);
    }
}

用法如下:

if(IsWindowVisible())		 //窗体是否已隐藏
{
	ShowWindow(SW_HIDE);           //先隐藏窗体
	WinAnimation(true);	     //窗体动画滑入到系统区中 
}
else
{
WinAnimation(false);		 //窗体动画从系统区滑出 
	ShowWindow(SW_SHOW);
}

阅读(665) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~