zoukankan      html  css  js  c++  java
  • 自已写了个GDI类,实现了相对路径载入任意类型的图片函数,并加一个在CRECT矩形上贴图的函数(5月25日写)

    #pragma once
    #include "atlimage.h"
    class CImageDraw
    {
    public:
     CImageDraw(void);
    public:
     ~CImageDraw(void);
    public:
    static bool LoadImageFromResource(IN CImage* pImage,IN UINT nResID,
      IN LPCTSTR lpTyp);
    void TileDraw(CDC *pDC,CImage &img,LPRECT  pRect);
    };

    #include "StdAfx.h"
    #include "ImageDraw.h"


    CImageDraw::CImageDraw(void)
    {
     
    }

    CImageDraw::~CImageDraw(void)
    {
    }

    bool CImageDraw::LoadImageFromResource(IN CImage* pImage,IN UINT nResID,
              IN LPCTSTR lpTyp)
    {
     if ( pImage == NULL) return false;
     pImage->Destroy();
     // 查找资源
     HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
     if (hRsrc == NULL) return false;
     // 加载资源
     HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
     if (hImgData == NULL)
     {
      ::FreeResource(hImgData);
      return false;
     }

     // 锁定内存中的指定资源
     LPVOID lpVoid    = ::LockResource(hImgData);//the return value is a pointer to the first byte of the resource
     LPSTREAM pStream = NULL;
     DWORD dwSize    = ::SizeofResource(AfxGetResourceHandle(), hRsrc);//The number of bytes in the resource
     HGLOBAL hNew    = ::GlobalAlloc(GHND, dwSize);//该函数从堆中分配一定数目的字节数,GHND 标识 为GMEM_MOVEABLE 和 GMEM_ZEROINIT的组合. 返回值是新分配的堆的句柄
     LPBYTE lpByte    = (LPBYTE)::GlobalLock(hNew);//锁定内存中指定的内存块,并返回一个地址值,令其指向内存块的起始处。除非用 GlobalUnlock 函数将内存块解锁,否则地址会一直保持有效
     ::memcpy(lpByte, lpVoid, dwSize);//复制资源
     // 解除内存中的指定资源
     ::GlobalUnlock(hNew);
     // 从指定内存创建流对象
     HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);//函数从指定内存创建流对象,TRU表示hGlobal最终会自动释放
     if ( ht != S_OK )
     {
      GlobalFree(hNew);
     }
     else
     {
      // 加载图片
      pImage->Load(pStream);
      GlobalFree(hNew);
     }
     // 释放资源
     ::FreeResource(hImgData);
     return true;
    }


    void CImageDraw::TileDraw(CDC *pDC,CImage &img,LPRECT pRect)
    {
     int x,y,w,h;
     w=img.GetWidth();
     h=img.GetHeight();
     for (y=pRect->top;y<pRect->bottom-h;y+=h)
     {
      for (x=pRect->left;x<pRect->right-w;x+=w)
      {
       img.Draw(pDC->GetSafeHdc(),x,y);
      }
      if (x!=pRect->right)
      {
       img.Draw(pDC->GetSafeHdc(),x,y,pRect->right-x,h
        ,0,0,pRect->right-x,h);

      }
     }
     if (y!=pRect->bottom)
     {
      for (x=pRect->left;x<pRect->right-w;x+=w)
      {
       img.Draw(pDC->GetSafeHdc(),x,y,w,pRect->bottom-y
        ,0,0,w,pRect->bottom-y);
      }
      if (x!=pRect->right)
      {
       img.Draw(pDC->GetSafeHdc(),x,y
        ,pRect->right-x,pRect->bottom-y
        ,0,0
        ,pRect->right-x,pRect->bottom-y);
      }

     }

    }

  • 相关阅读:
    Bootstrap中,模态框嵌套模态框时,关闭第二个模态框时,导致第一个模态框的滚动条消失
    heidisql 远程登录本地虚拟机中的 MariaDB
    ssh-keygen -t rsa -C "content" 解释
    IIS 环境 CodeIgniter 隐藏 URL 中的 index.php
    Windows 环境下 PHP 安装 xdebug 及配置
    win10 更新后主机背部音频输出无声音
    MySql.Data.MySqlClient.MySqlException: Packets larger than max_allowed_packet are not allowed
    关于 IIS 中 iconfont.woff 报 404(Not Found) 的原因即解决方法
    IIS Web API 长时间不连接后第一次访问非常缓慢
    VS Code 中 HTML 文档注释 js 语句异常
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693706.html
Copyright © 2011-2022 走看看