VC++编程技巧20法.docx

上传人:b****2 文档编号:24312461 上传时间:2023-05-26 格式:DOCX 页数:34 大小:27.88KB
下载 相关 举报
VC++编程技巧20法.docx_第1页
第1页 / 共34页
VC++编程技巧20法.docx_第2页
第2页 / 共34页
VC++编程技巧20法.docx_第3页
第3页 / 共34页
VC++编程技巧20法.docx_第4页
第4页 / 共34页
VC++编程技巧20法.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

VC++编程技巧20法.docx

《VC++编程技巧20法.docx》由会员分享,可在线阅读,更多相关《VC++编程技巧20法.docx(34页珍藏版)》请在冰豆网上搜索。

VC++编程技巧20法.docx

VC++编程技巧20法

VC++编程技巧20法

1.如何激活当前屏幕保护程序

// 激活当前屏幕保护程序, jingzhou xu

PostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0);

2.如何禁止/启用屏幕保护及电源管理

static UINT dss_GetList[] = {SPI_GETLOWPOWERTIMEOUT, SPI_GETPOWEROFFTIMEOUT, SPI_GETSCREENSAVETIMEOUT};

static UINT dss_SetList[] = {SPI_SETLOWPOWERTIMEOUT, SPI_SETPOWEROFFTIMEOUT, SPI_SETSCREENSAVETIMEOUT};

static const int dss_ListCount = _countof(dss_GetList);

禁止屏幕保护及电源管理

{

m_pValue = new int[dss_ListCount];

for (int x=0;x

{

// 禁止屏幕保护及电源管理

VERIFY(SystemParametersInfo (dss_SetList[x], 0, NULL, 0));

}

delete[] m_pValue;

}

启用屏幕保护及电源管理

{

m_pValue = new int[dss_ListCount];

for (int x=0;x

{

//启用屏幕保护及电源管理

VERIFY(SystemParametersInfo (dss_SetList[x], m_pValue[x], NULL, 0));

}

delete[] m_pValue;

}

3.如何激活和关闭IE浏览器

//激活并打开IE

void lounchIE()

{

  HWND h=FindWindowEx(NULL,NULL,NULL,

                      "Microsoft Internet Explorer") ;

  ShellExecute(h,"open","C:

\\simple.html",

               NULL,NULL,SW_SHOWNORMAL);

}

//关闭IE及其它应用

void CloseIE()

{

  int app=BSM_APPLICATIONS;

  unsigned long  bsm_app=(unsigned long )app;

  BroadcastSystemMessage(BSF_POSTMESSAGE,&bsm_app,

                         WM_CLOSE,NULL,NULL);

}

4.如何给树控件加入工具提示

首先给树控件加入TVS_INFOTIP属性风格,如下所示:

if (!

m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|

TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP,

 //加入提示TVS_INFOTIP,jingzhou xu(树控件ID:

100)

CRect(0, 0, 0, 0), &m_wndTreeBar, 100))

{

TRACE0("Failed to create instant bar child\n");

return -1;

}

其次加入映射消息声明,如下所示:

afx_msg void OnGetInfoTip(NMHDR* pNMHDR,LRESULT* pResult);      

//树控件上加入提示消息,jingzhou xu    

ON_NOTIFY(TVN_GETINFOTIP, 100, OnGetInfoTip) 

 //树控件条目上加入提示,jingzhou xu

最后加入呼应涵数处理:

void CCreateTreeDlg:

:

OnGetInfoTip(NMHDR* pNMHDR, 

                                    LRESULT* pResult) 

  {

  *pResult = 0;

  NMTVGETINFOTIP* pTVTipInfo = (NMTVGETINFOTIP*)pNMHDR;

  LPARAM itemData = (DWORD) pTVTipInfo->lParam;

  //对应每个条目的数据

  HTREEITEM hItem = pTVTipInfo->hItem;

  CString tip;

  HTREEITEM hRootItem = m_chassisTree.GetRootItem();

  if (hRootItem !

= pTVTipInfo->hItem)

  {

    tip = "树结点的提示";

  }

  else

  {

    tip = "树根上的提示";

  }

  strcpy(pTVTipInfo->pszText, (LPCTSTR) tip);

 }

