青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

流量統計:
Rixu Blog (日需博客)
日需博客,每日必需來踩踩哦..
posts - 108,comments - 54,trackbacks - 0

五年前,筆者曾在C#中使用GDI+開發程序,對其頗有好感。這一段時間,在使用VC6作圖時,深切感會到使用GDI的種種不便,不比GDI+好用。沉迷于VC6的高效與輕便,不想只為了一個GDI+而被迫安裝沉甸甸的.Net,便產生了一個疑問,難道GDI+只能用于.Net中嗎?

訪問微軟的MSDN網站后,隨即解開了此謎。于是便有了此文 – 如何在VC6 MFC中使用GDI+。

GDI+可應用于二維向量圖象,柵格圖象及排版,是為C/C++程序員而設計的表現為C++類而存在的接口,能用于一切基于Windows的應用中。作為GDI的后繼者,GDI+在GDI中增加了新功能,如文本的反鋸齒,漸變筆刷,Alpha溶合;也優化了GDI許多已有的功能。此外,GDI+改變了編程模式,使其更靈活及易用。

GDI+并不限于在.Net中存在,實際上它由Windows XP或Windows Server 2003操作系統提供。它被打包在一個名為GdiPlus.dll的文件中。此文件位于C:/Windows/WinSxS下的相應文件夾下。以筆者的XP系統為例,共有2個版本,其相應的文件夾分別是:

x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.0.0_x-ww_8d353f13
x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.2180_x-ww_522f9f82

在應用程序中,我們不需指定版本號,系統自動選擇最新的版本。先假設我們已經在VC6中編好一個GDI+應用,在degbug版本中單擊菜單Build->Start Debug->Go啟動調試,再終止應用,在VC6的Output區域中可以看到以下信息:
Loaded 'C:/WINDOWS/WinSxS/x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.2180_x-ww_522f9f82/GdiPlus.dll'
說明系統自動選擇了最新的版本。

如同Windows是用C語言編寫,GdiPlus.dll是以C函數實現的,并沒有封裝為C++類,從而給非C程序員帶來不便。又如同MFC所為,微軟再次將這些C函數打包為C++類的形式,向C++程序員提供了以GdiPlus.h領頭的30個頭文件及一個GdiPlus.lib。因此,如果您是C程序員,則只需GdiPlus.dll就行了;C++程序員則還需要找到GdiPlus.h等頭文件及GdiPlus.lib文件。

Windows XP或Windows Server 2003應使用系統自帶的GdiPlus.dll,以免與系統服務沖突。而對于版本低于Windows XP的Windows,如Windows NT 4.0 SP6, Windows 2000, Windows98及Windows Me,則需要此文件。可到微軟的官方地址去下載分發包gdiplus_dnld.exe文件,地址為:
http://www.microsoft.com/downloads/details.aspx?FamilyID=6a63ab9c-df12-4d41-933c-be590feaa05a&DisplayLang=en

該文件是一個自解壓的文件,應將其解壓到應用程序的目錄下,但不要安裝在系統目錄中。

C++程序員還應去找GdiPlus.h及GdiPlus.lib。以下地址所提供的名為gdiplus.zip的文件就包括了這些文件:
http://www.crazy-bit.com/download/gdiplus.zip

而以下的地址則提供了一站式的所有資源,即包含了GdiPlus.h等頭文件, GdiPlus.lib及GdiPlus.dll:
http://www.codersource.net/samples/mfcgdiplus.zip

根據解壓的不同方式,有不同的引用方法。

第一種方法是直接引用,需要將gdiplus.h, gdiplus.lib分別拷貝至VC相應的include及lib目錄下。這兩個目錄可通過VC6的Toos->Options->Directories標簽頁中,在Show directories for下拉列表框中分別選擇Include files及Library files查詢到。如Include,一般包括3個路徑:VC98/INCLUDE, VC98/MFC/INCLUDE及VC98/ATL/INCLUDE,分別對應非MFC應用,MFC應用及ATL應用所用的不同路徑。

然后在StdAfx.h中加入如下的語句:

#define ULONG_PTR ULONG 
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")

GdiPlusInit.h中使用了ULONG_PTR的數據類型,但此類型在VC6中沒有定義。因此必須在#include語句之前先進行定義。#pragma comment(lib, "gdiplus.lib")指示在連接時在應用所在目錄或系統LIB目錄下查找gdiplus.lib。

第二種方法是將其解壓到任意一個文件夾,然后在StdAfx.h中明確指明具體路徑。

#define ULONG_PTR ULONG 
#include "C:/gdiplus/Include/gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "C:/gdiplus/lib/gdiplus.lib")

除了用以上的方法連接gdiplus.lib之外,還可以在Project->Settings->Link->Object/library modules中輸入gdiplus.lib(若有多個庫,可用空格隔開,但GDI+只有一個庫)。這種方法,可不用在StdAfx.h中輸入#pragma comment。

