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

千張筆記

Email:rain_qian830@163.com
posts - 28, comments - 42, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

第五章 圖形基礎(chǔ)

圖形設(shè)備接口(GDI:Graphics Device Interface)是Windows的子系統(tǒng),它負(fù)責(zé)在視頻顯示器和打印機(jī)上顯示圖形。GDI的主要目的之一是支持與設(shè)備無關(guān)的圖形。Windows程序應(yīng)該能毫無困難地在Windows支持的任意一種圖形輸出設(shè)備上運(yùn)行,GDI通過將您的程序和不同輸出設(shè)備的特性隔離開來的方法來達(dá)到這一目的。

<1> GDI函數(shù)調(diào)用
組成GDI的幾百個(gè)函數(shù)課分為幾個(gè)大類:
1.獲取和釋放設(shè)備描述表的函數(shù)
2.獲取有關(guān)設(shè)備描述表信息的函數(shù)
3.繪圖函數(shù)
4.設(shè)置和獲取設(shè)備描述表參數(shù)的函數(shù)
5.使用GDI對(duì)象的函數(shù)

GDI圖元:直線和曲線;填充區(qū)域;位圖;文本。
GDI的其他方面:映射模式和變換;元文件;區(qū)域;路徑;剪裁;調(diào)色板;打印。

可用GetDeviceCaps函數(shù)獲得設(shè)備描述表信息。

<2> 關(guān)于色彩
"全色"視頻顯示器的分辨率是每個(gè)像素24位-8位紅色、8位綠色、8位藍(lán)色。
"高彩色"顯示分辨率是每個(gè)像素16位-5位紅色、6位綠色、5位藍(lán)色。
256色的視頻適配器使用色彩調(diào)色板。在大多數(shù)GDI函數(shù)調(diào)用中,使用COLORREF值來表示一種色彩。COLORREF值按照紅、綠和藍(lán)色的亮度指定了一種顏色,通常叫做"RGB色彩"。
在16位或256色視頻適配器上,Windows可以使用"抖動(dòng)"來模擬設(shè)備能夠顯示的顏色之外的色彩。抖動(dòng)利用了由多種色彩的像素組成的像素圖案。可以調(diào)用GetNearestColor來決定與某一色彩最接近的純色。

<3>保存設(shè)備描述表
wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_OWNDC;在窗口風(fēng)格中加入CS_OWNDC,則基于這個(gè)窗口類所創(chuàng)建的每個(gè)窗口都將擁有自己的設(shè)備描述表,它一直存在,直到窗口被刪除。如果使用了CS_OWNDC風(fēng)格,就只需初始化設(shè)備描述表一次,可以在處理WM_CREATE消息期間完成這一操作:
case WM_CREATE:
     hdc=GetDC(hwnd);
     [initialize device context attributes]
     ReleaseDC(hwnd,hdc);
CS_OWNDC風(fēng)格只影響GetDC和BeginPaint獲得的設(shè)備描述表,不影響其他函數(shù)獲得的設(shè)備描述表。(如GetWindowDC)
SaveDC函數(shù)可保存改變屬性之后的hdc,RestoreDC函數(shù)可恢復(fù)調(diào)用SaveDC前存在的hdc。

<4> 畫點(diǎn)和線
1.寫像素
Windows GDI包含了SetPixel和GetPixel來設(shè)置像素和獲得某點(diǎn)像素值。
2.直線
Windows可以畫直線、橢圓線和貝塞爾樣條,Windows NT支持的畫線函數(shù):
LineTo:畫直線
Polyline和PolylineTo:畫一系列相連的線
PolyPolyline:畫多組相連的線
Arc:畫橢圓線
PolyBezier和PolyBezierTo:畫貝塞爾樣條
ArcTo和AngleArc:畫橢圓線
PolyDraw:畫一系列相連的線以及貝塞爾樣條

