ZC: 先把 自己尝试成功的代码 记录下来,不要 弄没了之后 又忘了怎么弄...

ZC: 代码 有点乱,没整理。没写 哪些是 原来MFC里面的 哪些是我自己写的,参考上一篇文章来看吧

1、VC6 的一个随便的MFC程序

2、class CDrawDibDraw_MFCDlg : public CDialog

  添加成员:

public:
HDRAWDIB m_hDrawDib; // 视频函数
HANDLE mhBitsSrc; // 位图文件句柄(内存)
LPSTR mpBitsSrc; // 位图文件地址(内存)
BITMAPINFOHEADER *mpBitmapInfo; // 位图信息头 CPoint mPos;
CRect mDispR;
int mFullViewTog;
int mDispMethod; void GraphicDraw();
public:
HANDLE FhFileBMP;
//char FbufBmpMem[1024 * 1024 * 5];
char* FbufBmpMem;
DWORD FdwRead;

  2.1、

#include <windows.h>
#include <Vfw.h>
#pragma comment(lib,"Vfw32.lib")

  2.2、

CDrawDibDraw_MFCDlg::CDrawDibDraw_MFCDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDrawDibDraw_MFCDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDrawDibDraw_MFCDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_hDrawDib= DrawDibOpen(); mDispMethod = ;
mFullViewTog = ;
// ***
//*
DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
DWORD dwShareMode = ;
LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL;
DWORD dwCreationDisposition = OPEN_EXISTING;//OPEN_ALWAYS;
DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
HANDLE hTemplateFile = NULL;
FhFileBMP = CreateFile("C:\\24bmp.bmp", dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
if (FhFileBMP == NULL)
{
char bufErr[] = {};
sprintf(bufErr, "CreateFile failed : (%ld)", GetLastError());
printf("CreateFile fail(%ld)", GetLastError());
MessageBox(bufErr, "", );
return;
} DWORD dwReadBufLen = * * ;
FbufBmpMem = new char[dwReadBufLen];
FdwRead = ;
int iRtn = ReadFile(FhFileBMP, FbufBmpMem, dwReadBufLen, &FdwRead, NULL);
if (iRtn == )
{
printf("ReadFile fail(%ld)\n", GetLastError());
char bufErr[] = {};
sprintf(bufErr, "ReadFile failed : (%ld)", GetLastError());
MessageBox(bufErr, "", );
return;
}
else
{
//凡是从文件流中读出来的字符串都不会自动补\0,需要手动填充
FbufBmpMem[FdwRead / sizeof(char)] = '\0';
printf("ReadFile -> len=%ld, buf=%ls\n", FdwRead, FbufBmpMem); char bufErr[] = {};
sprintf(bufErr, "ReadFile --> len =%ld, buf=%ls\n", FdwRead, FbufBmpMem);
MessageBox(bufErr, "", ); mpBitsSrc = &FbufBmpMem[]; mpBitmapInfo = (BITMAPINFOHEADER*)&FbufBmpMem[sizeof(BITMAPFILEHEADER)];
}
//*/
}

  2.3、

void CDrawDibDraw_MFCDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), ); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + ) / ;
int y = (rect.Height() - cyIcon + ) / ; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint(); CPaintDC dc(this); // device context for painting
GraphicDraw();
}
}

  2.4、

