共通関数群を作ろう2
今回は、共通関数群の中のカラーダイアログ操作関数GetColorString関数のコーディングを行います。前回と同様に、共通関数ファイルmyhtmlcom.cpp内に書き込んでいきます。
17.カラーダイアログをコーディングする
カラーダイアログとは、左のようなダイアログです。このダイアログはいろんなところで見ることができると思います。例えば、お絵かきソフトのペンキの色を決める時や、ワープロソフトでフォントの色を変更する時にも使いますね。
今回も、フォントの色指定などでこのダイアログを使用するのですが、ただ使うのだったら、コモンダイアログなので
CColorDialog cDlg;
cDlg.DoModal();
などとやればいいのですが、今回は色を得るというよりも色のコードを取得する方に重点を置くべきで、コードですからCString型の変数で色コードを得るほうが便利です。そこでGetColorStringという関数で色コードを取得するように作ってあげようと思います。ここでいう色コードというのはRGB値のことです。RGB値による色の表現方法は、すべての光の色は赤(R)・緑(G)・青(B)の色レベル(256段階)の和で表現することができるという理論で成り立っています。このコードは6桁(初めの2桁が赤、次が緑、最後が青)で作られ、16進で表現できます。例えば、
#ff0000#00ff00#0000ff#3a196f
早速ですが、コーディングしたものをお見せします。
CString GetColorString(){
COLORREF col;
DWORD dwColor[3];
CString strColor;

//Colorダイアログ
CColorDialog cDlg(NULL,CC_FULLOPEN,NULL);
if(cDlg.DoModal()!=IDOK){return strColor;}
col = cDlg.GetColor();

dwColor[0] = GetRValue(col);
dwColor[1] = GetGValue(col);
dwColor[2] = GetBValue(col);
strColor.Format("#%02x%02x%02x",dwColor[0],dwColor[1],dwColor[2]);
return strColor;
}
COLORREF col;
カラー値として使われる 32 ビット値の構造体です。カラーダイアログから得られる色情報はここに入ります。
DWORD dwColor[3];
COLORREF型の変数からR,G,Bの各値を格納します。符号なし整数型です。
CString strColor;
#○○○○○○の形式の文字列が入るCString型変数。これがHTMLでのカラーコードです。
CColorDialog cDlg(NULL,CC_FULLOPEN,NULL);
CColorDialogクラスの変数(ダイアログ)を作成します。
第一引数が初期選択色(上の場合だと指定なし)、第二引数がダイアログの外観を決めるフラグ、第三引数は親ウィンドウまたはオーナー ウィンドウへのポインタですが、ここではどのウィンドウがこの関数を呼ぶのか分からない、かつ、ポインタを使用する必要性もないのでNULLを指定しておくのがいいでしょう。
if(cDlg.DoModal()!=IDOK){return strColor;}
ダイアログを開きます
col = cDlg.GetColor();
ダイアログから選択された色情報をCOLORREF変数colに格納します。
dwColor[0] = GetRValue(col);
colから赤の値を抽出します。このGetRValue()はマクロで定義されています。
dwColor[1] = GetGValue(col);
colから緑の値を抽出します。このGetGValue()はマクロで定義されています。
dwColor[2] = GetBValue(col);
colから青の値を抽出します。このGetBValue()はマクロで定義されています。
strColor.Format("#%02x%02x%02x",dwColor[0],dwColor[1],dwColor[2]);
#○○○○○○形式に文字列を設定します。%02xとは"16進2桁"の意味です。
この関数を使って、フォントタグダイアログを次週作っていきます。このダイアログは右のような感じで、[カラー]ボタンを押すと、ダイアログボックスを開いて色を指定させ、結果をEditBoxに表示させます。詳しくは次章ということで。ではよい夏休みを!

[Next]
[Previous]
[Home]