下面為既畫線也能填充所畫圖形的封閉區(qū)域的函數(shù):
Rectangle:畫矩形
Ellipse:畫橢圓
RoundRect:畫帶圓角的矩形
Pie:畫橢圓的一部分,使其看起來像一個(gè)扇形
Chord:畫橢圓的一部分,以呈弓形。
設(shè)備描述表的五個(gè)屬性影響著用這些函數(shù)所畫線的外觀:當(dāng)前畫筆的位置、畫筆、背景方式、背景色和繪圖模式。

MoveToEx和LineTo畫線
GetCurrentPositionEx獲得當(dāng)前位置

貝塞爾樣條:一條二維ideas貝塞爾樣條由4個(gè)點(diǎn)定義-兩個(gè)端點(diǎn)和兩個(gè)控制點(diǎn)。曲線的端點(diǎn)在兩個(gè)端點(diǎn)上,控制點(diǎn)就像磁石一樣把曲線從兩個(gè)端點(diǎn)間的直線處拉走。

<5> 畫筆的創(chuàng)建、選擇和刪除
HPEN hPen;
hPen=GetStockObject(WHITE_PEN);
SelectObject(hdc,hPen);
如上,獲得畫筆句柄,并把該句柄選進(jìn)設(shè)備描述表后才能使用這個(gè)畫筆。SelectObject的返回值是此調(diào)用前設(shè)備描述表中的畫筆句柄。

邏輯畫筆是一種GDI對(duì)象,它是您可以創(chuàng)建的6種GDI對(duì)象之一,其他5種是刷子、位圖、區(qū)域、字體和調(diào)色板。除了調(diào)色板之外,這些對(duì)象都是通過SelectObject選進(jìn)設(shè)備描述表的。

在使用畫筆等等GDI對(duì)象時(shí),應(yīng)該遵循三條規(guī)則:
1.最后要?jiǎng)h除自己創(chuàng)建的所有GDI對(duì)象;
2.當(dāng)GDI對(duì)象正在一個(gè)有效的設(shè)備描述表中時(shí),不要?jiǎng)h除它;
3.不要?jiǎng)h除現(xiàn)有對(duì)象。

CreatePen和CreatePenIndirect函數(shù)可以創(chuàng)建自己的畫筆,如:
static HPEN hPen;
hPen=CreatePen(PS_SOLID,1,0);
SelectObject(hdc,hPen);
[line-drawing functions]
然后可在WM_DESTROY期間,DeleteObject(hPen);若在WM_PAINT消息期間創(chuàng)建畫筆,也可在EndPaint之前或之后刪除畫筆。

<6> 畫刷
Windows有五個(gè)函數(shù),可以創(chuàng)建邏輯畫刷,然后可用SelectObject將其選進(jìn)設(shè)備描述表。
CreateSolidBrush
CreateHatchBrush
CreatePatternBrush
CreateDIBPatternBrushPt
CreateBrushIndirect

<7> 設(shè)備坐標(biāo)和邏輯坐標(biāo)
映射方式定義了Windows如何將GDI函數(shù)中指定的邏輯坐標(biāo)映射為設(shè)備坐標(biāo),這里的設(shè)備坐標(biāo)系取決于您用哪個(gè)函數(shù)來獲得設(shè)備描述表。

GetClientRect(hwnd,&rect); //獲得客戶區(qū)大小,為設(shè)備單位
DPtoLP(hdc,(POINT)&rect,2); //將設(shè)備坐標(biāo)轉(zhuǎn)換成邏輯坐標(biāo)

LPtoDP(hdc,pPoints,iNumber);將邏輯點(diǎn)轉(zhuǎn)換成設(shè)備點(diǎn)。

<8> 矩形、區(qū)域和裁剪
FillRect:用指定的畫刷填充矩形,不需要先將畫刷選進(jìn)設(shè)備描述表
FrameRect:使用畫刷畫矩形框,但是不填充矩形
InvertRect:將矩形中所有像素翻轉(zhuǎn),1換成0,0換成1

