图片显示器.docx

上传人:b****8 文档编号:9368942 上传时间:2023-02-04 格式:DOCX 页数:11 大小:17.98KB
下载 相关 举报
图片显示器.docx_第1页
第1页 / 共11页
图片显示器.docx_第2页
第2页 / 共11页
图片显示器.docx_第3页
第3页 / 共11页
图片显示器.docx_第4页
第4页 / 共11页
图片显示器.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

图片显示器.docx

《图片显示器.docx》由会员分享,可在线阅读,更多相关《图片显示器.docx(11页珍藏版)》请在冰豆网上搜索。

图片显示器.docx

图片显示器

//消息处理

voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)

{

switch(id)

{

caseIDC_OK:

{

TCHARpath[MAX_PATH+1];

OpenFile(hwnd,IDC_EDTPATH);

ZeroMemory(path,sizeof(path));

GetDlgItemText(hwnd,IDC_EDTPATH,path,sizeof(path));

HDChDC=GetDC(hwnd);

DisplayImage(hDC,path);

ReleaseDC(hwnd,hDC);

}

break;

default:

break;

}

}

//打开文件对话框

voidOpenFile(HWNDhwnd,intnIDDlgItem)

{

OPENFILENAMEofn;

charszFile[MAX_PATH];

ZeroMemory(&ofn,sizeof(ofn));

ofn.lStructSize=sizeof(ofn);

ofn.lpstrFile=szFile;

ofn.lpstrFile[0]=TEXT('\0');

ofn.nMaxFile=sizeof(szFile);

ofn.lpstrFileTitle=NULL;

ofn.nMaxFileTitle=0;

ofn.lpstrTitle=TEXT("打开文件对话框");

ofn.lpstrFilter=TEXT("JPG|JPEG\0*.jpg;*.jpeg\0GIF\0*.gif\0\0");

ofn.nFilterIndex=1;

ofn.lpstrInitialDir=NULL;

ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;

GetOpenFileName(&ofn);

SetDlgItemText(hwnd,nIDDlgItem,szFile);

}

//显示JPEG或GIF格式图片

voidDisplayImage(HDChDC,LPCTSTRszImagePath)

{

//实际读取的文件大小

DWORDdwReadedSize;

//创建一个IStream接口指针,用来保存图片流

IStream*pIStream;

//创建一个IPicture接口指针,表示图片对象

IPicture*pIPicture;

//原始图像的宽度和高度

OLE_XSIZE_HIMETRIChmWidth;

OLE_YSIZE_HIMETRIChmHeight;

//根据指定路径szImagePath获取文件句柄

HANDLEhFile=CreateFile(szImagePath,GENERIC_READ,FILE_SHARE_READ,NULL,

OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

//获得图片文件的大小

DWORDdwFileSize=GetFileSize(hFile,NULL);

//给图片分配全局内存

HGLOBALhImageMemory=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);

//锁定内存

void*pImageMemory=GlobalLock(hImageMemory);

//读取图片到全局内存当中

ReadFile(hFile,pImageMemory,dwFileSize,&dwReadedSize,NULL);

//解锁内存

GlobalUnlock(hImageMemory);

//关闭文件句柄

CloseHandle(hFile);

//用全局内存初使化IStream接口指针

CreateStreamOnHGlobal(hImageMemory,FALSE,&pIStream);

//用OleLoadPicture获得IPicture接口指针

OleLoadPicture(pIStream,0,FALSE,IID_IPicture,(LPVOID*)&(pIPicture));

//用接口方法获得图片的宽和高

pIPicture->get_Width(&hmWidth);

pIPicture->get_Height(&hmHeight);

//在指定的DC上绘出图片

pIPicture->Render(hDC,10,70,200,200,0,hmHeight,hmWidth,-hmHeight,NULL);

//释放全局内存

GlobalFree(hImageMemory);

//释放pIStream

pIStream->Release();

//释放pIPicture

pIPicture->Release();

}

CreateFile函数

HANDLECreateFile(

LPCTSTRlpFileName,

//指向文件名的指针

DWORDdwDesiredAccess,

//访问模式(写/读)

DWORDdwShareMode,

//共享模式

LPSECURITY_ATTRIBUTESlpSecurityAttributes,

//指向安全属性的指针

DWORDdwCreationDisposition,

//如何创建

DWORDdwFlagsAndAttributes,

//文件属性

HANDLEhTemplateFile

//用于复制文件句柄

);

参数lpFileName:

要打开的文件的名字。

参数dwDesiredAccess:

如果为GENERIC_READ表示允许对设备进行读访问;如果为GENERIC_WRITE表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息。

参数dwShareMode:

零表示不共享;FILE_SHARE_READ和/或FILE_SHARE_WRITE表示允许对文件进行共享访问。

参数lpSecurityAttributes:

指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)。

参数dwCreationDisposition:

CREATE_NEW

创建文件;如文件存在则会出错

CREATE_ALWAYS

创建文件,如文件存在则会覆盖

OPEN_EXISTING

文件必须已经存在

OPEN_ALWAYS

如文件不存在则创建它

TRUNCATE_EXISTING

将现有文件缩短为零长度

参数dwFlagsAndAttributes:

FILE_ATTRIBUTE_ARCHIVE

标记归档属性

FILE_ATTRIBUTE_COMPRESSED

标记为已压缩

FILE_ATTRIBUTE_NORMAL

默认属性

FILE_ATTRIBUTE_HIDDEN

隐藏文件或目录

FILE_ATTRIBUTE_READONLY