void CDrawDibDraw_MFCDlg::GraphicDraw()
{
GetWindowRect(&mDispR); CClientDC dc(this); // device context for painting
BITMAPFILEHEADER *pBitmapFileHeader;
ULONG bfoffBits= ;
CPoint Wid;
// 图形文件名有效 (=0 BMP)
// if( mBitmapFileType < ID_BITMAP_BMP )
// return;
// 图形文件名有效 (=0 BMP)
// 准备显示真彩位图
pBitmapFileHeader = (BITMAPFILEHEADER *) mpBitsSrc;
bfoffBits = pBitmapFileHeader->bfOffBits;
// 使用普通函数显示位图
if( m_hDrawDib == NULL || mDispMethod == )
{
HBITMAP hBitmap = ::CreateDIBitmap(dc.m_hDC,
mpBitmapInfo, CBM_INIT, mpBitsSrc+bfoffBits,
(LPBITMAPINFO) mpBitmapInfo,DIB_RGB_COLORS);
// 建立位图
HDC hMemDC = ::CreateCompatibleDC(dc.m_hDC);// 建立内存
//HBITMAP hBitmapOld = SelectBitmap(hMemDC, hBitmap); // 选择对象
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hMemDC, hBitmap); // 选择对象
// 成员CRect mDispR用于指示图形显示区域的大小.
// 成员CPoint mPos用于指示图形显示起始位置坐标.
if( mPos.x > (mpBitmapInfo->biWidth - mDispR.Width()) )
mPos.x= mpBitmapInfo->biWidth - mDispR.Width() ;
if( mPos.y > (mpBitmapInfo->biHeight- mDispR.Height()) )
mPos.y= mpBitmapInfo->biHeight- mDispR.Height();
if( mPos.x < ) mPos.x= ;
if( mPos.y < ) mPos.y= ;
if( mFullViewTog == )
{
// 显示真彩位图
::BitBlt(dc.m_hDC, , , mDispR.Width(), mDispR.Height(),
hMemDC, mPos.x, mPos.y, SRCCOPY);
}
else
{
::StretchBlt(dc.m_hDC,,, mDispR.Width(), mDispR.Height(),
hMemDC,,, mpBitmapInfo->biWidth, mpBitmapInfo->biHeight, SRCCOPY);
}
// 结束显示真彩位图
::DeleteObject(SelectObject(hMemDC,hBitmapOld));
// 删 除 位 图
}
else
{
// 使用视频函数显示位图
if( mPos.x > (mpBitmapInfo->biWidth - mDispR.Width() ))
mPos.x= mpBitmapInfo->biWidth - mDispR.Width() ;
if( mPos.y > (mpBitmapInfo->biHeight- mDispR.Height()))
mPos.y= mpBitmapInfo->biHeight- mDispR.Height();
if( mPos.x < )
mPos.x= ;
if( mPos.y < )
mPos.y= ;
// 显示真彩位图
DrawDibRealize( m_hDrawDib, dc.GetSafeHdc(), TRUE);
if( mFullViewTog == )
{
Wid.x= mDispR.Width();
Wid.y= mDispR.Height();
// 1:1 显示时, 不能大于图形大小
if( Wid.x > mpBitmapInfo->biWidth )
Wid.x = mpBitmapInfo->biWidth;
if( Wid.y > mpBitmapInfo->biHeight)
Wid.y = mpBitmapInfo->biHeight;
DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(), , , Wid.x, Wid.y,
mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),
mPos.x, mPos.y, Wid.x, Wid.y, DDF_BACKGROUNDPAL);
}
else
{
DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(),
, , mDispR.Width(), mDispR.Height(),
mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),
, , mpBitmapInfo->biWidth, mpBitmapInfo->biHeight,
DDF_BACKGROUNDPAL);
}
}
return;
}

3、

4、

5、

DrawDibDraw__ZC测试的更多相关文章

  1. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  2. Apache Ignite之集群应用测试

    集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...

  3. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  4. TechEmpower 13轮测试中的ASP.NET Core性能测试

    应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...

  5. .NET Core系列 :4 测试

    2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...

  6. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  7. 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()

    1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...

  8. 【初学python】使用python调用monkey测试

    目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...

  9. CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]

    上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...

随机推荐

  1. [lr] 直方图

    直方图基础知识 • 直方图的特征和作用 ▪ 直方图的x轴从左到右代表亮度逐渐增加,即从最暗到最亮:y轴代表某个亮度值下颜色像素的多少(密度). ▪ 直方图由红绿蓝三种颜色组成,分别表示红绿蓝通道:其中 ...

  2. shell应用技巧

    Shell 应用技巧 Shell是一个命令解释器,是在内核之上和内核交互的一个层面. Shell有很多种,我们所使用的的带提示符的那种属于/bin/bash,几乎所有的linux系统缺省就是这种she ...

  3. Bootstrap学习笔记-响应式布局原理

    响应式布局的原理就是利用css3中@media媒体来实现的 <html> <head> <meta charset="utf-8"> <t ...

  4. ARM中的汇编指令

    Arm指令,32位的指令集,一共有16条的基本指令,每条指令都可以按条件执行, 指令都是32bit的,高四位是条件码[31:28], Thumb指令,16位的指令集,执行效率比arm指令集要低,但是节 ...

  5. iOS 建立项目过滤机制 —— 给工程添加忽略文件.gitignore

        目前iOS 项目 主要忽略 临时文件.配置文件.或者生成文件等,在不同开发端这些文件会大有不同,如果 git add .把这些文件都push到远程, 就会造成不同开发端频繁改动和提交的问题. ...

  6. C++ 简明教程

    C++是一种系统编程语言.用它的发明者, Bjarne Stroustrup的话来说,C++的设计目标是: 成为“更好的C语言” 支持数据的抽象与封装 支持面向对象编程 支持泛型编程 C++提供了对硬 ...

  7. 根据wsdl,基于wsimport生成代码的客户端

    根据wsdl,基于wsimport生成代码的客户端 wsimport是jdk自带的命令,可以根据wsdl文档生成客户端中间代码,基于生成的代码编写客户端,可以省很多麻烦. 局限性:wsimport   ...

  8. 静态编译C/C++程序

    静态编译C/C++程序,让程序运行不受平台限制 由于Linux操作系统的特有elf加载顺序. (可以参考此文). 虽然可以很大程度上解决Windows早期版本的dll hell问题, 但是给部署带来了 ...

  9. http://bugs.mysql.com/bug.php?id=72123

    今天某个环境发生了这个bug. http://bugs.mysql.com/bug.php?id=72123

  10. 20145225《网络对抗》Exp8 Web基础

    参考博客:5215~ 这次试验,没搞懂,只做了一部分,求老师酌情给分啊 啊啊 基础问题回答 什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选 ...