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 }
    复制代码

    运行效果:

  • 相关阅读:
    几种开源SIP协议栈对比OPAL,VOCAL,sipX,ReSIProcate,oSIP
    google开源的C++性能分析工具
    常用SNS开源系统比较
    推荐20个开源项目托管网站
    web2.0的几个开源项目
    开源src镜像
    Niagara解决设备连接应用的软件框架平台技术。
    Signing key has not been configured
    Mybatis 简单的CRUD 基于XML文件配置
    HDU4451Dressing(计数)
  • 原文地址:https://www.cnblogs.com/weekbo/p/10577148.html
Copyright © 2011-2022 走看看