調用系統的調色板可以用到ChooseColor這個函數,這個函數傳入一個參數為CHOOSECOLOR結構體的指針,其函數原型為
BOOL ChooseColor(LPCHOOSECOLOR lpCC);
我們最重要的是需要了解CHOOSECOLOR結構體的成員,下面詳細分析CHOOSECOLOR的成員。
CHOOSECOLOR結構體的定義如下:
typedef COLORREF * } CHOOSECOLOR, *LPCHOOSECOLOR;
成員:
lStructSize
指定CHOOSECOLOR結構體的長度(字節)。
hwndOwner
父窗口的窗口句柄。當沒有父窗口時,賦值為NULL。
hInstance
如果Flag成員設置了CC_ENABLETEMPLATEHANDLE標識符時,該成員是一個包含了對話框模板的內存對象的句柄。如果 CC_ENABLETEMPLATE 標識符被設置時,該成員是一個包含了對話框的模塊句柄。如果上述兩個標識符都未被設置,則該成員被忽略。
rgbColors
如果CC_RGBINT標識符被設置時,該成員指定了對話框打開時默認的選擇顏色。如果指定的顏色值不在有效的范圍內,系統會自動選擇最近的顏色值。如果該成員為0或CC_RGBINT未被設置,初始顏色是黑色。如果用戶單擊OK按鈕,該成員指定了用戶選擇的顏色。
lpCustColors
指向一個包含16個值的數組,該數組包含了對話框中自定義顏色的紅、綠、藍(RGB)值。如果用戶修改這些顏色,系統將用新的顏色值更新這個數組。如果要在多個ChooseColor函數中保存這個新的數組,你應該為該數組分配靜態內存空間。
Flags
一個可以讓你初始化顏色對話框的位集。當對話框返回時,它用來這些標識符來標識用戶的輸入。該成員可以為下列標識符的任意組合。
lCustData
指定應用程序自定義的數據,該數據會被系統發送給鉤子程序。當系統的發送WM_INITDIALOG消息給鉤子程序時,消息的lParam參數是一個指向CHOOSECOLOR結構的指針。鉤子程序可以利用該指針獲得該成員的值。
lpfnHook
指向CCHookProc鉤子程序的指針,該鉤子可以處理發送給對話框的消息。該成員只在CC_ENABLEHOOK標識被設定的情況下才可用,否則該成員會被忽略。
lpTemplateName
指向一個NULL結尾的字符串,該字符串是對話框模板資源的名字。
上面對CHOOSECOLOR結構體進行了詳細的分析,下面舉個小例子,說明如何調用系統的調色板。
COLORREF crCustColors[ ZeroMemory(&cc, cc.lStructSize = cc.hwndOwner = cc.rgbResult = cc.Flags = CC_FULLOPEN| cc.lCustData = cc.lpfnHook = cc.hInstance = cc.lpCustColors = cc.lpTemplateName = (ChooseColor(& nR = nB = cc.rgbResult &= cc.rgbResult |= (nR<< cc.rgbResult &= cc.rgbResult |= }