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

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

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

2、class CDrawDibDraw_MFCDlg : public CDialog

  添加成员:

  1. public:
  2. HDRAWDIB m_hDrawDib; // 视频函数
  3. HANDLE mhBitsSrc; // 位图文件句柄(内存)
  4. LPSTR mpBitsSrc; // 位图文件地址(内存)
  5. BITMAPINFOHEADER *mpBitmapInfo; // 位图信息头
  6.  
  7. CPoint mPos;
  8. CRect mDispR;
  9. int mFullViewTog;
  10. int mDispMethod;
  11.  
  12. void GraphicDraw();
  13. public:
  14. HANDLE FhFileBMP;
  15. //char FbufBmpMem[1024 * 1024 * 5];
  16. char* FbufBmpMem;
  17. DWORD FdwRead;

  2.1、

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

  2.2、

  1. CDrawDibDraw_MFCDlg::CDrawDibDraw_MFCDlg(CWnd* pParent /*=NULL*/)
  2. : CDialog(CDrawDibDraw_MFCDlg::IDD, pParent)
  3. {
  4. //{{AFX_DATA_INIT(CDrawDibDraw_MFCDlg)
  5. // NOTE: the ClassWizard will add member initialization here
  6. //}}AFX_DATA_INIT
  7. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  8. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  9.  
  10. m_hDrawDib= DrawDibOpen();
  11.  
  12. mDispMethod = ;
  13. mFullViewTog = ;
  14. // ***
  15. //*
  16. DWORD dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
  17. DWORD dwShareMode = ;
  18. LPSECURITY_ATTRIBUTES lpSecurityAttributes = NULL;
  19. DWORD dwCreationDisposition = OPEN_EXISTING;//OPEN_ALWAYS;
  20. DWORD dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
  21. HANDLE hTemplateFile = NULL;
  22. FhFileBMP = CreateFile("C:\\24bmp.bmp", dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
  23. if (FhFileBMP == NULL)
  24. {
  25. char bufErr[] = {};
  26. sprintf(bufErr, "CreateFile failed : (%ld)", GetLastError());
  27. printf("CreateFile fail(%ld)", GetLastError());
  28. MessageBox(bufErr, "", );
  29. return;
  30. }
  31.  
  32. DWORD dwReadBufLen = * * ;
  33. FbufBmpMem = new char[dwReadBufLen];
  34. FdwRead = ;
  35. int iRtn = ReadFile(FhFileBMP, FbufBmpMem, dwReadBufLen, &FdwRead, NULL);
  36. if (iRtn == )
  37. {
  38. printf("ReadFile fail(%ld)\n", GetLastError());
  39. char bufErr[] = {};
  40. sprintf(bufErr, "ReadFile failed : (%ld)", GetLastError());
  41. MessageBox(bufErr, "", );
  42. return;
  43. }
  44. else
  45. {
  46. //凡是从文件流中读出来的字符串都不会自动补\0,需要手动填充
  47. FbufBmpMem[FdwRead / sizeof(char)] = '\0';
  48. printf("ReadFile -> len=%ld, buf=%ls\n", FdwRead, FbufBmpMem);
  49.  
  50. char bufErr[] = {};
  51. sprintf(bufErr, "ReadFile --> len =%ld, buf=%ls\n", FdwRead, FbufBmpMem);
  52. MessageBox(bufErr, "", );
  53.  
  54. mpBitsSrc = &FbufBmpMem[];
  55.  
  56. mpBitmapInfo = (BITMAPINFOHEADER*)&FbufBmpMem[sizeof(BITMAPFILEHEADER)];
  57. }
  58. //*/
  59. }

  2.3、

  1. void CDrawDibDraw_MFCDlg::OnPaint()
  2. {
  3. if (IsIconic())
  4. {
  5. CPaintDC dc(this); // device context for painting
  6.  
  7. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), );
  8.  
  9. // Center icon in client rectangle
  10. int cxIcon = GetSystemMetrics(SM_CXICON);
  11. int cyIcon = GetSystemMetrics(SM_CYICON);
  12. CRect rect;
  13. GetClientRect(&rect);
  14. int x = (rect.Width() - cxIcon + ) / ;
  15. int y = (rect.Height() - cyIcon + ) / ;
  16.  
  17. // Draw the icon
  18. dc.DrawIcon(x, y, m_hIcon);
  19. }
  20. else
  21. {
  22. //CDialog::OnPaint();
  23.  
  24. CPaintDC dc(this); // device context for painting
  25. GraphicDraw();
  26. }
  27. }

  2.4、

  1. void CDrawDibDraw_MFCDlg::GraphicDraw()
  2. {
  3. GetWindowRect(&mDispR);
  4.  
  5. CClientDC dc(this); // device context for painting
  6. BITMAPFILEHEADER *pBitmapFileHeader;
  7. ULONG bfoffBits= ;
  8. CPoint Wid;
  9. // 图形文件名有效 (=0 BMP)
  10. // if( mBitmapFileType < ID_BITMAP_BMP )
  11. // return;
  12. // 图形文件名有效 (=0 BMP)
  13. // 准备显示真彩位图
  14. pBitmapFileHeader = (BITMAPFILEHEADER *) mpBitsSrc;
  15. bfoffBits = pBitmapFileHeader->bfOffBits;
  16. // 使用普通函数显示位图
  17. if( m_hDrawDib == NULL || mDispMethod == )
  18. {
  19. HBITMAP hBitmap = ::CreateDIBitmap(dc.m_hDC,
  20. mpBitmapInfo, CBM_INIT, mpBitsSrc+bfoffBits,
  21. (LPBITMAPINFO) mpBitmapInfo,DIB_RGB_COLORS);
  22. // 建立位图
  23. HDC hMemDC = ::CreateCompatibleDC(dc.m_hDC);// 建立内存
  24. //HBITMAP hBitmapOld = SelectBitmap(hMemDC, hBitmap); // 选择对象
  25. HBITMAP hBitmapOld = (HBITMAP)SelectObject(hMemDC, hBitmap); // 选择对象
  26. // 成员CRect mDispR用于指示图形显示区域的大小.
  27. // 成员CPoint mPos用于指示图形显示起始位置坐标.
  28. if( mPos.x > (mpBitmapInfo->biWidth - mDispR.Width()) )
  29. mPos.x= mpBitmapInfo->biWidth - mDispR.Width() ;
  30. if( mPos.y > (mpBitmapInfo->biHeight- mDispR.Height()) )
  31. mPos.y= mpBitmapInfo->biHeight- mDispR.Height();
  32. if( mPos.x < ) mPos.x= ;
  33. if( mPos.y < ) mPos.y= ;
  34. if( mFullViewTog == )
  35. {
  36. // 显示真彩位图
  37. ::BitBlt(dc.m_hDC, , , mDispR.Width(), mDispR.Height(),
  38. hMemDC, mPos.x, mPos.y, SRCCOPY);
  39. }
  40. else
  41. {
  42. ::StretchBlt(dc.m_hDC,,, mDispR.Width(), mDispR.Height(),
  43. hMemDC,,, mpBitmapInfo->biWidth, mpBitmapInfo->biHeight, SRCCOPY);
  44. }
  45. // 结束显示真彩位图
  46. ::DeleteObject(SelectObject(hMemDC,hBitmapOld));
  47. // 删 除 位 图
  48. }
  49. else
  50. {
  51. // 使用视频函数显示位图
  52. if( mPos.x > (mpBitmapInfo->biWidth - mDispR.Width() ))
  53. mPos.x= mpBitmapInfo->biWidth - mDispR.Width() ;
  54. if( mPos.y > (mpBitmapInfo->biHeight- mDispR.Height()))
  55. mPos.y= mpBitmapInfo->biHeight- mDispR.Height();
  56. if( mPos.x < )
  57. mPos.x= ;
  58. if( mPos.y < )
  59. mPos.y= ;
  60. // 显示真彩位图
  61. DrawDibRealize( m_hDrawDib, dc.GetSafeHdc(), TRUE);
  62. if( mFullViewTog == )
  63. {
  64. Wid.x= mDispR.Width();
  65. Wid.y= mDispR.Height();
  66. // 1:1 显示时, 不能大于图形大小
  67. if( Wid.x > mpBitmapInfo->biWidth )
  68. Wid.x = mpBitmapInfo->biWidth;
  69. if( Wid.y > mpBitmapInfo->biHeight)
  70. Wid.y = mpBitmapInfo->biHeight;
  71. DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(), , , Wid.x, Wid.y,
  72. mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),
  73. mPos.x, mPos.y, Wid.x, Wid.y, DDF_BACKGROUNDPAL);
  74. }
  75. else
  76. {
  77. DrawDibDraw( m_hDrawDib, dc.GetSafeHdc(),
  78. , , mDispR.Width(), mDispR.Height(),
  79. mpBitmapInfo, (LPVOID) (mpBitsSrc+bfoffBits),
  80. , , mpBitmapInfo->biWidth, mpBitmapInfo->biHeight,
  81. DDF_BACKGROUNDPAL);
  82. }
  83. }
  84. return;
  85. }

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. JS中“==”和“===”的原理和区别

    1.为什么讨论这个问题? - 有个说法,尽量不用==,而使用===,是这样吗? 2.分析问题,原理是什么? 下面说说ECMAScript 5 language specification里的说明: 1 ...

  2. JavaScript循环练习

    1.蓝球弹起的高度篮球从10米高的地方落下,每次弹起的高度是原来的0.3倍,问弹跳10次之后篮球的高度. <script type="text/javascript"> ...

  3. linux常用命令:chgrp 命令

    在 lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令变更文件与目录所属群组,这种方式采用群组名称或群组识别 码都可以.chgrp命令就是change group ...

  4. CSS3----实现毛玻璃完美效果

    其实毛玻璃的模糊效果技术上比较简单,只是用到了 css 滤镜(filter)中的 blur 属性.但是要做一个好的毛玻璃效果,需要注意很多细节. 比如我们需要将上图中页面中间的文字区域变成毛玻璃效果, ...

  5. Java EE企业应用发展

    新形式下的企业应用特点企业应用系统从封闭走向开放,由局域网转到互联网,随着涉众面的极大扩展,新的企业应用要求多浏览器支持,国际化支持,全球业务的互联互通.企业需求提升.除了功能性需求,客户对于安全,性 ...

  6. Linux基础命令---find

    file 判断指定文件的文件类型,它依据文件内容判断,并不依据扩展名.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法     ...

  7. DBMS_OUTPUT.PUT_LINE()方法的简单介绍

    1.最基本的DBMS_OUTPUT.PUT_LINE()方法. 随便在什么地方,只要是BEGIN和END之间,就可以使用DBMS_OUTPUT.PUT_LINE(output);然而这会有一个问题,就 ...

  8. 由于防火墙限制无法访问linux服务器上的tomcat应用

    使用的是CentOS6.4系统. 问题重现: tomcat服务是启动的, 但无法访问服务器上的tomcat应用页面. 解决办法: 在防火墙配置中设置端口: 命令: # cd /etc/sysconfi ...

  9. Java lambda 表达式

    其实是试验一下markdown... 原: 只有一个抽象方法的接口称为函数式接口(functional interface). 当需要实现了这种接口的类的对象的时候,就可以提供一个lambda表达式. ...

  10. 重启eclips后启动项目出现监听文件找不到

    重启eclips后启动项目出现监听文件找不到 问题: 重启eclips后启动项目出现Error configuring application listener of class com.thinkg ...