编程技巧20法之四:禁止/启用系统热键

发表于:2007-06-17来源:作者:点击数: 标签:
8.如何禁止/启用系统热键 boolbOld; ●禁止系统热键 //屏蔽掉系统键 SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true,bOld, SPIF_UPDATEINIFILE); ●启用系统热键 //恢复系统热键 SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,bOld, SPIF_UP

          
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);
}

原文转自:http://www.ltesting.net