您的位置:首页 > 编程语言

编程技巧20法 (上)

2015-06-30 14:20 316 查看
[代码如下]

编程技巧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);

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

{

m_pValue=new int [dss_ListCount];

for (int x=0;x<dss_ListCount;x++)

{

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

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

}

delete []m_pValue ;

}

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

{

m_pValue=new int [dss_ListCount];

for (int x=0;x<dss_ListCount;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. 如 何 给 树 控 件 加 入 工 具 提 示

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

if (!m_ctrlTree.Create(WS_CHILD|WS_VISIBLE|

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

TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_SHOWSELALWAYS|TVS_INFOTIP,CRect(0,0,0,0),&m_wndTreeBar,100))

{

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

return -1 ;

}

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

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

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

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

ON_NOTIFY(TVN_GETINFOTIP,100,OnGetInfoTip)

l 最 后 加 入 呼 应 涵 数 处 理 :

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<atlbase.h>

#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<windows.h>

#include<shlobj.h>

//浏览目录.

void BrowseFolder(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();

}

}

}

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

void SearchFolder(TCHAR *path)

{

WIN32_FIND_DATA FindFileData ;

HANDLE hFind ;

TCHAR filename[MAX_PATH+256];

TCHAR pathbak[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 ;

l 禁 止 系 统 热 键

//屏蔽掉系统键

SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true ,&bOld,SPIF_UPDATEINIFILE);

l 启 用 系 统 热 键

//恢复系统热键

SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false ,&bOld,SPIF_UPDATEINIFILE);

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

l 隐 藏 系 统 任 务 栏

//隐藏WINDOWS系统任务栏

:: ShowWindow(:: FindWindow("Shell_TrayWnd" ,NULL),SW_HIDE);

l 显 示 系 统 任 务 栏

//恢复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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: