DrawDibDraw__ZC测试

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 = 10;
    mFullViewTog = 0;
// ***
//*
    DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
    DWORD dwShareMode = 0;
    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[128] = {0};
        sprintf(bufErr, "CreateFile failed : (%ld)", GetLastError());
        printf("CreateFile fail(%ld)", GetLastError());
        MessageBox(bufErr, "1", 0);
        return;
    }

    DWORD dwReadBufLen = 1024 * 1024 * 5;
    FbufBmpMem = new char[dwReadBufLen];
    FdwRead = 0;
    int iRtn = ReadFile(FhFileBMP, FbufBmpMem, dwReadBufLen, &FdwRead, NULL);
    if (iRtn == 0)
    {
        printf("ReadFile fail(%ld)\n", GetLastError());
        char bufErr[128] = {0};
        sprintf(bufErr, "ReadFile failed : (%ld)", GetLastError());
        MessageBox(bufErr, "2", 0);
        return;
    }
    else
    {
        //凡是从文件流中读出来的字符串都不会自动补\0,需要手动填充
        FbufBmpMem[FdwRead / sizeof(char)] = ‘\0‘;
        printf("ReadFile -> len=%ld, buf=%ls\n", FdwRead, FbufBmpMem);

        char bufErr[128] = {0};
        sprintf(bufErr, "ReadFile --> len =%ld, buf=%ls\n", FdwRead, FbufBmpMem);
        MessageBox(bufErr, "3", 0);

        mpBitsSrc = &FbufBmpMem[0];

        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(), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 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= 0;
    CPoint Wid;
    // 图形文件名有效 (=0 BMP)
//    if( mBitmapFileType < ID_BITMAP_BMP )
//        return;
    // 图形文件名有效 (=0 BMP)
    // 准备显示真彩位图
    pBitmapFileHeader = (BITMAPFILEHEADER *) mpBitsSrc;
    bfoffBits = pBitmapFileHeader->bfOffBits;
    // 使用普通函数显示位图
    if( m_hDrawDib == NULL || mDispMethod == 0)
    {
        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 < 0 ) mPos.x= 0;
        if( mPos.y < 0 ) mPos.y= 0;
        if( mFullViewTog == 0)
        {
            // 显示真彩位图
            ::BitBlt(dc.m_hDC, 0, 0, mDispR.Width(), mDispR.Height(),
                hMemDC, mPos.x, mPos.y, SRCCOPY);
        }
        else
        {
            ::StretchBlt(dc.m_hDC,0,0, mDispR.Width(), mDispR.Height(),
                hMemDC,0,0, 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 < 0 )
            mPos.x= 0;
        if( mPos.y < 0 )
            mPos.y= 0;
        // 显示真彩位图
        DrawDibRealize( m_hDrawDib, dc.GetSafeHdc(), TRUE);
        if( mFullViewTog == 0)
        {
            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(), 0, 0, Wid.x, Wid.y,
                mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),
                mPos.x, mPos.y, Wid.x, Wid.y, DDF_BACKGROUNDPAL);
        }
        else
        {
            DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(),
                0, 0, mDispR.Width(), mDispR.Height(),
                mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),
                0, 0, mpBitmapInfo->biWidth, mpBitmapInfo->biHeight,
                DDF_BACKGROUNDPAL);
        }
    }
    return;
}

3、

4、

5、

时间: 2024-07-31 13:39:57

DrawDibDraw__ZC测试的相关文章

iOS app打包 -- 生成ipa测试包 步骤详解

最近有小伙伴问我如何打成ipa包分发给测试人员 , 虽然现在网上的教程很多,但是也很杂, 没有一个比较完整的讲解. 利用工作之余, 就说一下如何生成ipa包?共分为两种方法. 第一种方法: 1) 至于配置发布证书和AdHoc描述文件, 就不再累述, 下载下来双击安装即可.(ps: 生成AdHoc描述文件的时候要注意勾选所有的设备, 只有被描述文件包含的设备才能进行相应的测试. 如果是企业账号的话则不需要添加设备的udid). 2) 接下来开始配置xCode里的工作(包括发布证书和描述文件), 注

Monkey测试

1             概述 Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 当Monkey程序在模拟器或真实设备运行的时候,程序会产生一定数量或一定时间内的随机模拟用户操作的事件, 如点击,按键,手势等, 以及一些系统级别的事件.通常也称随机测试或者稳定性测试. 2             测试步骤 2.1   测试前提条件 1.将手机恢复出厂设置 2.恢复出厂设置后,进入设置--

软件测试中的数据库测试

