📄 picture.cpp
字号:
#include <ocidl.h>
#include <olectl.h>
#include "StdAfx.h"
#include "MyInterface.h"
#include "MyInterfaceDlg.h"
#include ".\picture.h"
CPicture::CPicture(void)
{
}
CPicture::~CPicture(void)
{
}
HRESULT CPicture::ShowPic(char *lpstrFile,HWND hWnd,UINT hong)
{
RECT rect;
HDC hDC_Temp=::GetDC(::GetDlgItem(hWnd,hong));
::GetClientRect(::GetDlgItem(hWnd,hong),&rect);
IPicture *pPic;
IStream *pStm;
BOOL bResult;
HANDLE hFile=NULL;
DWORD dwFileSize,dwByteRead;
//打开硬盘中的图形文件
hFile=CreateFile(lpstrFile,GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
////hBitmap=(HBITMAP)hFile;
if (hFile!=INVALID_HANDLE_VALUE)
{
dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数
if (dwFileSize==0xFFFFFFFF)
return E_FAIL;
}
else
{
return E_FAIL;
}
//分配全局存储空间
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
LPVOID pvData = NULL;
if (hGlobal == NULL)
return E_FAIL;
if ((pvData = GlobalLock(hGlobal)) == NULL)//分配内存块指针
return E_FAIL;
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
if(FAILED(bResult))
return E_FAIL;
OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度
OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//将图形输出到屏幕上(有点像BitBlt)
bResult=pPic->Render(hDC_Temp,0,0,rect.right - rect.left ,rect.bottom - rect.top,
0,hmHeight,hmWidth,-hmHeight,NULL); //拷贝图像时是从下到上,从左到右进行的
pPic->Release();
CloseHandle(hFile);//关闭打开的文件
::ReleaseDC(::GetDlgItem(hWnd,hong),hDC_Temp);
if (SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}
HRESULT CPicture::ShowPic(HBITMAP hBitmap,HWND hWnd,UINT hong)
{
RECT rect;
BITMAP bmp;
HDC hDC_Temp=::GetDC(::GetDlgItem(hWnd,hong));
::GetClientRect(::GetDlgItem(hWnd,hong),&rect);
HDC hSrcDC;
hSrcDC=CreateCompatibleDC(hDC_Temp);
SelectObject(hSrcDC,hBitmap);
GetObject(hBitmap,sizeof(BITMAP),&bmp);
BitBlt(hDC_Temp,0,0,rect.right-rect.left,rect.bottom-rect.top,hSrcDC,0,0,SRCCOPY);
DeleteDC(hSrcDC);
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -