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

兔子的技術(shù)博客

兔子

   :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

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

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

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

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

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

在應(yīng)用程序中,我們不需指定版本號(hào),系統(tǒng)自動(dòng)選擇最新的版本。先假設(shè)我們已經(jīng)在VC6中編好一個(gè)GDI+應(yīng)用,在degbug版本中單擊菜單Build->Start Debug->Go啟動(dòng)調(diào)試,再終止應(yīng)用,在VC6的Output區(qū)域中可以看到以下信息:
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.2180_x-ww_522f9f82\GdiPlus.dll'
說明系統(tǒng)自動(dòng)選擇了最新的版本。

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

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

該文件是一個(gè)自解壓的文件,應(yīng)將其解壓到應(yīng)用程序的目錄下,但不要安裝在系統(tǒng)目錄中。

C++程序員還應(yīng)去找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

根據(jù)解壓的不同方式,有不同的引用方法。

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

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

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

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

第二種方法是將其解壓到任意一個(gè)文件夾,然后在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(若有多個(gè)庫,可用空格隔開,但GDI+只有一個(gè)庫)。這種方法,可不用在StdAfx.h中輸入#pragma comment。

在使用GDI+之前,您必須通過GdiplusStartup()啟動(dòng)GDI+,而在使用完畢后,調(diào)用GdiplusShutdown()來清理現(xiàn)場(chǎng)。 根據(jù)MFC的特點(diǎn),應(yīng)相應(yīng)地放在XXXApp類的InitInstance()及ExitInstance()中。

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

然后在InitInstance()中,在調(diào)用m_pMainWnd->ShowWindow()及m_pMainWnd->UpdateWindow()之前調(diào)用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()之后,則當(dāng)窗口第一次顯示時(shí),由于GDI+還未啟動(dòng),GDI+所畫的圖形不會(huì)顯示出來,直到第二個(gè)WM_PAINT的消息傳到。

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

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

現(xiàn)在,GDI+已經(jīng)準(zhǔn)備完畢,可以使用了。

在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()方法的參數(shù)pDC的成員變量m_hDC在堆上構(gòu)造一個(gè)Graphics的實(shí)例graphics,創(chuàng)建一個(gè)Pen并進(jìn)行設(shè)置,然后通過graphics的DrawLine()方法畫出直線來。

與GDI相比較,GDI+不必將Pen, Brush等對(duì)象選進(jìn)DC再畫圖,而是通過使用DC的句柄來創(chuàng)建一個(gè)Graphics實(shí)例,之后,直接使用此實(shí)例來進(jìn)行畫圖。這種風(fēng)格,確實(shí)大大方便了編程人員。

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

 

轉(zhuǎn)自:http://blog.csdn.net/tanghw/archive/2008/02/17/2100187.aspx