PeekMessage(&msg,NULL,0,0,PM_REMOVE)可將消息從消息隊(duì)列中刪除,如果不希望刪除消息,那最后一個(gè)參數(shù)課設(shè)置成PM_NOREMOVE。當(dāng)消息隊(duì)列中有一個(gè)消息時(shí),PeekMessage返回TRUE,并按通常方式處理消息,當(dāng)隊(duì)列中沒消息,則返回FALSE。
while(TRUE)
{
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
              if(msg.message==WM_QUIT)
              break;
              TranslateMesage(&msg);
              DispatchMessage(&msg);
       }
       else
       {
             [other program lines to do some work]
       }
}

CreateRectRgn:創(chuàng)建矩形區(qū)域
CreateEllipticRgn:創(chuàng)建橢圓區(qū)域
CreateRoundRectRgn:創(chuàng)建圓角的矩形區(qū)域
CreatePolygonRgn:創(chuàng)建多邊形區(qū)域
CombineRgn:將兩個(gè)源區(qū)域組合起來

SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL)將原點(diǎn)設(shè)置到客戶區(qū)的中心。


 PS:下面兩個(gè)鏈接講述GetDC和BeginPaint的區(qū)別
http://www.quanxue.cn/JC_CLanguage/Sdk/Sdk06.html
http://hi.baidu.com/joyeep/blog/item/d60c9351daabed19367abeaf.html

Feedback

# re: 【原】《Windows程序設(shè)計(jì)》第五章學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

