Win32常用的 類型和宏

來源:互聯網
上載者:User
 

Win32常用的 類型和宏

COLORREF

HIBYTE

HIWORD

LOBYTE

LOWORD

MAKELONG

MAX

MIN

MAKEINTATOM

MAKEINTRESOURCE

MAKELPARAM

MAKELRESULT

MAKEWORD

 

 

MAKEWPARAM

PALETTEINDEX

PALETTERGB

RGB

COLORREF
1、結構定義
一個COLORREF 型顏色值是定義了一種顏色的長整數。要求一個顏色參數的GDI函數(比如CreatePen和FloodFill)接受COLORREF值作為參數。
2、結構說明
根據應用程式對COLORREF類型值的不同使用方式,該類型值具有三種不同的形式。它可以定義為下列三種方式之一:
(1)直接定義RGB值
其中低位位元組包含了定義紅色的相對強度值:第二個位元組包含了定義綠色的相對強度值,第三個位元組包含了定義藍色的值,高位元組必須為零,單位元組的最大值的最大值為FF(十六進位)。下表說明了某些顏色的十六進位值:
----0x000000FF        純紅色
----0x0000FF00        純綠色
----0x00FF0000        純藍色
----0x00000000        黑  色
----0x00FFFFFF       白  色
----0x00808080        淡灰色
RGB巨集指令接受紅、綠、藍三種顏色的值,返回一個顯示的RGB_COLORREF值。
(2)調色盤索引
當指定邏輯調色盤的索引時,COLORREF值有如下的16進位形式:0x0100iiii
低位上的兩個位元組組成了一個16位的整數,它定義了一個邏輯調色盤的索引。第三個位元組不用,並且必須設定為0,第四個位元組(即高位上的位元組)必須設定為1。
例如,16進位值0x10000定義了一個索引為0的調色盤所代表的顏色;0x010000C定義了一個索引為12的元素所代表的顏色,以此類推。
PALETTEINDEX巨集指令接收一個表示邏輯調色盤的整數,並返回一個定義為調色盤索引的COLORREF值
(3)與調色盤相關的RGB
當COLORREF值定義為一個與調色盤相關的RGB值時,該值具有如下形式:
0x02bbggrr
與定義為直接的RGB值一樣,該值低位上的三個位元組分別包含了紅色,綠色,藍色的強度色,其高位上的位元組必須為2。
對於支援邏輯調色盤的輸出裝置,Windows將把與調色盤相關的RGB值和裝置描述表中的邏輯調色盤中最接近的顏色匹配,就好象應用程式定義了一個對應於該調色盤索引的表項。如果輸出裝置不支援邏輯調色盤,那麼Windows就把與調色盤相關的RGB值當作直接的RGB值使用。
PALETTERGB巨集指令接收表示紅色、綠色、藍色三種顏色的值,並返回一個表示與調色盤索引相關的COLORREF值。
3、說明
在將一個表示調色盤索引或表示調色盤相關的COLORREF值傳遞給一個需要裝置描述表參數的函數之前,使用自身調色盤的應用程式必須把調色盤放入裝置描述表(通過調用RealizePalette函數)中並且使用該調色盤成為當前調色盤(通過調用SelectPalette函數),這樣做可以保證函數將使用正確的調色盤表項的顏色。對於畫一個物體的函數(比如CreatePen),應用程式在為裝置描述表選擇一個對象之前必須先將調色盤選入描述表並使用之成為當前調色盤。
4、相關函數
參見CreatePen,RealizePalette,RGB,SelectPalette.

----------------------------------------------------------------------
HIBYTE
1、定義結構
BYTE HIBYTE(nInteger)
此巨集指令以nInteger參數所指定的整數值中擷取其高位位元組
2、參數
nInteger 指定用於轉換的值
3、說明
傳回值為給定值的高位位元組。
HIBYTE宏定義在WINDOWS.H中,如下所示:
#define HIBYTE (w) ((BYTE)((WORD)(W)>>8)&0xFF))

HIWORD
1、結構定義
WORD HIWORD (dwInteger)
此巨集指令從dwInteger參數指定的32位整數值中擷取其高位字。
2、參數
dwInteger:指定用於轉換的值。
3、說明
傳回值指定給定的32位整數的高位字。
HIWORD宏定義在WINDOWS.H中,如下所示:
#define HIWORD (i) ((WORD)(((DWORD)(i)>>16)&0xFFFF))