数据库中数据的基本结构 定义一:数据元素集合(也可称数据对象)中各元素的关系. 定义二:相互之间存在特定关系的数据元素集合. 一个表(数据库),我们就称它为一个数据结构,它由很多记录(数据元素)组成,每个元素又包括很多 字段(数据项)组成数据库测试分类系统测试.集成测试.单元测试.功能测试.性能测试.安全测试系统测试.数据库在初期设计中需要进行分析测试. 对于各种数据元素进行完美融合,并理清相互之间的关系便是数据库结构的基本定义. 在数据库中,不同数据之间会存在既定的特殊关系,其属于各种数据元素

一些基本LINUX命令以及测试环境的搭建

LINUX操作系统平时用的不多,资深测试与开发同学们用的比较多,像我这样的一个人,只喜欢WINDOWS操作系统.但LINUX操作系统也用过一段时间, 知道一些基本命令,如果不记得的话,就百度一下,拿来就用,也不会太难.下面记录一下自己知道的一些常用命令,方便自己查询,以供大家参考. 首先 LINUX系统的特点是:稳定,安全,开源,可裁剪性.(可裁剪性还真没有理解透) 其次:LINUX 有四个版本,分别是:DEBIAN,UBUNTU,RED HAT,CENTOS. 我只用过CENTOS版本,不过公

微信+WeTest:小程序云端测试系统上线

日前,微信新增小程序测试系统,可便于开发者检测小程序缺陷,评估小程序产品质量.在小程序发布之前,开发者可将小程序代码提交到测试系统,在不同型号的手机真机上运行,执行完毕后自动生成测试报告.小程序云端测试平台,由WeTest提供基础支持,下载"微信开发者工具"即可使用. 小程序测试报告示例:  一. 云真机测试 Beta 为了方便广大开发者检测小程序程序缺陷.评估小程序产品质量,微信提供了免费的云真机测试环境以及一整套测试方案.在小程序交付到真实用户手中使用之前,你可以将小程序分发到云真

微信公众号API测试——接口调用频率限制

接口频率限制[1] 公众号调用接口并不是无限制的.为了防止公众号的程序错误而引发微信服务器负载异常,默认情况下,每个公众号调用接口都不能超过一定限制,当超过一定限制时,调用对应接口会收到如下错误返回码: {"errcode":45009,"errmsg":"api freq out of limit"} 各接口调用频率限制如下: 接口 每日限额 获取access_token 2000 自定义菜单创建 1000 自定义菜单查询 10000 自定义菜

手把手教你如何搭建自己的渗透测试环境

介绍 白帽子是指个体发起的黑客攻击,找到系统潜在的可能被恶意黑客利用的的漏洞或脆弱点.在目标不知情或者没得到授权的情况下发起黑客攻击是非法的.所以通常是建立一个自己的实验室,练习黑客技术. 在这个实验室里,你能看到如何创建一个自己的黑客环境,练习各种各样的黑客攻击技术.我们将会探讨不同类型的虚拟系统,构建一个虚拟网络,在虚拟环境中运行试用版的操作系统,搭建一个有漏洞的web应用程序,安装Kali LInux,执行渗透测试. 所需条件: VMware Workstation Windows XP系

游戏测试经历的流程及发版本注意的问题(或许有遗漏)

一.测试流程: 1.测试人员需要参与需求会议,了解需求,如有必要,提出疑问点,产品修改正 2.需求确定后,编辑测试用例或者测试功能点 3.开发提交完毕后,执行测试用例(要求开发出电脑版,节约前期打包,安装包的时间) 4.发现bug,提交bug到禅道,并通知相关人员 5.开发组修正bug,禅道指派给测试人员,表明已修复 6.对已修正的bug,进行回归测试 7.修正完毕的bug在禅道上置为关闭 8.待电脑版功能验证完毕后,进行手机包测试 9.整体测试完毕,可以发布包 补充: 1.中途有修改需求,也需

1.2软件生命周期&amp;测试流程

软件的生命周期 可行性分析-需求分析-软件设计-软件编码-软件测试-软件维护 1.可行性分析 主要确定软件开发的目的和可行性(PM) 2.需求分析 对软件的功能进行详细的分析(PM),输出需求规格说明书(原型图) 3.软件设计(DEV) 把需求分析得到的结果转换为软件结构和数据结构,形成系统架构 概要设计:搭建架构.模块功能.接口连接和数据传输 详细设计:模块深入分析,对各模块组合进行分析,伪代码   包含数据库设计说明 4.软件编码(DEV) 可运行的程序代码 5.软件测试 5.1.单元测试(