雞啄米在上一節中為大家講解了字體對話框的使用方法,熟悉了字體對話框,本節繼續講另一種通用對話框--顔色對話框。

       顔色對話框大家肯定也不陌生,我們可以打開它選擇需要的顔色,簡單說,它的作用就是用來選擇顔色。MFC中提供了CColorDialog類封裝了顔色對話框的所有操作,我們可以通過它顯示顔色對話框,并獲取顔色對話框中選擇的顔色。顔色對話框跟字體對話框一樣,也是一種模态對話框

       CColorDialog類的構造函數

CColorDialog(
   COLORREF clrInit = 0,
   DWORD dwFlags = 0,
   CWnd* pParentWnd = NULL
);

       參數說明:

       clrInit:默認選擇顔色的顔色值,類型為COLORREF,實際上就是unsigned long類型。如果沒有設置它的值,則默認為RGB(0,0,0),即黑色。

       注:RGB(r,g,b)是,可以計算顔色值。括号中的三個值分别為紅、綠、藍分量的值。

       dwFlags:自定義顔色對話框功能和外觀的屬性值。詳情可在MSDN中查閱。

       pParentWnd:顔色對話框的父窗口的指針。

       獲取顔色對話框中所選顔色值

       我們使用顔色對話框的最終目的還是要獲得在顔色對話框中選擇的顔色值。為此CColorDialog類的成員函數GetColor()能夠很好的實現我們的要求。GetColor()函數的原型為:

       COLORREF GetColor( ) const;

       它返回所選顔色的COLORREF值。

       如果我們想獲得R、G、B各分量的值呢?可以根據GetColor得到的COLORREF顔色值,通過使用GetRValue、GetGValue和GetBValue三個宏獲得。GetRValue的語法形式為:

       BYTE GetRValue(DWORD rgb);

       參數rgb就是COLORREF顔色值,返回值即是R分量值。其他兩個宏的形式與之類似。例如,GetColor()函數返回的COLORREF為10000,則R分量值就是GetRValue(10000)。

       顔色對話框應用實例

       雞啄米下面給大家做一個顔色對話框的小例子。此例要實現的功能簡單介紹下:生成一個對話框,對話框中放置一個“顔色選擇”按鈕,四個靜态文本框和四個編輯框。四個靜态文本框分别顯示Color:、R:、G:、B:,每個靜态文本框後面跟一個編輯框,分别用來顯示顔色對話框中選擇的顔色值和所選顔色值的紅色分量、綠色分量、藍色分量。

       以下是實例創建的步驟:

       1.創建一個基于對話框的MFC工程,名字為“Example19”。

       2.在自動生成的主對話框IDD_EXAMPLE19_DIALOG的模闆中,删除“TODO: Place dialog controls here.”靜态文本框,添加一個按鈕,ID設為IDC_COLOR_BUTTON,Caption設為“顔色選擇”,用于顯示顔色對話框來選擇顔色。再添加四個靜态文本框,ID分别為IDC_COLOR_STATIC、IDC_R_STATIC、IDC_G_STATIC、IDC_B_STATIC,Caption分别設為“Color:”、“R:”、“G:”、“B:”,然後每個靜态文本框後添加一個編輯框,四個編輯框的ID分别為IDC_COLOR_EDIT、IDC_R_EDIT、IDC_G_EDIT、IDC_B_EDIT,分别用來顯示顔色對話框中選擇的顔色值和所選顔色值的紅色分量、綠色分量、藍色分量。

       3.為按鈕IDC_COLOR_BUTTON添加點擊消息的消息處理函數CExample19Dlg::OnBnClickedColorButton()。

       4.修改消息處理函數CExample19Dlg::OnBnClickedColorButton()如下:

C++代碼
  1. void CExample19Dlg::OnBnClickedColorButton()   
  2. {   
  3.     // TODO: Add your control notification handler code here   
  4.     COLORREF color = RGB(255, 0, 0);      // 顔色對話框的初始顔色為紅色  
  5.     CColorDialog colorDlg(color);         // 構造顔色對話框,傳入初始顔色值   
  6.   
  7.     if (IDOK == colorDlg.DoModal())       // 顯示顔色對話框,并判斷是否點擊了“确定”   
  8.     {   
  9.         color = colorDlg.GetColor();      // 獲取顔色對話框中選擇的顔色值   
  10.         SetDlgItemInt(IDC_COLOR_EDIT, color);         // 在Color編輯框中顯示所選顔色值   
  11.         SetDlgItemInt(IDC_R_EDIT, GetRValue(color));  // 在R編輯框中顯示所選顔色的R分量值   
  12.         SetDlgItemInt(IDC_G_EDIT, GetGValue(color));  // 在G編輯框中顯示所選顔色的G分量值   
  13.         SetDlgItemInt(IDC_B_EDIT, GetBValue(color));  // 在B編輯框中顯示所選顔色的B分量值   
  14.     }   
  15. }  

       5.最後編譯運行程序,在結果對話框中點擊“顔色選擇”按鈕,彈出顔色對話框。初始狀态下,選擇框在紅色上,我們選另一種顔色,此時的顔色對話框如下:

        點“确定”,主對話框上的四個編輯框中分别顯示了選擇的顔色值、R分量、G分量和B分量:

       我們在實際開發中,可以用獲取到的顔色值來設置其他對象的顔色,使用還是很方便的。

       關于顔色對話框就講到這裡了。其實各種對話框的使用都有很多相似之處,相信大家越來越熟悉了。最後還是歡迎大家繼續關注雞啄米的VS2010/MFC入門教程。

除非特别注明,雞啄米文章均為原創
轉載請标明本文地址:http://dnsf85p.top/software/177.html
2012年5月17日
作者:雞啄米 分類:軟件開發 浏覽: 評論:15