LOBYTE
1、結構定義
BYTE LOBYTE(wVal)
此巨集指令從wVal指定的短整數值中抽取其低位位元組。
2、參數
wVal:指定用於轉換的值。
3、說明
傳回值指定給定整數值的低位元組。
LOBYTE宏定義於WINDOWS.H中,如下所示:
#define LOBYTE(w)  ((BYTE)(w))

LOWORD
1、結構定義
WORD LOWORD (dwVal)
此巨集指令從一個DWORD類型的變數dwVal中抽取齊低位字。
2、參數
(1)dwVal 指定一個用於轉換的值
3、說明
傳回值指定32全整數值的低位字.
LOWORD宏定義在WINDOWS.H中,如下所示:
#define LOWORD(i) ((WORD)(i))

MAKELONG
1、結構定義
DWORD MAKELONG (wLow,wHing)
WORD wLow;
WORD wHing;
此巨集指令將兩個WORD類型的變數wLow,wHeight串接起來建立一個無符號長整數。
2、參數
(1)wLow 指定新的長整數的低位字。
(2)wHigh 指定新的長整數的高位字。
3、說明
傳回值指定一個無符號長整數。
MAKELONG宏定義在WINDOWS.H中,如下所示:
#define MAKELONG(a,b) ((LONG)(((WORD)(a))|((DWORD)((DWORD)(b)))<<16))

max
1、結構定義
max(value1,value2)
max巨集指令比較兩個值,返回較大的值。資料類型可以為任意的數字資料類型,有符號的或無符號的。參數的類型和傳回值的類型相同。
2、參數
(1)value1:指定第一個值
(2)value2:指定第二個值
3、說明
傳回值value1,value2中較大的一個。
max宏定義在WINDOWS.H中,如下:
#define max(a,b) (((a>b))?(a):(b))
4、相關函數
 參見min

min
1、定義結構
min(value1,value2)
min巨集指令比較兩個值,返回較小的值。資料類型可以為任意的數字資料類型,有符號的或無符號的。參數的類型和傳回值的類型相同。
2、參數
(1)value1:指定第一個值
(2)value2:指定第二個值
3、說明
傳回值value1,value2中較大的一個。
max宏定義在WINDOWS.H中,如下:
#define min(a,b) (((a<b))?(a):(b))
4、相關函數
 參見max

MAKEINTATOM
1、結構定義
LPSTR MAKEINTATOM(wInteger)
WORD wInteger
此巨集指令建立一個代表十進位數字字串的整數原子。
儘管MAKEINTATOM宏的傳回值是LPSTR類型,但不能用做字串指標,除非將它傳遞給需要LPSTR參數的原子管理函數。
DeleteAtom函數對整數原子的操作總是成功的,儘管它什麼也不做。GetAtomName函數返回的字串是一個NULL結尾的字串,其第一個字元為“#”,其餘的字元即為MAKEINTATOM宏中使用的WORD。
該宏定義在winbase.h中,如下:
#define MAKEINTATOM(i) (LPSTR)(DWORD)((WORD)(i)))

MAKEINTRESOURCE
1、結構定義
LPSTR MAKEINTRESOURCE(nInteger)
MAKEINTRESOURCE宏將一個整數項轉化為一個和Windows資源管理函數相容的資源類型。該宏一般用來代替一個包含資源名字的字串。
2、參數
nInteger:指定用於轉換的整數值
3、說明
傳回值只能作為lpType參數傳給Windows資源管理函數。
MAKEINTRESOURCE宏定義於WINDOWS.H中,如下:
#define MAKEINTRESOURCE(i) (LPTSTR)((DWORD)((WORD)(i)))

MAKELPARAM
1、結構定義
LPARAM MAKELONG(wLow,wHigh)
WORD wLow;
WORD wHigh;
此巨集指令將兩個WORD類型的變數wLow,wHigh串接起來建立一個LPARAM類型的值(長整數),該類型的值用於訊息的參數lParam中。
2、參數
(1)wLow:指定新的LPARAM的低位字。
(2)wHigh:指定新的LPARAM的高位字。
3、說明
傳回值指定一個LPARAM宏定義在WINUSER.H中,如下所示:
#define MAKELPARAM(l,h) ((LPARAM)MAKELONG(L,H))

MAKELRESULT
1、結構定義
LRESULT MAKELRESULT(wLow,wHigh)
WORD wLow;
WORD wHigh;
此巨集指令將兩個WORD類型的變數wLow,wHigh串接起來建立一個WPARAM類型的值(長整數),該類型的值用於訊息的參數wParam中。
2、參數
(1)wLow:指定新的LRESULT的低位字。
(2)wHigh:指定新的LRESULT的高位字。
3、說明
傳回值指定一個LRESULT值。
MAKELRESULT宏定義在WINUSER.H中,如下:
#define MAKELRESULT(l,h) ((LRESULT)MAKELONG(l,h))

