VC++ 常用API 2

一、创建桌面快捷方式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值