#include <initguid.h>
#include <imaging.h>
#pragma comment (lib,"Ole32.lib")
HRESULT hr ; //返回结果
IImagingFactory * pImagingFactory =NULL; //Image工厂接口对象
IImagingFactory * pImagingFactory2 =NULL; //Image工厂接口对象
IImagingFactory * pImagingFactory3 =NULL; //Image工厂接口对象
IImage * pImage = NULL; //Image接口对象;
IImage * pImage2 = NULL; //Image接口对象;
IImage * pImage3 = NULL; //Image接口对象;
LPCTSTR szFileName = L"\\000.png"; //图象文件notice.png//Windows Embedded.jpg//test.jpg
LPCTSTR szFileName2 = L"\\disconn.png"; //图象文件notice.png//Windows Embedded.jpg//test.jpg
LPCTSTR szFileName3 = L"\\conn.png"; //图象文件notice.png//Windows Embedded.jpg//test.jpg
//初始化COM环境
if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
{
TRACE(L"COINIT_MULTITHREADED ERROR");
return;
}
///
//得到Image工厂接口对象
hr = CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void**) &pImagingFactory);
if (FAILED(hr))
{
TRACE(L"IMAGE FACTORY CREATED ERROR");
goto finish;
}
//加载图象文件到IImage接口对象中
hr = pImagingFactory->CreateImageFromFile(szFileName,&pImage);
if (FAILED(hr))
{
TRACE(L"IMAGE LOAD ERROR");
goto finish;
}
///
//得到Image工厂接口对象
hr = CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void**) &pImagingFactory2);
if (FAILED(hr))
{
TRACE(L"IMAGE FACTORY CREATED ERROR");
goto finish;
}
//加载图象文件到IImage接口对象中
hr = pImagingFactory->CreateImageFromFile(szFileName2,&pImage2);
if (FAILED(hr))
{
TRACE(L"IMAGE LOAD ERROR");
goto finish;
}
///
//得到Image工厂接口对象
hr = CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void**) &pImagingFactory3);
if (FAILED(hr))
{
TRACE(L"IMAGE FACTORY CREATED ERROR");
goto finish;
}
//加载图象文件到IImage接口对象中
hr = pImagingFactory->CreateImageFromFile(szFileName3,&pImage3);
if (FAILED(hr))
{
TRACE(L"IMAGE LOAD ERROR");
goto finish;
}
ImageInfo p,p2;
pImage->GetImageInfo(&p);
pImage2->GetImageInfo(&p2);
int i=p.Width;
int j=p.Height;
int g=p2.Width;
int h=p2.Height;
//开始绘制图象
//得到设备环境
{
HDC hdc=::GetDC(m_hWnd);
HBITMAP hBitmap = ::CreateCompatibleBitmap(hdc,i,j);
HDC hdcMem = ::CreateCompatibleDC(hdc);
HBITMAP Old_bitmap=(HBITMAP)::SelectObject(hdcMem,hBitmap);
CRect rect,rect2(20,20,84,84);
GetClientRect(&rect);
pImage->Draw(hdcMem,&rect,NULL);
/*HBITMAP hBitmap2 = ::CreateCompatibleBitmap(hdc,g,h);
HDC hdcMem2 = ::CreateCompatibleDC(hdc);
HBITMAP Old_bitmap2=(HBITMAP)::SelectObject(hdcMem2,hBitmap2);*/
if(!IsConn)
{
pImage2->Draw(hdcMem,&rect2,NULL);
IsConn=true;
}
else
{
pImage3->Draw(hdcMem,&rect2,NULL);
IsConn=false;
}
//pImage2->Draw(hdcMem,&rect2,NULL);
::SetBkMode(hdcMem,TRANSPARENT);
CString str;
str.Format(_T("%d"),ii);
::DrawText(hdcMem,str,str.GetLength(),&rect,DT_LEFT);
BitBlt(hdc,0,0,rect.Width(),rect.Height(),hdcMem,0,0,SRCCOPY);
::SelectObject(hdcMem,Old_bitmap);
//::SelectObject(hdcMem2,Old_bitmap2);
//::DeleteObject(hBitmap2);
::DeleteObject(hBitmap);
//::DeleteDC(hdcMem2);
::DeleteDC(hdcMem);
::ReleaseDC(m_hWnd,hdc);
}
//goto finish;
finish:
//释放IImage接口对象
if (pImage)
pImage->Release();
//释放IImagingFactory接口对象
if (pImagingFactory)
pImagingFactory->Release();
if (pImage2)
pImage2->Release();
//释放IImagingFactory接口对象
if (pImagingFactory2)
pImagingFactory2->Release();
if (pImage3)
pImage3->Release();
//释放IImagingFactory接口对象
if (pImagingFactory3)
pImagingFactory3->Release();
//释放程序占用的COM资源
CoUninitialize();