posted on 2011-03-16 15:21 會(huì)飛的兔子 閱讀(1005) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++庫,組件
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一本一本a久久| 久久青青草综合| 亚洲一区二区三区乱码aⅴ| 久久精品国产精品| 99精品视频免费观看视频| 久久久久久网站| 国产欧美丝祙| 欧美一区二区三区视频免费| 亚洲高清激情| 久久尤物视频| 1024精品一区二区三区| 久久一综合视频| 久久久av毛片精品| 国产亚洲永久域名| 久久成人18免费观看| 亚洲图片你懂的| 欧美视频在线播放| 亚洲素人一区二区| 亚洲免费大片| 欧美日韩在线综合| 中国成人在线视频| 一区二区高清在线观看| 欧美午夜精品久久久久免费视| 亚洲精品久久久久久久久久久久| 老司机午夜精品视频| 欧美专区在线播放| 精品91在线| 欧美激情在线狂野欧美精品| 美国十次了思思久久精品导航| 亚洲高清视频一区二区| 欧美高清视频免费观看| 欧美激情综合亚洲一二区 | 亚洲美女诱惑| 亚洲精品久久久久久久久久久久| 欧美精品一区二区三| 亚洲一二三区在线观看| 亚洲欧美激情视频| 影院欧美亚洲| 亚洲伦理在线观看| 国产日韩精品一区二区| 久久午夜电影网| 欧美成人免费全部观看天天性色| 亚洲深夜av| 久久九九热re6这里有精品| 91久久午夜| 久久综合九色九九| 亚洲综合激情| 好吊视频一区二区三区四区| 牛牛国产精品| 欧美日韩一区二区在线| 久久久天天操| 99热在这里有精品免费| 毛片av中文字幕一区二区| 国产欧美日韩精品在线| 中文一区在线| 亚洲精品一区二区三| 欧美成人高清| 亚洲三级视频| 91久久精品美女高潮| 久久在精品线影院精品国产| 国产婷婷色一区二区三区在线| 亚洲视频欧美视频| 一本在线高清不卡dvd| 欧美日韩国产天堂| 一区二区成人精品| 亚洲精品中文字| 欧美日韩免费观看一区=区三区| 亚洲国产一区视频| 亚洲精品久久久久久一区二区| 欧美电影在线观看完整版| 亚洲区一区二区三区| 亚洲黄色一区| 欧美视频网站| 欧美在线啊v一区| 欧美在线三级| 亚洲国产精品一区二区三区| 欧美成人精品不卡视频在线观看| 久久久美女艺术照精彩视频福利播放| 精品av久久久久电影| 欧美高清不卡| 欧美午夜精品一区二区三区| 亚洲欧美日韩在线播放| 欧美一级久久久久久久大片| 雨宫琴音一区二区在线| 亚洲成人自拍视频| 欧美视频网址| 美女免费视频一区| 欧美激情精品久久久久久免费印度| 99re亚洲国产精品| 亚洲一区一卡| 亚洲精品日本| 亚洲欧美文学| 亚洲欧洲一二三| 亚洲一卡久久| 亚洲欧洲精品成人久久奇米网| 中文国产亚洲喷潮| 亚洲国产精品va在线看黑人| 一区二区日韩免费看| 伊人精品在线| 一区二区三区黄色| 亚洲国产成人午夜在线一区| 在线中文字幕不卡| 亚洲电影免费观看高清完整版在线观看 | 亚洲国产精品精华液2区45| 亚洲电影下载| 国产日本欧洲亚洲| 亚洲精品字幕| 1204国产成人精品视频| 亚洲性xxxx| 亚洲视频在线看| 乱码第一页成人| 久久精品在线播放| 欧美日韩免费一区| 欧美大片免费观看在线观看网站推荐| 国产精品久久久久一区| 亚洲国产精品尤物yw在线观看 | 久久另类ts人妖一区二区| 亚洲小视频在线观看| 欧美成人免费小视频| 久久久久久噜噜噜久久久精品| 欧美午夜在线观看| 91久久久亚洲精品| 亚洲国产另类精品专区| 久久成人综合网| 欧美自拍偷拍午夜视频| 国产精品国产三级国产普通话蜜臀 | 亚洲图片欧洲图片日韩av| 亚洲精品欧洲精品| 久久久亚洲精品一区二区三区 | 亚洲麻豆一区| 99视频在线观看一区三区| 猛男gaygay欧美视频| 裸体歌舞表演一区二区| 国产一区二区高清不卡| 午夜一级久久| 久久精品国产亚洲一区二区| 国产精品美女久久久| 亚洲午夜电影在线观看| 亚洲欧美日韩中文视频| 国产精品不卡在线| 一区二区三区免费观看| 亚洲一区二区三区在线观看视频| 欧美精品综合| 一区二区三区日韩在线观看| 亚洲综合电影| 国产亚洲精品高潮| 欧美中文字幕在线播放| 老司机一区二区| 亚洲精品久久久久中文字幕欢迎你| 老司机成人网| 亚洲激情视频网| 亚洲影院在线| 狠狠色2019综合网| 欧美国产精品劲爆| 99精品视频免费观看| 午夜精品久久久久影视 | 91久久精品国产91久久| 老司机一区二区| 日韩视频免费看| 欧美一级视频精品观看| 国产在线精品自拍| 欧美不卡视频一区| 一区二区欧美在线| 久久久久久久999精品视频| 极品裸体白嫩激情啪啪国产精品| 美女精品在线观看| 99在线|亚洲一区二区| 久久精品午夜| 亚洲精品免费电影| 国产精品亚洲网站| 猫咪成人在线观看| 亚洲欧美国产精品va在线观看| 久久青草久久| 在线亚洲精品福利网址导航| 国产一区二区成人| 欧美日韩午夜剧场| 久久天天狠狠| 亚洲免费婷婷| 亚洲精选视频在线| 麻豆成人在线观看| 香蕉av777xxx色综合一区| 亚洲激情av| 国产一区二区三区四区老人| 欧美日韩91| 美女主播一区| 久久精品视频导航| 亚洲欧美日韩另类| 在线综合亚洲欧美在线视频| 亚洲国产第一页| 女主播福利一区| 久久精品夜色噜噜亚洲a∨| 亚洲午夜激情网页| 亚洲欧洲在线视频| 一区二区在线视频观看| 国产欧美日韩伦理| 欧美亚洲成人网| 欧美精品一区在线观看| 久久综合精品国产一区二区三区| 午夜日本精品| 亚洲欧美制服另类日韩|