2008-12-19 19:51 by coast
筆記做得還蠻仔細(xì)的.我一直都不太會(huì)做筆記,向你學(xué)習(xí).
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产精品久久人人爱蜜臀 | 在线观看日韩精品| 欧美激情视频在线免费观看 欧美视频免费一 | 洋洋av久久久久久久一区| 亚洲欧美中文另类| 99国产精品私拍| 裸体素人女欧美日韩| 久久精品91| 国产精品女主播一区二区三区| 亚洲第一毛片| 亚洲国产福利在线| 久久国内精品自在自线400部| 亚洲欧美日韩国产另类专区| 欧美精品色网| 亚洲人成网站在线播| 欲香欲色天天天综合和网| 欧美一区二区视频免费观看| 翔田千里一区二区| 国产精品国产三级国产专区53| 亚洲激情视频| 一本色道久久综合狠狠躁篇怎么玩 | 欧美一区二区在线免费播放| 欧美日韩激情网| 亚洲人成久久| 一本色道久久综合亚洲精品不| 欧美高清一区| 91久久精品美女| 在线视频亚洲欧美| 欧美午夜久久| 亚洲自拍都市欧美小说| 亚洲女人天堂av| 国产精品三上| 欧美一区二区三区在线观看| 久久久久一区二区三区| 伊人色综合久久天天五月婷| 久久午夜精品| 亚洲激精日韩激精欧美精品| 99国产精品| 国产精品欧美日韩一区| 午夜精品影院| 欧美高清在线视频| 一本久道久久综合中文字幕| 欧美丝袜第一区| 香蕉久久国产| 亚洲国产成人在线播放| 国产精品99久久不卡二区| 国产精品久久999| 久久成人精品电影| 亚洲黄色大片| 亚洲免费人成在线视频观看| 国产欧美精品| 免费日韩成人| 亚洲视频精品| 欧美h视频在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产欧美日韩一区二区三区在线观看 | 亚洲国产成人av好男人在线观看| 9久re热视频在线精品| 国产精品欧美一区二区三区奶水| 欧美在现视频| 91久久中文字幕| 久久国产精品久久精品国产| 亚洲第一精品夜夜躁人人爽| 欧美日韩爆操| 久久久久久午夜| 亚洲午夜在线| 亚洲第一区在线观看| 欧美亚洲日本国产| 亚洲免费成人av电影| 国产午夜亚洲精品不卡| 欧美第十八页| 久久国产毛片| 在线视频欧美一区| 亚洲高清资源综合久久精品| 久久gogo国模啪啪人体图| 日韩一级欧洲| 亚洲高清久久| 国产视频精品xxxx| 欧美日韩一级片在线观看| 久久久另类综合| 亚洲欧美另类久久久精品2019| 欧美激情一区三区| 久久美女艺术照精彩视频福利播放| 亚洲视频专区在线| 亚洲人成网站色ww在线| 黄网动漫久久久| 国产欧美视频一区二区| 欧美视频在线观看 亚洲欧| 麻豆视频一区二区| 久久精品首页| 欧美在线免费看| 亚洲伊人伊色伊影伊综合网| 日韩网站在线观看| 91久久精品日日躁夜夜躁欧美| 久久综合五月| 狼人天天伊人久久| 久久久www成人免费无遮挡大片 | 亚洲欧美日韩国产综合| 日韩视频中午一区| 亚洲激情图片小说视频| 激情伊人五月天久久综合| 国产一区二区在线观看免费播放 | 国产综合av| 国产日产亚洲精品| 国产三级精品在线不卡| 国产区精品在线观看| 国产精品美女一区二区在线观看| 欧美日韩精品久久久| 欧美激情一二三区| 欧美精品v日韩精品v国产精品| 欧美 日韩 国产一区二区在线视频 | 欧美精品在线免费播放| 欧美精品一区二区三区蜜桃| 欧美精品免费在线观看| 欧美激情视频在线免费观看 欧美视频免费一 | 久久久久一本一区二区青青蜜月| 欧美伊人久久| 久久综合九色综合网站| 欧美成人r级一区二区三区| 欧美α欧美αv大片| 暖暖成人免费视频| 91久久综合| 亚洲天堂免费观看| 欧美综合国产精品久久丁香| 久久国产夜色精品鲁鲁99| 久久久久久久久岛国免费| 男女激情久久| 欧美午夜剧场| 国产在线欧美| 亚洲精品国产视频| 亚洲综合另类| 久久在线精品| 亚洲精品小视频| 午夜亚洲视频| 欧美成人精品不卡视频在线观看 | 欧美男人的天堂| 国产精品丝袜91| 在线国产日韩| 中日韩美女免费视频网址在线观看 | 欧美+日本+国产+在线a∨观看| 欧美风情在线观看| 一本色道久久综合亚洲精品不卡| 亚洲欧美大片| 欧美国产第二页| 国产热re99久久6国产精品| 亚洲国产mv| 午夜精品在线视频| 欧美国产日韩一区二区在线观看| 在线视频精品一| 久久全球大尺度高清视频| 国产精品成人免费视频 | 午夜精品亚洲| 欧美激情精品久久久久久大尺度| 在线亚洲一区观看| 免费观看成人| 国产亚洲欧美日韩精品| 夜夜狂射影院欧美极品| 快播亚洲色图| 亚洲女性喷水在线观看一区| 免费不卡中文字幕视频| 国产欧美在线观看| 亚洲天天影视| 亚洲国产成人av| 久久久国产精品一区| 国产欧美日韩不卡| 亚洲午夜久久久| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲欧美日韩国产中文在线| 欧美国产成人精品| 在线成人av网站| 久久久久久久久岛国免费| 一区二区三区免费网站| 欧美大片一区二区三区| 一区二区三区在线不卡| 欧美一区二区日韩| 亚洲视频在线一区观看| 欧美精品久久久久久久久老牛影院| 极品尤物久久久av免费看| 欧美在线你懂的| 亚洲少妇自拍| 欧美天堂在线观看| 一区二区欧美日韩| 亚洲激情中文1区| 欧美aaaaaaaa牛牛影院| 亚洲第一天堂av| 牛牛精品成人免费视频| 久久久久久97三级| 国产在线视频欧美| 久久国产精品久久国产精品| 亚洲在线观看视频| 国产精品一二三视频| 亚洲一区精品在线| 中文一区二区在线观看| 欧美日一区二区三区在线观看国产免| 亚洲看片免费| 亚洲精品视频在线| 欧美日韩精品免费观看视频完整| 亚洲欧洲日本国产| 亚洲国产一区在线| 欧美日韩伦理在线|