MAKEWORD
1、結構定義
WORD MAKEWORD(bLow,bHigh)
BYTE bLow;
BYTE bHigh;
此巨集指令將兩個BYTE類型的變數bLow,bHihg串接起來建立一個不帶正負號的整數。
2、參數
(1)bLow 指定一個新的整數的低位位元組
(2)bHigh 指定一個新的整數的高位位元組
3、說明
傳回值指定一個不帶正負號的整數。
MAKEWORD宏定義在WINDOWS.H中,如下:
#define MAKEWORD(a,b) ((WORD)(((BYTE)(a))|((WORD)((BYTE)(b)))<<8))

MAKEWPARAM
1、結構定義
WPARAM MAKEWPARAM(wLow,wHigh)
WORD wLow;
WORD wHigh;
此巨集指令將兩個WORD類型的變數wLow,wHigh串接起來建立一個WPARAM類型的值(長整數),該類型的值用於訊息的參數WParam中。
2、參數
(1)wLow:指定新的WPARAM的低位字。
(2)wHigh:指定新的WPARAM的高位字。
3、說明
傳回值指定一個WPARAM宏定義在WINUSER.H中,如下所示:
#define MAKEWPARAM(l,h) ((LPARAM)MAKELONG(L,H))

PALETTEINDEX
1、結構定義
COLORREF PALETTEINDEX(nPaletteIndex)
此宏接受一個邏輯調色盤表項的索引作參量,返回一個其高位元組為1,低位元組為調色盤表項索引的值,它稱為邏輯調色盤表項的索引指定符,使用調色盤的應用程式可以傳遞此指定符,而不必直接指定RGB值。這使得應用程式可以使用此調色盤表項中顏色。
2、參數
nPaletteIndex:指定調色盤表項的索引,該調色盤包含了圖形操作要使用的顏色。
3、說明
傳回值是一個邏輯調色盤索引指示符,當使用此邏輯調色盤時,應用程式可以讓需要顏色的GDI函數使用此指定符來代替RGB值。
PALETTEINDEX宏定義於WINDOWS.H中,如下
#define PALETTEINDEX(i) ((COLORREF)(0X01000000|(DWORD)(WORD)(i)))

PALETTERGB
1、結構定義
COLORREF PALETTERGB(cRed,cGreen,cBlue)
本巨集指令接受三個表示紅,綠,藍相對強度的三個值,然後返回高位為2,低位的三個位元組為RGB值的傳回值,這稱為相對調色盤的RGB指定符,使用調色盤的應用程式可通過此指定符來代替精確的RGB值以傳送給需要顏色的函數。
2、參數
(1)cRed    指定紅色強度
(2)cGreen  指定綠色強度
(3)cBlue   指定藍色強度
3、說明
對支援邏輯調色盤的輸出裝置來說,WINDOWS把調色盤相對RGB值在裝置描述表中邏輯調色盤上最相近的顏色相匹配;如果輸出裝置不支援系統調色盤,那麼WINDOWS就按照調色盤相對RGB值RGB巨集指令返回的常規RGB DWORD時一樣的方式來使用調色盤相對RGB值。
傳回值指定調色盤相對RGB值。
PALETTERGB宏定義於WINGDI.H中,如下:
#define PALETTERGB(r, g, b)  (0x02000000 | RGB(r, g, b))

RGB
1、結構定義
COLORREF RGB(BYTE bRed,BYTE bGreen,BYTE bBlue)
此巨集指令在基於由三個參數提供的顏色種類及輸出裝置擁有的色彩功能這些條件範圍內,選擇一種RGB顏色。
2、參數
(1)cRed    指定紅色強度
(2)cGreen  指定綠色強度
(3)cBlue   指定藍色強度
3、說明
傳回值指定被選中的RGB顏色。每個參數都可以從0取到255。如果三個參數都為0,則返回結果為黑色;若桑餓參數都為255,則返回結果為白色。關於調色盤中使用的顏色值的具體細節介紹可參見宏PALETTEINDEX和PALETTERGB。
RGB宏定義在wingdi.h中,如下:
#define RGB(r, g ,b)  ((DWORD) (((BYTE) (r) | /
    ((WORD) (g) << 8)) | /
    (((DWORD) (BYTE) (b)) << 16))) 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.