複製鏈接
請複製以下鏈接發送給好友

ChooseColor

鎖定
ChooseColor的函數功能:該函數創建一個能使用户從中選擇顏色的通用顏色對話框
中文名
ChooseColor函數
外文名
ChooseColor
所屬語言
Windows API
函數功能
創建能使用户選擇顏色的對話框
頭文件
commdlg.h
庫文件
commdlg32.lib

目錄

ChooseColor簡介

函數原型:BOOL ChooseColor(LPCHOOSECOLOR IpCC);
參數:
lpCC:指向一個包括初始化對話框信息的CHOOSECOLOR結構。當ChooseColor函數返回時,此結構含有有關用户顏色選擇的信息。
返回值:如果用户點擊對話框中的OK按鈕,返回值為非零值。CHOOSECOLOR結構中的rgbResult成員含有用户選擇的顏色的RGB顏色值。如果用户取消或關閉Color對話框或錯誤出現,返回值為零。若想獲得更多錯誤信息,請調用CommDlgExtondedError函數,此函數的返回值為下列中的一個:
CDERR_FINDRESFAILURE;CDERR_MEMLOCKFAILURE;CDERR_INITIALIZATION;
CDERR_NOHINSTANCE;CDERR_LOCKRESFAILURE;CDERR_NOHOOK
CDERR_LOADRESFAILURE;CDERR_NOTEMPLATE;CDERR_LOADSTRFAlLURE;
CDERR_STRUCTSIZE;CDERR_MEMALLOCFAILURE
備註Color對話框不支持彩色調色板,對話框提供的顏色的選擇僅限於系統顏色和這些顏色的混合值,可以為對話框提供一個CCHOOKProc程序,此掛鈎程序能處理發送給對話框的信息。通過建立CHOOSECOLOR結構中Flags成員的CC_ENABLEHOOK標誌和指定IpfnHook成員中掛鈎程序的地址,可使掛鈎程序生效。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:2.0及以上版本;頭文件:commdlg.h;庫文件:commdlg32.lib;Unicode:在Windows NT環境中實現為Unicode和ANSI兩個版本。

ChooseColor結構

CHOOSECOLOR Structure
該結構包含了ChooseColor函數用於初始化顏色對話框的信息。在用户關閉對話框之後,系統返回關於用户選擇的顏色信息。
語法
typedef struct {
DWORD lStructSize;
HWND hwndOwner;
HWND hInstance;
COLORREF rgbResult;
COLORREF *lpCustColors;
DWORD Flags;
LPARAM lCustData;
LPCCHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} CHOOSECOLOR, *LPCHOOSECOLOR;
成員
lStructSize
指定結構的長度(字節)
hwndOwner
擁有對話框的窗口的句柄。該成員可以是任意有效的窗口句柄,或在對話框沒有所有者時,可為NULL
hInstance
如果Flag成員設置了CC_ENABLETEMPLATEHANDLE標識符時,該成員是一個包含了對話框模板的內存對象的句柄。如果 CC_ENABLETEMPLATE 標識符被設置時,該成員是一個包含了對話框的模塊句柄。如果上述兩個標識符都未被設置,則該成員被忽略。
rgbResult
如果CC_RGBINIT標識符被設置時,該成員指定了對話框打開時默認的選擇顏色。如果指定的顏色值不在有效的範圍內,系統會自動選擇最近的顏色值。如果該成員為0或CC_RGBINIT未被設置,初始顏色是黑色。如果用户單擊OK按鈕,該成員指定了用户選擇的顏色。
lpCustColors
指向一個包含16個值的數組,該數組包含了對話框中自定義顏色的紅、綠、藍(RGB)值。如果用户修改這些顏色,系統將用新的顏色值更新這個數組。如果要在多個ChooseColor函數中保存這個新的數組,你應該為該數組分配靜態內存空間。
Flags
一個可以讓你初始化顏色對話框的位集。當對話框返回時,它用來這些標識符來標識用户的輸入。該成員可以為下列標識符的任意組合。
CC_ANYCOLOR
對話框顯示所有可用的基於基本顏色的顏色。
CC_ENABLEHOOK
激活由lpfnHook成員指定的鈎子程序。該標識僅用於初始化對話框時。
CC_ENABLETEMPLATE
表示利用由hInstance 和 lpTemplateName 成員指定的對話框模板。該標識符僅用於初始化對話框。
CC_ENABLETEMPLATEHANDLE
表示hInstance成員標識一個包含了預加載的對話框模板的數據塊。如果該標識被指定,系統會忽略 lpTemplateName 成員。該標識符僅用於初始化對話框。
CC_FULLOPEN
讓對話框顯示額外的控件以使用户創建自定義的顏色。如果該標識未設置,用户必須點擊【自定義顏色】按鈕才能顯示自定顏色控件。
CC_PREVENTFULLOPEN
使自定義顏色按鈕失效。
CC_RGBINIT
讓對話框默認使用由rgbResult成員指定的顏色
CC_SHOWHELP
讓對話框顯示幫助按鈕。hwndOwner成員必須在用户點擊【幫助】按鈕時發送HELPMSGSTRING消息的窗口
CC_SOLIDCOLOR
讓對話框僅顯示基本顏色組成的純色。
lCustData
指定應用程序自定義的數據,該數據會被系統發送給鈎子程序。當系統的發送WM_INITDIALOG消息給鈎子程序時,消息的lParam參數是一個指向CHOOSECOLOR結構的指針。鈎子程序可以利用該指針獲得該成員的值。
lpfnHook
指向CCHookProc鈎子程序的指針,該鈎子可以處理發送給對話框的消息。該成員只在CC_ENABLEHOOK標識被設定的情況下才可用,否則該成員會被忽略。
lpTemplateName
指向一個NULL結尾的字符串,該字符串是對話框模板資源的名字。
VB源碼:
Option Explicit
Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As Long
Private Type ChooseColor
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As String
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Dim rtn As String
Private Sub Command1_Click()
Dim cc As ChooseColor
cc.lStructSize = Len(cc)
cc.hwndOwner = Me.hWnd
cc.hInstance = App.hInstance
cc.flags = 0
cc.lpCustColors = String$(16 * 4, 0)
rtn = ChooseColor(cc)
If rtn>= 1 Then
Colourpreview.BackColor = cc.rgbResult
Colour.Text = "Custom Color is: " & cc.rgbResult
Else
Colour.Text = "ChooseColor Canceled"
End If
End Sub
Private Sub Form_Load()
Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
End Sub