|
|||||
|
|||||
|
||||||||
WTLではコモンコントロールのリッチエディットコントロールをCRichEditCtrlT
というテンプレートクラスでカプセル化しています。
テンプレート引数にはクラスを指定しますが、
そのクラスはCRichEditCtrlTクラスの基底クラスとして使用されます。
atlctrls.hヘッダではtypedefによって次のように宣言されています。
これは、 CRichEditCtrlクラスはCWindowクラスの派生クラスであることを意味します。WTLの CRichEditCtrlクラスは、MFCの同名のクラスとほぼ同じメンバ関数を用意しているほか、
リッチエディットコントロールのバージョン2.0と3.0用のメンバ関数も備えています。
以下に示すのは、CRichEditCtrlクラスを使用する例です。
リッチエディットコントロール上で右クリックするとポップアップメニューが表示され、
[強調スタイルにする]を選択するとリッチエディットコントロール上の選択部分が赤い太字になります。![]()
まず、リソースを作成します。ダイアログにリッチエディットコントロールを配置し、 リソースIDを次のように指定します。 なお、リッチエディットコントロールの[スタイル]ではデフォルトに加え[複数行]、 [水平スクロールバー]、[垂直スクロールバー]、[垂直オートスクロール]、 [改行を許可]にチェックを入れます。
さらに、ポップアップメニューのためのメニューリソースをプロジェクトに追加します。 メニューリソースのIDは IDR_MENU_POPUPとし、トップレベルに[index0]を、
その下に[デフォルトスタイルに戻す]メニューアイテムと[強調スタイルにする]メニューアイテムを追加します。
アイテムにはそれぞれID_MENUITEM_DEFAULTとID_MENUITEM_EMPHASISというIDを設定します。![]() 次に、stdafx.h内では、 CRichEditCtrlクラスを使用するためにatlctrls.hヘッダをインクルードします。
また、今回の例ではバージョン1.0のリッチエディットコントロールを使用するので、
_RICHEDIT_VER を 0x0100 に定義します。
なお、これはAppWizardを使用するとデフォルトで定義されています。CMainDlgクラスでは、
リッチエディットコントロール用にCRichEditCtrlクラスのインスタンスをメンバ変数として宣言します。
これを使うためには、WM_INITDIALOGメッセージハンドラでコントロールのハンドルを代入する必要があります。次に、 WM_CONTEXTMENUメッセージハンドラを追加します。
ここでは座標がリッチエディットコントロール内かどうかを確認し、
ポップアップメニューを表示しています。次に、ポップアップメニューのアイテムを選択したときのコマンドメッセージハンドラを追加します。 [デフォルトスタイルに戻す](ID: ID_MENUITEM_DEFAULT)のコマンドメッセージハンドラOnMenuDefault()では、
GetDefaultCharFormat()によってデフォルトの文字フォーマットを取得して、
SetSelectionCharFormat()によって選択部分にそのフォーマットを適用しています。[強調スタイルにする](ID: ID_MENUITEM_EMPHASIS)のコマンドメッセージハンドラOnMenuEmphasis()では、
赤い太字を表示するためのCHARFORMAT構造体を作成し、
SetSelectionCharFormat()によって選択部分にそのフォーマットを適用しています。最後に、 _tWinMain()内でリッチエディットコントロールを初期化します。
CRichEditCtrl::GetLibraryName()は、
_RICHEDIT_VERが0x0100の場合は_T("RICHED32.DLL")を返し、
0x0200以上の場合は_T("RICHED20.DLL")を返します。このように、リッチエディットコントロールを使用する場合は、 _RICHEDIT_VERの値に使用するエディットコントロールのバージョンを指定し、
LoadLibrary()を呼び出すことによって初期化をする必要があります。
|