一、创建桌面快捷方式
#include < atlconv.h > void CreateShortcut(LPCTSTR lpszExe, LPCTSTR lpszLnk) { // 建立块捷方式 // 参数 lpszExe: EXE 文件全路径名 // 参数 lpszLnk: 快捷方式文件全路径名 ::CoInitialize( NULL ); IShellLink * psl = NULL; IPersistFile * ppf = NULL; HRESULT hr = ::CoCreateInstance( // 启动组件 CLSID_ShellLink, // 快捷方式 CLSID NULL, // 聚合用(注4) CLSCTX_INPROC_SERVER, // 进程内(Shell32.dll)服务 IID_IShellLink, // IShellLink 的 IID (LPVOID *)&psl ); // 得到接口指针 if ( SUCCEEDED(hr) ) { psl->SetPath( lpszExe ); // 全路径程序名 // psl->SetArguments(); // 命令行参数 // psl->SetDescription(); // 备注 // psl->SetHotkey(); // 快捷键 // psl->SetIconLocation(); // 图标 // psl->SetShowCmd(); // 窗口尺寸 // 根据 EXE 的文件名,得到目录名 TCHAR szWorkPath[ MAX_PATH ]; ::lstrcpy( szWorkPath, lpszExe ); LPTSTR lp = szWorkPath; while( *lp ) lp++; while( '//' != *lp ) lp--; *lp=0; // 设置 EXE 程序的默认工作目录 psl->SetWorkingDirectory( szWorkPath ); hr = psl->QueryInterface( // 查找持续性文件接口指针 IID_IPersistFile, // 持续性接口 IID (LPVOID *)&ppf ); // 得到接口指针 if ( SUCCEEDED(hr) ) { USES_CONVERSION; // 转换为 UNICODE 字符串 ppf->Save( T2COLE( lpszLnk ), TRUE ); // 保存 } } if ( ppf ) ppf->Release(); if ( psl ) psl->Release(); ::CoUninitialize(); }二、在窗口中显示一幅 JPG 图象。
void CxxxView::OnDraw(CDC* pDC) { ::CoInitialize(NULL); // COM 初始化 HRESULT hr; CFile file; file.Open( "c://aa.jpg", CFile::modeRead | CFile::shareDenyNone ); // 读入文件内容 DWORD dwSize = file.GetLength(); HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize ); LPVOID lpBuf = ::GlobalLock( hMem ); file.ReadHuge( lpBuf, dwSize ); file.Close(); ::GlobalUnlock( hMem ); IStream * pStream = NULL; IPicture * pPicture = NULL; // 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存 hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream ); ASSERT ( SUCCEEDED(hr) ); hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture ); ASSERT(hr==S_OK); long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米 pPicture->get_Width( &nWidth ); // 宽 pPicture->get_Height( &nHeight ); // 高 原大显示// CSize sz( nWidth, nHeight ); pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位 pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy, 0,nHeight,nWidth,-nHeight,NULL); 按窗口尺寸显示 // CRect rect; GetClientRect(&rect); // pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(), // 0,nHeight,nWidth,-nHeight,NULL); if ( pPicture ) pPicture->Release();// 释放 IPicture 指针 if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem ::CoUninitialize(); }