zoukankan      html  css  js  c++  java
  • Gdiplus的使用 gdi+

    使用步骤:

    1.包括相应的头文件及引入相应的lib

    1 #include <GdiPlus.h> 
    2 #pragma comment(lib, "gdiplus.lib") 
    3 
    4 using namespace Gdiplus;

    2.初始化Gdiplus

    1 Gdiplus::GdiplusStartupInput m_gdiplusStartupInput; 
    2 ULONG_PTR m_gdiplusToken;   
    3 
    4 GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL ); 

    3.加载相应的资源(此处为图片)

    复制代码
     1 Image* m_pImage;  //图片对象
     2 m_pImage=Image::FromFile(_T("Test03.jpg"));
     3 
     4 //错误判断
     5 if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))
     6 {
     7     if ( m_pImage )
     8     {
     9         delete m_pImage;
    10         m_pImage = NULL;
    11     }
    12     return FALSE;
    13 }
    复制代码

    4.绘制图片

    1 Graphics graphics( GetDC()->GetSafeHdc() );
    2 graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth());

    5.关闭Gdiplus

    1 GdiplusShutdown( m_gdiplusToken ); 

    完整示例: 

    复制代码
      1 // GdiplusTestDlg.cpp : 实现文件
      2 //
      3 
      4 #include "stdafx.h"
      5 #include "GdiplusTest.h"
      6 #include "GdiplusTestDlg.h"
      7 #include "afxdialogex.h"
      8 #include <GdiPlus.h> 
      9 
     10 #ifdef _DEBUG
     11 #define new DEBUG_NEW
     12 #endif
     13 
     14 #pragma comment(lib, "gdiplus.lib") 
     15 
     16 using namespace Gdiplus;
     17 
     18 
     19 //变量声明 
     20 Gdiplus::GdiplusStartupInput m_gdiplusStartupInput; 
     21 ULONG_PTR m_gdiplusToken; 
     22 Image* m_pImage;  //图片对象
     23 
     24 // CGdiplusTestDlg 对话框
     25 
     26 
     27 CGdiplusTestDlg::CGdiplusTestDlg(CWnd* pParent /*=NULL*/)
     28     : CDialogEx(CGdiplusTestDlg::IDD, pParent)
     29 {
     30     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
     31 }
     32 
     33 void CGdiplusTestDlg::DoDataExchange(CDataExchange* pDX)
     34 {
     35     CDialogEx::DoDataExchange(pDX);
     36 }
     37 
     38 BEGIN_MESSAGE_MAP(CGdiplusTestDlg, CDialogEx)
     39     ON_WM_PAINT()
     40     ON_WM_QUERYDRAGICON()
     41     ON_WM_DESTROY()
     42 END_MESSAGE_MAP()
     43 
     44 
     45 // CGdiplusTestDlg 消息处理程序
     46 
     47 BOOL CGdiplusTestDlg::OnInitDialog()
     48 {
     49     CDialogEx::OnInitDialog();
     50 
     51     // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
     52     //  执行此操作
     53     SetIcon(m_hIcon, TRUE);         // 设置大图标
     54     SetIcon(m_hIcon, FALSE);        // 设置小图标
     55 
     56     // TODO: 在此添加额外的初始化代码
     57         //初始化GDI+
     58     GdiplusStartup( &m_gdiplusToken, &m_gdiplusStartupInput, NULL );
     59 
     60         //加载文件
     61     m_pImage=Image::FromFile(_T("E:\Workspace\Resource\Chrysanthemum.jpg")); 
     62 
     63         //错误判断 
     64     if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))   
     65     { 
     66         if ( m_pImage ) 
     67         { 
     68             delete m_pImage; 
     69             m_pImage = NULL; 
     70         } 
     71         return FALSE; 
     72     }
     73 
     74     MoveWindow( 0, 0, 1024, 768 ); 
     75 
     76     //设置按钮位置 
     77     CWnd* pBtn = GetDlgItem( IDOK ); 
     78     if ( pBtn ) 
     79     { 
     80         pBtn->MoveWindow( 1024-160, 700, 60, 30 ); 
     81     } 
     82     pBtn = GetDlgItem( IDCANCEL ); 
     83     if( pBtn ) 
     84     { 
     85         pBtn->MoveWindow( 1024-80, 700, 60, 30 ); 
     86     } 
     87     CenterWindow(); 
     88 
     89     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
     90 }
     91 
     92 // 如果向对话框添加最小化按钮,则需要下面的代码
     93 //  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
     94 //  这将由框架自动完成。
     95 
     96 void CGdiplusTestDlg::OnPaint()
     97 {
     98     if (IsIconic())
     99     {
    100         CPaintDC dc(this); // 用于绘制的设备上下文
    101 
    102         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    103 
    104         // 使图标在工作区矩形中居中
    105         int cxIcon = GetSystemMetrics(SM_CXICON);
    106         int cyIcon = GetSystemMetrics(SM_CYICON);
    107         CRect rect;
    108         GetClientRect(&rect);
    109         int x = (rect.Width() - cxIcon + 1) / 2;
    110         int y = (rect.Height() - cyIcon + 1) / 2;
    111 
    112         // 绘制图标
    113         dc.DrawIcon(x, y, m_hIcon);
    114     }
    115     else
    116     {
    117         CDialogEx::OnPaint();
    118     }
    119 
    120     Graphics graphics( GetDC()->GetSafeHdc() );   
    121     graphics.DrawImage(m_pImage, 0,0,m_pImage->GetWidth(),m_pImage->GetWidth()); 
    122 }
    123 
    124 //当用户拖动最小化窗口时系统调用此函数取得光标
    125 //显示。
    126 HCURSOR CGdiplusTestDlg::OnQueryDragIcon()
    127 {
    128     return static_cast<HCURSOR>(m_hIcon);
    129 }
    130 
    131 
    132 
    133 void CGdiplusTestDlg::OnDestroy()
    134 {
    135     CDialogEx::OnDestroy();
    136 
    137     // TODO: 在此处添加消息处理程序代码
    138     if( m_pImage ) 
    139     { 
    140         try 
    141         { 
    142             delete m_pImage; 
    143         } 
    144         catch (...) 
    145         { 
    146 
    147         } 
    148         m_pImage = NULL; 
    149     } 
    150 
    151     GdiplusShutdown( m_gdiplusToken );
    152 }
    复制代码

    运行效果:

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/weekbo/p/10577148.html
Copyright © 2011-2022 走看看