在使用GDI+之前,您必須通過GdiplusStartup()啟動GDI+,而在使用完畢后,調用GdiplusShutdown()來清理現場。 根據MFC的特點,應相應地放在XXXApp類的InitInstance()及ExitInstance()中。

先為XXXApp類添加兩私有成員變量:
private:
 GdiplusStartupInput gdiplusStartupInput;
 ULONG_PTR gdiplusToken;

然后在InitInstance()中,在調用m_pMainWnd->ShowWindow()及m_pMainWnd->UpdateWindow()之前調用GdiplusStartup():

 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

 // The one and only window has been initialized, so show and update it.
 m_pMainWnd->ShowWindow(SW_SHOW);
 m_pMainWnd->UpdateWindow();
 return TRUE;

注意,如果GdiplusStartup()放在ShowWindow()及UpdateWindow()之后,則當窗口第一次顯示時,由于GDI+還未啟動,GDI+所畫的圖形不會顯示出來,直到第二個WM_PAINT的消息傳到。

而在ExitInstance()中,如下編寫代碼:

 GdiplusShutdown(gdiplusToken);
 return CWinApp::ExitInstance();

現在,GDI+已經準備完畢,可以使用了。

在XXXView類的OnDraw()方法中:

 Graphics graphics(pDC->m_hDC);
 
 Pen pen(Color(50, 255, 0, 255), 15);
 pen.SetDashStyle(DashStyleDash);
 pen.SetStartCap(LineCapRoundAnchor);
 pen.SetEndCap(LineCapArrowAnchor);
 
 graphics.DrawLine(&pen, 20, 20, 300, 100);
 graphics.DrawLine(&pen, 300, 100, 600, 100);

先使用OnDraw()方法的參數pDC的成員變量m_hDC在堆上構造一個Graphics的實例graphics,創建一個Pen并進行設置,然后通過graphics的DrawLine()方法畫出直線來。

與GDI相比較,GDI+不必將Pen, Brush等對象選進DC再畫圖,而是通過使用DC的句柄來創建一個Graphics實例,之后,直接使用此實例來進行畫圖。這種風格,確實大大方便了編程人員。

至此,我們可以在VC6 MFC中使用GDI+描繪美好的未來了。:) 

Logo
作者:Gezidan
出處:http://www.rixu.net    
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
posted on 2011-08-23 09:10 日需博客 閱讀(2893) 評論(6)  編輯 收藏 引用 所屬分類: C C++Windows技術文章轉載

FeedBack:
# re: GDI+ for VC6 MFC
2011-08-23 14:58 | 布拉德比特
好東西,樓主牛逼  回復  更多評論
  
# re: GDI+ for VC6 MFC
2011-08-23 15:52 | K.V
我覺得還是放棄VC6的好  回復  更多評論
  
# re: GDI+ for VC6 MFC
2011-08-23 16:05 | 他她女鞋
還挺復雜的。  回復  更多評論
  
# re: GDI+ for VC6 MFC
2011-08-23 21:47 | Gezidan Studio
為啥呢@K.V
  回復  更多評論
  
# re: GDI+ for VC6 MFC
2011-08-24 11:30 | 空明流轉
@Gezidan Studio
編譯器爛,運行時也爛。  回復  更多評論
  
