1、VC+编程技巧20法VC+编程技巧20法 1. 如何激活当前屏幕保护程序/激活当前屏幕保护程序,jingzhouxuPostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0);2. 如何禁止/启用屏幕保护及电源管理staticUINTdss_GetList=SPI_GETLOWPOWERTIMEOUT,SPI_GETPOWEROFFTIMEOUT,SPI_GETSCREENSAVETIMEOUT;staticUINTdss_SetList=SPI_SETLOWPOWERTIMEOUT,SPI_SETPOWEROFFTIMEOUT,SPI_SETSCREENSAVETI
2、MEOUT;staticconstintdss_ListCount=_countof(dss_GetList); 禁止屏幕保护及电源管理m_pValue=newintdss_ListCount;for(intx=0;xdss_ListCount;x+)/禁止屏幕保护及电源管理VERIFY(SystemParametersInfo(dss_SetListx,0,NULL,0);deletem_pValue; 启用屏幕保护及电源管理m_pValue=newintdss_ListCount;for(intx=0;xlParam;/对应每个条目的数据HTREEITEMhItem=pTVTipInfo-
3、hItem;CStringtip;HTREEITEMhRootItem=m_chassisTree.GetRootItem();if(hRootItem!=pTVTipInfo-hItem)tip=树结点的提示;elsetip=树根上的提示;strcpy(pTVTipInfo-pszText,(LPCTSTR)tip);5. 如何获取系统信息框的路径#include#defineIDS_REG_KEY_MSINFO_PATH1_T(SoftwareMicrosoftSharedToolsMSInfo)#defineIDS_REG_KEY_MSINFO_PATH2_T(SoftwareMicro
4、softSharedToolsLocation)#defineIDS_REG_VAL_MSINFO_PATH1_T(Path)#defineIDS_REG_VAL_MSINFO_PATH2_T(MSInfo)#defineIDS_MSINFO_EXE_NAME_T(MSInfo32.exe)/.BOOLGetSysInfoPath(CString&strPath)strPath.Empty();LPTSTRpszPath=strPath.GetBuffer(MAX_PATH);CRegKeyreg;DWORDdwSize=MAX_PATH;LONGnRet=reg.Open(HKEY_LOCA
5、L_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);#elsenRet=reg.QueryValue(pszPath,IDS_REG_VAL_MSINFO_PATH1,&dwSize);#endifreg.Close();/如果第一次寻找失败,则进行第二次寻找if(nRet!=ERROR_S
6、UCCESS)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);#elsereg.QueryValue(pszPath,IDS_REG_VAL_MSINFO_PATH2,&dwSize);#endif/路径名不包括EXE文件名if(nRet=ERROR_SUCCESS)VERIFY(:PathAppen
7、d(pszPath,IDS_MSINFO_EXE_NAME);reg.Close();strPath.ReleaseBuffer();strPath.FreeExtra();/检查文件是否有效.return:PathFileExists(strPath);6. 如何直接运行一个资源中的程序boolRun()CFilef;char*pFileName=Execution.exe;if(!f.Open(pFileName,CFile:modeCreate|CFile:modeWrite,NULL)AfxMessageBox(Cannotcreatefile!);return0;CStringpat
8、h=f.GetFilePath();HGLOBALhRes;HRSRChResInfo;/获取应用实例HINSTANCEinsApp=AfxGetInstanceHandle();/寻找EXE资源名hResInfo=FindResource(insApp,(LPCSTR)IDR_EXE4,EXE);hRes=LoadResource(insApp,hResInfo);/LoaditDWORDdFileLength=SizeofResource(insApp,hResInfo);/计算EXE文件大小f.WriteHuge(LPSTR)hRes,dFileLength);/写入临时文件f.Clos
9、e();HINSTANCEHINSsd=ShellExecute(NULL,open,path,NULL,NULL,SW_SHOWNORMAL);/运行它.return1;7. 如何遍历整个目录#include#include/浏览目录.void BrowseFolder(void)TCHARpathMAX_PATH;BROWSEINFObi=0;bi.lpszTitle=(递归调用所有目录);LPITEMIDLISTpidl=SHBrowseForFolder(&bi);if(pidl!=0)/获取目录路径SHGetPathFromIDList(pidl,path);/设置为当前路径SetC
10、urrentDirectory(path);/搜索所有子目录SearchFolder(path);/释放内存IMalloc*imalloc=0;if(SUCCEEDED(SHGetMalloc(&imalloc)imalloc-Free(pidl);imalloc-Release();/搜索其下所有子目录及文件.void SearchFolder(TCHAR*path)WIN32_FIND_DATAFindFileData;HANDLE hFind;TCHAR filenameMAX_PATH+256;TCHAR pathbakMAX_PATH;/复制初始用户选择目录strcpy(pathba
11、k,path);/寻找第一个文件hFind=FindFirstFile(*.*,&FindFileData);/搜索所有文件及子目录doif(hFind!=INVALID_HANDLE_VALUE)/如果是当前目录或父目录,跳过if(!(strcmp(FindFileData.cFileName,.)|!(strcmp(FindFileData.cFileName,.)continue;/恢复初始用户选择目录strcpy(path,pathbak);/列出所有发现的文件sprintf(path,%s%s,path,FindFileData.cFileName);/如果SetCurrentDir
12、ectory成功的话,则它是一个目录,递归调用继续搜索子目录if(SetCurrentDirectory(path)SearchFolder(path); /插入文件及路径名到列表框m_listbox_hwnd中 SendMessage(m_listbox_hwnd,LB_ADDSTRING,0,path); /right=rectClock.left;returnFALSE;returnTRUE;/*/*名称:WinAnimation/*作者:徐景周(jingzhou_xu)/*功能:显示窗口动画效果的涵数/*voidCScreenSnapDlg:WinAnimation(BOOLShowF
13、lag)CRectrect(0,0,0,0);/查找托盘窗口CWnd*pWnd=FindWindow(Shell_TrayWnd,NULL);if(pWnd)pWnd-GetWindowRect(rect);EnumChildWindows(pWnd-m_hWnd,FindTrayWnd,(LPARAM)&rect);/rect为托盘区矩形CRectrcWnd;GetWindowRect(rcWnd);if(ShowFlag) /窗体滑向系统区DrawAnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rcWnd,rect);else /窗体从系统区滑出Draw
14、AnimatedRects(GetSafeHwnd(),IDANI_CAPTION,rect,rcWnd);用法如下:if(IsWindowVisible() /窗体是否已隐藏ShowWindow(SW_HIDE);/先隐藏窗体WinAnimation(true); /窗体动画滑入到系统区中elseWinAnimation(false); /窗体动画从系统区滑出ShowWindow(SW_SHOW);12. 如何判断当前操作系统的版本/-/判断操作系统涵数及变量,jingzhouxutypedefenumtagWin32SysTypeWindows32s,WindowsNT3,Windows9
15、5,Windows98,WindowsME,WindowsNT4,Windows2000,WindowsXPWin32SysType;/判断操作系统涵数及变量,jingzhouxuWin32SysTypeIsShellSysType()Win32SysTypeShellType;DWORDwinVer;OSVERSIONINFO*osvi;winVer=GetVersion();if(winVerdwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(osvi);if(osvi-dwMajorVersion=4L)ShellType=Win
16、dowsNT4;elseif(osvi-dwMajorVersion=5L&osvi-dwMinorVersion=0L)ShellType=Windows2000;elseif(osvi-dwMajorVersion=5L&osvi-dwMinorVersion=1L)ShellType=WindowsXP;free(osvi);elseif(LOBYTE(LOWORD(winVer)dwOSVersionInfoSize=sizeof(OSVERSIONINFO);GetVersionEx(osvi);if(osvi-dwMajorVersion=4L&osvi-dwMinorVersion=10L)ShellType=Windows98;elseif(osvi-dwMajorVersion=4L&osvi-dwMinorVersion=90L)ShellType=WindowsME;free(osvi);returnShellType;/-13. 如何在指14. 定矩形框内水平/垂直显示多行文字/