5.如何获取系统信息框的路径

#include 

#define IDS_REG_KEY_MSINFO_PATH1 _T( "Software\\Microsoft\\Shared Tools\\MSInfo" )

#define IDS_REG_KEY_MSINFO_PATH2 _T( "Software\\Microsoft\\Shared Tools Location" )

#define IDS_REG_VAL_MSINFO_PATH1 _T( "Path" )

#define IDS_REG_VAL_MSINFO_PATH2 _T( "MSInfo" )

#define IDS_MSINFO_EXE_NAME      _T( "MSInfo32.exe" )

//...

BOOL GetSysInfoPath( CString& strPath )

{        

    strPath.Empty();

    LPTSTR  pszPath = strPath.GetBuffer( MAX_PATH );

        

    CRegKey reg;

    DWORD   dwSize  = MAX_PATH;

    LONG    nRet    = reg.Open( HKEY_LOCAL_MACHINE, IDS_REG_KEY_MSINFO_PATH1, KEY_READ );

                

    // 在注册表中寻找第一个"MSInfo32.exe" 位置

    if ( nRet == ERROR_SUCCESS )

    {

        #if ( _MFC_VER >= 0x0700 )

            nRet = reg.QueryStringValue( IDS_REG_VAL_MSINFO_PATH1, pszPath, &dwSize );

        #else

            nRet = reg.QueryValue( pszPath, IDS_REG_VAL_MSINFO_PATH1, &dwSize );

        #endif

        reg.Close();

    }

    

    // 如果第一次寻找失败,则进行第二次寻找

    if ( nRet !

= ERROR_SUCCESS )

    {

        nRet = reg.Open( HKEY_LOCAL_MACHINE, IDS_REG_KEY_MSINFO_PATH2, KEY_READ );

        if ( nRet == ERROR_SUCCESS )

        {

            #if ( _MFC_VER >= 0x0700 )

                reg.QueryStringValue( IDS_REG_VAL_MSINFO_PATH2, pszPath, &dwSize );

            #else

                reg.QueryValue( pszPath, IDS_REG_VAL_MSINFO_PATH2, &dwSize );

            #endif

            

            // 路径名不包括EXE文件名

            if ( nRet == ERROR_SUCCESS )

                VERIFY( :

:

PathAppend( pszPath, IDS_MSINFO_EXE_NAME ) );

            reg.Close();

        }

    }

        

    strPath.ReleaseBuffer();

    strPath.FreeExtra();

    

    // 检查文件是否有效.    

    return :

:

PathFileExists( strPath );

}

6.如何直接运行一个资源中的程序

