GDI 摘要 自《windows 編程》
來源:互聯網
上載者:User
---------------------------------------------------------------------------1.windows給程式發送訊息,即,作業系統調用應用程式的“視窗訊息處理常式”2.視窗是在視窗類別別的基礎上建立的。視窗類別別標識處理視窗訊息的“視窗訊息處理常式”3.對象=資料+方法視窗=視窗資料&視窗類別別資料&訊息資料&訊息處理資料 +“視窗訊息處理常式”4.程式執行後,windows就為其建立一個“訊息佇列”用來儲存訊息。5.程式中會有一段代碼專門用來從“訊息佇列”中取出訊息,並轉寄給相應的“視窗訊息處理常式”6.有些訊息會直接發送給“視窗訊息處理常式”而不經過訊息佇列!!7.MSG結構的message欄位為WM_QUIT時,GetMessgae()返回08.當視窗顯示區的部分或全部變為“無效”,由WM_PAINT通知程式更新畫面9.Windows內部為每個視窗儲存一個「繪圖資訊結構」,這個結構包含了包圍無效地區的最小矩形的座標以及其它資訊,這個矩形就叫做「無效矩形」,有時也稱為「無效地區」。10.視窗訊息處理常式可以通過調用InvalidateRect使顯示地區內的矩形無效。..InvalidateRect,訊息佇列中若有WM_PAINT會修改其有效地區,若無,會新增WM_PAINT..ValidateRect..有效。會讓目前訊息佇列中的所有WM_PAINT都被刪除。通過調用GetUpdateRect,可以在任何時候取得無效地區的座標。11.除了CreateDC產生的hdc外,程式不能在兩個訊息之間儲存其他hdc12.Windows有許多座標映射方式,預設是MM_TEXT。即左上開始右下結束的像素值。13.GetSystemMetrics SM_CXSCREEN SM_CYSCREENGetTextMetrics14.hdc=BeginPaint(hwnd,&ps),擷取更新地區的DCGetDC(hwnd),擷取顯示地區的DCGetWindowDC(hwnd),擷取含標題列等的DC,在標題列等上繪製需要攔截WM_NCPAINT15.hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData)// 擷取整個螢幕的裝置內容控制代碼的2種方法hdc = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) hdc = GetDC(NULL);// 擷取裝置內容的資訊但不能進行繪圖hdc = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;// 擷取記憶體裝置內容hdcMem = CreateCompatibleDC (hdc) ; //建立與hdc相容的dcDeleteDC (hdcMem) ;16.metafile,GDI命令的二進位形式17.GetSystemMetric(SM_CYSCREEN)GetSystemMetric(SM_CXSCREEN)18.iValue = GetDeviceCaps (hdc, iIndex) ;---------------------------------------------------------------------------1.GDI的主要目的之一是支援與裝置無關的圖形。圖形輸出裝置分為兩大類:位映像裝置和向量裝置。2.Windows內定使用圖素座標系統。大多數傳統圖形語言使用“虛擬”座標系,水平和垂直軸的範圍在0~32767;GDI允許使用兩種系統任一,甚至依據實際度量衡的座標系;3.GDI是靜態顯示系統,如果需要為遊戲編寫複雜的動畫,就應該研究DirectX。(??)4.GDI函數按功能分為5大類:1)擷取和釋放裝置上下文的;2)擷取裝置上下文的資訊(比如目前的文字尺寸)的(確定GDI函數如何在裝置上工作);3)繪製函數(顯示文字,畫線,填充等);4)擷取和設定裝置上下文的繪製參數(這些參數規定了繪製函數的繪製細節,例如文字色彩);5)使用GDI對象的函數。(類似加強版的繪製參數,外部定義的一個資料結構,裝置上下文通 過該資料結構的控制代碼來使用它。)5.GDI基本圖形有4類:1)直線和曲線(直線,矩形,橢圓,弧,貝茲路徑,折線);2)填入地區(畫刷可以是實心,圖案);3)位元影像(裝置相關DDB和裝置無關DIB);4)文字;6.GDI的其他部分:1)映像模式和變換;2)Metafile;3)繪製地區(任意形狀的複雜地區);4)路徑(GDI內部儲存的直線和曲線的集合);5)剪裁(限制在顯示地區內的某一部分,剪裁地區通過地區或路徑來定義);6)調色盤;7)列印;7.在大多數GDI函數中,使用COLORREF值(只是一個32位的無加號或減號長整數)來表示一種色彩。這個無加號或減號長整數常常稱為一個「RGB色彩」。WINGDI.H提供了幾種使用RGB色彩值的宏。#define RGB(r,g,b) ((COLORREF)(((BYTE)(r) | \((WORD)((BYTE)(g)) << 8)) | \(((DWORD)(BYTE)(b)) << 16)))GetRValue、GetGValue和GetBValue宏從COLORREF值中抽取出原色值。8.SetPixel和GetPixelSetPixel (hdc, x, y, crColor) ;crColor = GetPixel (hdc, x, y) ;