# re: GDI+ for VC6 MFC
2011-08-26 13:31 | xhk
貌似MFC中的CImage對象就是用了GDI plus吧  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩xxxxx| 欧美激情在线有限公司| 国产一区二区三区久久久| 国产精品久久综合| 国产模特精品视频久久久久| 免费观看30秒视频久久| 欧美影院成年免费版| 香蕉久久夜色精品国产| 亚洲综合色丁香婷婷六月图片| 亚洲午夜在线观看| 久久久久久久综合日本| 欧美成人在线免费视频| 亚洲精品一区二区网址| 性做久久久久久免费观看欧美| 久久久久成人精品| 免费成人性网站| 欧美大片在线看免费观看| 欧美特黄一级大片| 国产一区二区日韩| 日韩视频在线永久播放| 久久国产精品久久久久久久久久| 免费成人毛片| 一区二区三区日韩精品| 久久网站免费| 亚洲网站在线播放| 久久综合九色综合久99| 亚洲精品国产精品国自产观看浪潮 | 可以看av的网站久久看| 欧美一区二区三区在线观看视频| 久久午夜色播影院免费高清| 99精品视频免费在线观看| 久久男女视频| 国产精品视频一区二区三区| 亚洲国产老妈| 久久亚洲视频| 亚洲一二三区在线| 欧美理论电影网| 亚洲国产国产亚洲一二三| 久久精品在这里| 一区二区欧美激情| 欧美国产在线观看| 国模精品娜娜一二三区| 亚洲午夜精品视频| 欧美二区乱c少妇| 亚洲欧美在线一区| 国产精品成人在线观看| 亚洲三级网站| 欧美成人中文字幕| 午夜精品视频一区| 国产精品永久| 亚洲欧美成人在线| 亚洲精品综合| 欧美日韩国产综合一区二区| 亚洲欧洲视频在线| 欧美激情在线狂野欧美精品| 免费在线亚洲| 91久久国产精品91久久性色| 欧美xart系列高清| 欧美日韩第一区日日骚| 亚洲免费观看高清完整版在线观看熊| 久久九九国产| 亚洲欧美国产va在线影院| 国产精品日韩欧美一区| 亚洲一区美女视频在线观看免费| 亚洲乱码国产乱码精品精98午夜| 欧美日韩精品二区| 99在线精品视频| 亚洲精品乱码久久久久久蜜桃91| 欧美精品国产| 亚洲深夜av| 亚洲欧美网站| 国内久久精品| 91久久精品美女| 欧美日韩一区二区三区视频| 亚洲永久视频| 欧美在线视频全部完| 18成人免费观看视频| 最新国产乱人伦偷精品免费网站| 欧美极品影院| 欧美一区二区三区视频免费| 久久国产高清| 99天天综合性| 欧美一区二区视频免费观看 | 亚洲人成人99网站| 99精品视频免费| 好吊妞**欧美| 亚洲精品欧美一区二区三区| 国产麻豆日韩欧美久久| 欧美夫妇交换俱乐部在线观看| 欧美精品粉嫩高潮一区二区 | 亚洲精品日日夜夜| 国产视频一区在线观看| 免费不卡在线观看av| 欧美三级电影一区| 免播放器亚洲一区| 国产精品久久久久秋霞鲁丝| 美女免费视频一区| 国产精品国码视频| 欧美激情精品久久久久久变态| 欧美午夜精品久久久久久久| 久久婷婷国产综合国色天香| 欧美日韩一区视频| 欧美va天堂va视频va在线| 国产精品白丝jk黑袜喷水| 免费久久99精品国产自| 国产乱码精品| 91久久精品网| 亚洲国产欧美一区| 欧美在线不卡| 午夜综合激情| 欧美精品www| 欧美国产在线电影| 国内精品久久久久久| 亚洲手机视频| 亚洲校园激情| 欧美日本一区二区视频在线观看| 久久香蕉国产线看观看网| 最新日韩av| 鲁大师成人一区二区三区| 欧美一区网站| 欧美午夜视频一区二区| 亚洲国产精品日韩| 亚洲国产精品传媒在线观看 | 亚洲欧美激情视频在线观看一区二区三区| 18成人免费观看视频| 亚洲欧美日韩成人高清在线一区| 亚洲午夜激情免费视频| 欧美日韩成人在线播放| 亚洲国产精品热久久| 亚洲第一中文字幕| 久久漫画官网| 欧美成人嫩草网站| 狠狠色狠狠色综合人人| 欧美在线一二三区| 久久亚洲精品欧美| 影音先锋亚洲一区| 久久最新视频| 亚洲国产日韩在线一区模特| 亚洲韩国日本中文字幕| 麻豆精品视频在线| 亚洲国产高清一区二区三区| 亚洲三级国产| 欧美日本亚洲| 亚洲综合成人婷婷小说| 欧美一区二区黄| 国内成人精品2018免费看| 久久久久久久久久久一区| 久久综合九色综合欧美就去吻| 在线欧美视频| 欧美日韩1080p| 亚洲综合二区| 欧美 日韩 国产在线 | 亚洲精品视频在线观看网站| 欧美精品免费视频| 一本一本久久a久久精品牛牛影视| 亚洲私人黄色宅男| 国产精品裸体一区二区三区| 久久精品一区二区| 亚洲国产精品小视频| 一区二区日本视频| 国产精品一区二区三区成人| 久久久久一区二区三区| 亚洲精品免费一区二区三区| 午夜精品美女自拍福到在线| 激情懂色av一区av二区av| 欧美激情1区| 性做久久久久久久免费看| 欧美韩日一区| 欧美亚洲一级| 日韩视频免费观看| 国产婷婷色一区二区三区在线| 久久精品国产99国产精品| 亚洲精品一区在线观看香蕉| 香蕉亚洲视频| 亚洲精品一区二区三区99| 国产精品久久久久一区二区三区共| 欧美综合国产精品久久丁香| 亚洲国产日韩一区| 久久综合伊人77777麻豆| 亚洲一线二线三线久久久| 亚洲二区免费| 狠狠色丁香婷婷综合久久片| 国产精品久久久久久久久果冻传媒 | 国产日韩欧美一区在线| 久久午夜精品一区二区| 一区二区三区国产精华| 欧美激情精品久久久久| 久久精品国产免费| 亚洲精品欧美一区二区三区| 国产亚洲午夜| 国产女主播在线一区二区| 欧美日韩国产va另类| 久热爱精品视频线路一| 欧美一级午夜免费电影| 亚洲免费黄色| 亚洲日本欧美在线| 亚洲二区在线| 欧美二区在线播放| 欧美阿v一级看视频| 玖玖国产精品视频|