bool Run()

   {

CFile f; 

char* pFileName = "Execution.exe";

if( !

f.Open( pFileName, CFile:

:

modeCreate | CFile:

:

modeWrite, NULL ) )

{

AfxMessageBox("Can not create file!

");

return 0;

}

        CString path = f.GetFilePath();

HGLOBAL hRes;

HRSRC hResInfo;

     //获取应用实例  

HINSTANCE insApp = AfxGetInstanceHandle();

     //寻找EXE资源名

hResInfo = FindResource(insApp,(LPCSTR)IDR_EXE4,"EXE");

hRes = LoadResource(insApp,hResInfo );   // Load it

DWORD dFileLength = SizeofResource( insApp, hResInfo );  //计算EXE文件大小 

f.WriteHuge((LPSTR)hRes,dFileLength);  //写入临时文件 

f.Close();

HINSTANCE HINSsd = ShellExecute(NULL, "open",path, NULL, NULL, SW_SHOWNORMAL);> //运行它.  

return 1;

}

7.如何遍历整个目录

#include 

#include 

//浏览目录.

voidBrowseFolder( void )

{

TCHAR path[MAX_PATH];

BROWSEINFO bi = { 0 };

bi.lpszTitle = ("递归调用所有目录");

LPITEMIDLIST pidl = SHBrowseForFolder ( &bi );

if ( pidl !

= 0 )

{

// 获取目录路径

SHGetPathFromIDList ( pidl, path );

//设置为当前路径

SetCurrentDirectory ( path );

//搜索所有子目录

SearchFolder( path );

// 释放内存

IMalloc * imalloc = 0;

if ( SUCCEEDED( SHGetMalloc ( &imalloc )) )

{

imalloc->Free ( pidl );

imalloc->Release ( );

}

}

//搜索其下所有子目录及文件.

voidSearchFolder( TCHAR * path )

{

WIN32_FIND_DATA FindFileData;

HANDLEhFind;

TCHARfilename[ MAX_PATH + 256 ];

TCHARpathbak[ MAX_PATH ];

//复制初始用户选择目录

strcpy( pathbak, path );

//寻找第一个文件

hFind = FindFirstFile ( "*.*", &FindFileData );

//搜索所有文件及子目录

do

{

if ( hFind !

= INVALID_HANDLE_VALUE )

{

//如果是当前目录或父目录,跳过

if ( !

 ( strcmp( FindFileData.cFileName, "." ) ) || !

 ( strcmp( FindFileData.cFileName, ".." ) ) )

{

continue;

}

//恢复初始用户选择目录

strcpy( path, pathbak );

//列出所有发现的文件

sprintf( path, "%s\\%s", path, FindFileData.cFileName );

//如果 SetCurrentDirectory 成功的话,则它是一个目录,递归调用继续搜索子目录

if ( ( SetCurrentDirectory( path ) ) )

{

SearchFolder( path );

}

          //插入文件及路径名到列表框m_listbox_hwnd中

           SendMessage( m_listbox_hwnd, LB_ADDSTRING, 0, path ); 

      //<--INSERT WHAT YOU WANT DONE HERE!

}

}

while ( FindNextFile ( hFind, &FindFileData ) && hFind !

= INVALID_HANDLE_VALUE );

FindClose ( hFind );

}

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.如何实现窗口到系统区图标11.间的动画效果

//*********************************************************

//* 名称:

FindTrayWnd

//* 作者:

徐景周(jingzhou_xu@)

//* 功能:

在显示窗体动画效果前,先寻找系统区位置

//**********************************************************

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@)

//* 功能:

显示窗口动画效果的涵数

//*********************************************************

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

}

12.如何判断当前操作系统的版本

//--------------------------------------------------------

//判断操作系统涵数及变量,jingzhou xu

typedef enum tagWin32SysType{

Windows32s,

WindowsNT3,

Windows95,

Windows98,

WindowsME,

WindowsNT4,

Windows2000,

WindowsXP

}Win32SysType;

//判断操作系统涵数及变量,jingzhou xu

Win32SysType IsShellSysType()

{

Win32SysType  ShellType;

DWORD winVer;

OSVERSIONINFO *osvi;

winVer=GetVersion();

if(winVer<0x80000000){/*NT */

ShellType=WindowsNT3;

osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));

if (osvi!

=NULL){

memset(osvi,0,sizeof(OSVERSIONINFO));

osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);

GetVersionEx(osvi);

if(osvi->dwMajorVersion==4L)ShellType=WindowsNT4;

else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==0L)ShellType=Windows2000;

else if(osvi->dwMajorVersion==5L&&osvi->dwMinorVersion==1L)ShellType=WindowsXP;

free(osvi);

}

}

else if  (LOBYTE(LOWORD(winVer))<4)

ShellType=Windows32s;

else{

ShellType=Windows95;

osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));

if (osvi!

=NULL){

memset(osvi,0,sizeof(OSVERSIONINFO));

osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);

GetVersionEx(osvi);

if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)ShellType=Windows98;

else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)ShellType=WindowsME;

free(osvi);

}

}

return ShellType;

}

//---------------------------------------------------------------

13.如何在指14.定矩形框内水平/垂直显示多行文字

////////////////////////////////////////////////

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1