亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Windows API-GDI入門基礎知識詳解(1)

2019-11-17 05:03:19
字體:
來源:轉載
供稿:網友
什么是GDI?  GDI是Graphics Device Interface的縮寫,含義是圖形設備接口,它的主要任務是負責系統與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。
  在Windows操作系統下,絕大多數具備圖形界面的應用程序都離不開GDI,我們利用GDI所提供的眾多函數就可以方便的在屏幕、打印機及其它輸出設備上輸出圖形,文本等操作。GDI的出現使程序員無需要關心硬件設備及設備驅動,就可以將應用程序的輸出轉化為硬件設備上的輸出,實現了程序開發者與硬件設備的隔離,大大方便了開發工作。GDI是如何實現輸出的?  要想在屏幕或者其它輸出設備上輸出圖形或者文字,那么我們就必須先獲得一個稱為設備描述表( DC:Device Context)的對象的句柄,以它為參數,調用各種GDI函數實現各種文字或圖形的輸出。
設備描述表是GDI內部保存數據的一種數據結構,此結構中的屬性內容與特定的輸出設備(顯示器,打印機等)相關,屬性定義了GDI函數的工作細節,在稍后我們將看到如何使用TextOut函數輸出文字,在這里屬性確定了文字的顏色,x坐標和y坐標映射到窗口顯示區域的方式等。  設備描述表句柄一旦獲得,那么系統將使用默認的屬性值填充設備描述表結構?! 〖偃缬斜匾覀兛梢允褂靡恍〨DI函數獲取和改變設備描述表中的屬性值。什么是有效矩形什么是無效矩形?  當應用程序接受到WM_PAINT消息后通常就預備更新正個顯示區域,但是通常只需要更新一個比較小的區域而不是整個區域,這種情況通常出現在當應用程序的主窗口的一部分被一個對話框覆蓋,需要重畫的只是被覆蓋的矩形區域(見下圖)。Windows API-GDI入門基礎知識詳解(1)  EXE示例程序下載:點擊這里下載(90K, WinZip壓縮文件)  陰影以下的部分就是需要更新的矩形區域,該區域就是我們所說的無效區域,正是因為此區域的存在,系統才會向消息隊列中放入一個WM_PAINT消息?! indows內部為每個窗口都保留了一個繪圖結構(PAINTSTRUCT),它包含了包圍無效區域的最小矩形的坐標和一些其它信息,需要注重的是當窗口消息處理函數在處理WM_PAINT消息之前顯示區域中出現了另一個無效區域,那么Windows會計算出一個包圍兩個無效區域的新無效區域,并把這種變化保存在繪圖結構(PAINTSTRUCT)中,Windows是不會同時把多個WM_PAINT消息同時放到消息隊列中的。  窗口消息處理函數是通過調用InvalidateRect函數使窗口顯示區域內的矩形變為無效的,假如消息隊列中已經存在一個WM_PAINT消息,那么Windows將計算出新的無效矩形,在接收到WM_PAINT消息的時候,窗口消息處理函數可以獲得無效矩形的座標,通過調用GetUpdateRect,可以在任何時候獲得這些坐標。
更多文章 更多內容請看linux基礎知識  Solaris基礎知識入門  Windows操作系統安全集專題,或 如何獲取或釋放設備描述表句柄?   當應用程序需要繪圖的時候,必須先獲取設備描述表句柄,繪圖操作結束后必須釋放設備描述表句柄。我們有兩種方法獲取和釋放設備描述表句柄。1. 使用BeginPaint和Endpaint函數
  通常是在應用程序接收到WM_PAINT消息,也就是需要更新窗口的顯示區域的時候調用BeginPaint函數獲取設備描述表句柄的,使用完后調用Endpaint函數釋放設備描述表句柄。他們的函數原型為:HDC BeginPaint(

HWND hwnd,,             // handle to window
LPPAINTSTRUCT pPaint   // paint information
);
BOOL EndPaint(
  HWND hWnd,                   // handle to window
  CONST PAINTSTRUCT *pPaint   // paint data
);  從上面BeginPaint函數的原形中我們可以看到需要一個PAINTSTRUCT結構對象的內存地址,PAINTSTRUCT結構包含在WinUser.h頭文件中?! 《x如下:typedef struct tagPAINTSTRUCT {
  HDC         hdc; //設備描述表句柄
  BOOL        fErase; //擦除狀態
  RECT        rcPaint; //無效矩形座標
  BOOL        fRestore;
  BOOL        fIncUpdate;
  BYTE        rgbReserved[32];
}
PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;  事實上當程序調用BeginPaint函數的時候,Windows會自動的填寫此結構的各個屬性,而程序作者只需要關心前三個屬性?! 〉谝粋€屬性hdc表示當前的設備描述表句柄?! 〉诙€屬性fErase來說,多數情況下它是被標記成FALSE(0)的,這表示Windows已經擦除了無效矩形的背景,這個擦除動作是是在BeginPaint函數中發生的,而擦除背景用的畫刷則是WNDCLASS結構中的hbrBackground屬性指定的畫刷來擦除背景的,在很多情況下可能程序作者想自己定義一些插除行為,那么可以通過響應消息隊列中的WM_ERASEBKGND消息來完成?! 〉谌齻€屬性rcPaint則表示無效矩形座標,它定義了無效矩形的邊界。  RECT結構可以在WinDef.h頭文件中找到?! 《x如下:typedef struct tagRECT
{
LONG    left;
LONG    top;
LONG    right;
LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;  注重,我們在前面提到了InvalidateRect函數,并已經清楚了調用它可以讓窗口顯示區域內的矩形變為無效,那么我們就可以在處理WM_PAINT消息的時候通過調用它實現在無效矩形外繪圖,該調用是在調用BegingPaint函數之前調用的?! ∈褂梅椒ǎ篒nvalidateRect(hwnd,NULL,TRUE);  通過上面代碼的調用我們讓整個顯示區域變為了無效,并擦除背景,要注重的是,最后一個參數假如為FALSE,則不擦除背景,原有的東西將保留在原處,這通常是在接受到WM_PAINT消息的時候而不考慮rcPaint屬性的情況下簡單的重繪整個顯示區域最方便的方法,例如,在顯示區域內我們輸出了一個圖形,這個圖形的一小部分落在了無效矩形區域內,而這就讓繪制這個圖形的無效部分變的沒有意義,這時就需要重繪整個圖形,因為在調用BeginPaint函數傳回設備描述表句柄的時候,Windows不會繪制rcPaint也就是無效矩形以外的任何部分?! τ贗nvalidateRect函數的具體舉例,我們將在以后的章節中看到。
更多文章 更多內容請看Linux基礎知識  Solaris基礎知識入門  Windows操作系統安全集專題,或 2. 使用GetDC和ReleaseDC函數
  在很多情況下我們可能需要在接收到非WM_PAINT消息的時候獲取設備描述表句柄,通過調用GetDC函數我們可以獲得設備描述表句柄,因為程序作者可能要使用設備描述表句柄完成其它工作,例如獲得設備描述表屬性,或者修改設備描述表屬性值等,在最后我們與第一種方法一樣要釋放句柄,通過調用ReleaseDC函數完成工作?! ∷麄兊暮瘮翟蜑椋篐DC GetDC(

  HWND hWnd    // handle to window
);
int ReleaseDC(
        HWND hWnd,  // handle to window
        HDC hDC      // handle to DC
);  兩種方法的區別:  <1> 使用BeginPaint函數獲得的的操作區域是顯示區域中的無效矩形區域,接下來繪圖操作只能在窗口的無效區域范圍內進行,無效區域以外的區域將被忽略不能進行操作,而GetDC函數獲得的操作區域則是整個窗口的顯示區域,之后的操作可以在任何部分進行,而不只限制在無效區域?! ?lt;2> BeginPaint函數會自動把無效區域變成有效的區域,而GetDC函數則不會將任何無效區域變得有效,必須強行調用ValidateRect函數,并把第二個參數設置為NULL來完成?! ∽詈笪覀兘o出一個可執行程序的例子,當應用程序執行的時候會有一個對話框出現,當你拉動這個對話框的時候又會出現同樣的另一個對話框,這就證實了窗口的覆蓋會造成無效矩形的出現,系統將會發送WM_PAINT消息?! ∥赐甏m……
更多文章 更多內容請看Linux基礎知識  Solaris基礎知識入門  Windows操作系統安全集專題,或

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠操狠狠色综合网| 国产亚洲福利一区| 日韩欧美国产免费播放| 在线观看欧美成人| 亚洲www视频| 亚洲国产成人久久| 欧美视频中文在线看| 亚洲国产精品va在线看黑人| 亚洲欧美另类国产| 欧美午夜女人视频在线| 国产午夜精品视频| 国产精品综合不卡av| 国产精品旅馆在线| 欧洲成人性视频| 伊人久久精品视频| 一区二区三区亚洲| 国产精品普通话| 国产欧美日韩免费看aⅴ视频| 国产午夜精品视频免费不卡69堂| 亚洲天堂视频在线观看| 国产日韩欧美在线视频观看| 日韩av网址在线观看| 欧美激情在线有限公司| 亚洲精品久久久久久久久久久| 欧美日韩一区二区免费在线观看| 亚洲精品在线观看www| 热久久这里只有精品| 亚洲欧美一区二区三区情侣bbw| 日韩美女免费视频| 欧美精品18videos性欧| 亚洲国产欧美一区二区三区同亚洲| 亚洲人成毛片在线播放| 久久久久久这里只有精品| www.欧美精品一二三区| 国产ts人妖一区二区三区| 91亚洲精华国产精华| 日韩中文字幕在线播放| 国产精品91在线观看| 91精品国产免费久久久久久| 久久久女人电视剧免费播放下载| 青青草原成人在线视频| 在线视频日韩精品| 欧美香蕉大胸在线视频观看| 久久人人97超碰精品888| 亚洲成年人在线播放| 亚洲九九九在线观看| 九九久久久久99精品| 日韩av影视在线| 91精品久久久久久久久中文字幕| 亚洲视频在线观看免费| 欧美多人乱p欧美4p久久| 国产精品一区二区三区久久久| 欧美黑人性生活视频| 欧美日韩国产精品一区| 久久久久久69| 中文字幕亚洲一区| 国产在线高清精品| 91欧美精品成人综合在线观看| 色偷偷av亚洲男人的天堂| 精品毛片三在线观看| 国产成人在线精品| 精品视频在线观看日韩| 久久电影一区二区| 中日韩美女免费视频网站在线观看| 永久免费看mv网站入口亚洲| 精品中文字幕久久久久久| 欧美国产视频日韩| 国产日韩亚洲欧美| 久久久欧美一区二区| 亚洲aaaaaa| 精品动漫一区二区| 欧美激情亚洲一区| 高清一区二区三区四区五区| 国产a∨精品一区二区三区不卡| 久久精品国产成人精品| 日韩午夜在线视频| 波霸ol色综合久久| 91欧美激情另类亚洲| 亚洲变态欧美另类捆绑| 日韩精品免费综合视频在线播放| 懂色av中文一区二区三区天美| 欧美日韩亚洲精品内裤| 日韩欧美中文字幕在线播放| 国产成人亚洲精品| 亚洲免费一在线| 久久这里只有精品视频首页| 欧美精品久久一区二区| 欧美一级在线播放| 欧美精品在线观看| 久久免费视频在线| 日韩在线观看免费高清完整版| 在线播放国产一区二区三区| 久久精品99久久香蕉国产色戒| 国模极品一区二区三区| 在线视频免费一区二区| 欧美国产日韩xxxxx| 亚洲最大的成人网| 日韩av电影手机在线观看| 日韩欧美国产中文字幕| 国产亚洲精品va在线观看| 精品亚洲aⅴ在线观看| 成人激情电影一区二区| 97在线免费视频| 日韩欧美亚洲一二三区| 亚洲在线视频福利| 中文字幕日韩免费视频| 亚洲图中文字幕| 亚洲中国色老太| 日韩精品在线观看网站| 久久久久久国产精品美女| 久久中文久久字幕| 97在线免费观看| 国产亚洲精品va在线观看| 色yeye香蕉凹凸一区二区av| 国产色婷婷国产综合在线理论片a| 欧美午夜片在线免费观看| 尤物九九久久国产精品的分类| 久久久国产精品x99av| 91精品国产精品| 国产在线观看精品| 日本乱人伦a精品| 欧美高清视频免费观看| 久久久久www| 日韩在线视频二区| 日韩精品在线免费观看视频| 国产精品777| 国产日本欧美一区二区三区在线| 欧美又大又硬又粗bbbbb| 久久99精品国产99久久6尤物| 色婷婷av一区二区三区在线观看| 欧美成人在线免费视频| 中文字幕亚洲一区在线观看| 国内精品久久久久久| 国产精品久久久久77777| 久久综合色88| 成人午夜黄色影院| 成人做爽爽免费视频| 国产精品旅馆在线| 亚洲成人久久电影| 久久久久久久91| 国产亚洲精品久久| 欧美成在线视频| 久久99亚洲热视| 亚洲精品国产精品乱码不99按摩| 国产精品久在线观看| 亚洲成色777777在线观看影院| 久久视频在线直播| 久久久av网站| 日本成人免费在线| 久久久久久久国产精品视频| 亚洲视频在线观看免费| 色综合久久88色综合天天看泰| 亚洲女人初尝黑人巨大| 96精品视频在线| 亚洲成色www8888| 亚洲精品女av网站| 亚洲成人精品av| 亚洲国产精品国自产拍av秋霞| 性色av一区二区三区在线观看| 5252色成人免费视频| 日韩视频免费大全中文字幕| 亚洲一级片在线看| 久久躁日日躁aaaaxxxx| 亚洲wwwav|