文件为只读

FILE_ATTRIBUTE_SYSTEM

文件为系统文件

FILE_FLAG_WRITE_THROUGH

操作系统不得推迟对文件的写操作  FILE_FLAG_OVERLAPPED

允许对文件进行重叠操作

FILE_FLAG_NO_BUFFERING

禁止对文件进行缓冲处理

FILE_FLAG_RANDOM_ACCESS

针对随机访问对文件缓冲进行优化  FILE_FLAG_SEQUENTIAL_SCAN

针对连续访问对文件缓冲进行优化  FILE_FLAG_DELETE_ON_CLOSE

关闭了上一次打开的句柄后,将文件删除

参数hTemplateFile:

如果不为NULL,则指定一个文件句柄。

新文件将从这个文件中复制扩展属性。

GetFileSize函数

DWORDGetFileSize(

HANDLEhFile,

LPDWORDlpFileSizeHigh

);

参数hFile:

文件句柄。

参数lpFileSizeHigh:

DWORD变量的首地址,该变量用于存储FileSize的高32位,若不需获取这部分的值,该参数可以为NULL。

返回值:

FileSize的低32位。

GlobalAlloc函数

HGLOBALGlobalAlloc(

  UINTuFlags,

//分配属性(方式)

  DWORDdwBytes

//分配的字节数

);

参数uFlags:

GMEM_FIXED

分配固定的内存,返回值是一个指针。

GMEM_MOVEABLE

分配可移动的内存,内存块在物理内存中是不可移动的,但在缺省堆中可以。

返回值是该内存对象的句柄,可使用函数GlobalLock将该句柄转换为一个指针。

注:

用GMEM_MOVEABLE方式分配的内存是可移动的,所以要用句柄标识,不能用内存地址标识。

有时我们需要的是一个内存地址,就要用GlobalLock函数将句柄转换为内存地址。

对于用GMEM_FIXED方式分配的内存,返回的句柄就是内存地址,可以直接当内存地址使用。

参数dwBytes:

指定要分配的字节数。

若该参数为0且参数uFlags指定为GMEM_MOVEABLE则该函数返回一个内存对象的句柄,该内存对象被标识为discarded(可抛弃的)。

返回值:

若函数调用成功,则返回一个新分配的内存对象的句柄;若函数调用失败,则返回NULL。

可调用GetLastError以获得更多错误信息。

GlobalLock函数

LPVOIDGlobalLock(

HGLOBALhMem

);

参数hMem:

全局内存对象句柄。

该句柄由函数GlobalAlloc或GlobalReAlloc返回。

返回值:

如果函数执行成功,返回值就是内存对象的首地址,否则返回NULL。

调用GetLastError可以得到更多错误信息。

ReadFile函数

BOOLReadFile(

HANDLEhFile,

LPVOIDlpBuffer,

DWORDnNumberOfBytesToRead,

LPDWORDlpNumberOfBytesRead,

LPOVERLAPPEDlpOverlapped

);

参数hFile:

文件的句柄。

参数lpBuffer:

保存读入数据的缓冲区的首地址。

参数nNumberOfBytesToRead:

要读入的字节数。

参数lpNumberOfBytesRead:

DWORD类型变量的首地址,该变量用于存储实际读取的字节数。

参数lpOverlapped:

如果文件用FILE_FLAG_OVERLAPPED方式打开,那么该参数必须指向一个OVERLAPPED结构体。

否则,这个参数可以设为NULL。

CreateStreamOnHGlobal函数

函数功能:

从内存创建流对象。

WINOLEAPICreateStreamOnHGlobal(

HGLOBALhGlobal,

BOOLfDeleteOnRelease,

LPSTREAM*ppstm

);

参数hGlobal:

由GlobalAlloc函数分配的内存句柄。

该句柄必须是以GMEM_MOVEABLE方式分配的并且是nondiscardable(不可抛弃的)。

参数fDeleteOnRelease:

该参数指明内存在该对象被释放后是否也自动释放。

如果该参数设定为FALSE,那么调用者必须显示的释放hGlobal。

如果该参数设置为TRUE,则hGlobal最终会自动释放。

参数ppstm:

IStream类型对象的首地址,该对象用于存储新创建的流对象。

OleLoadPicture

功能:

从流中创建一个新的图片对象并初始化它。

STDAPIOleLoadPicture(

IStream*pStream,

LONGlSize,

BOOLfRunmode,

REFIIDriid,

VOIDppvObj

);

参数pStream:

图片数据流指针。

参数lSize:

从流中读取数据的字节数,值为0表示全部读取。

参数fRunmode:

是否采用与图像初始化属性相反的属性值。

参数riid:

描述ppvObj参数类型的接口标识。

参数ppvObj:

图片对象指针

返回值:

图片创建成功返回S_OK

函数库:

olepro32.dll

头文件:

olectl.h

Render函数

功能:

渲染图像

HRESULTRender(

HDChdc,

//设备上下文句柄

longx,

longy,

longcx,

longcy,

OLE_XPOS_HIMETRICxSrc,

OLE_YPOS_HIMETRICySrc,

OLE_XSIZE_HIMETRICcxSrc,

OLE_YSIZE_HIMETRICcySrc,

LPCRECTprcWBounds

//指向矩形的指针,此矩形包含目的位置

);

头文件:

ocidl.h

GetDC函数

功能:

获取设备上下文句柄

HDCGetDC(

HWNDhWnd

);

注:

GetDC获取的仅仅是窗口的工作区,不包含标题栏。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1