![]()
![]()
| 1,コントロールについて | |
| 2,エディット | 複数行の表示 読み出し専用状態 Cut&Paste |
コントロールとは、ダイアログボックスでよく使われるもので特有の機能があります。
コントロールの種類としては「プッシュボタン」「エディットボックス」
「ラジオボタン」「チェックボックス」「スクロールバー」などがあります。
Appwizardでデフォルトの状態で作成したアプリにはコントロールは配置できません。
配置できるのは、ダイアログボックスやAppwizardの6/6でCNamaeViewの
基本クラスをCViewからCFormViewに変更することによって
コントロールの配置ができるようになります。
ここでは基本クラスをCViewからCFormViewに変更する方法をとります。
そのようにして作成されたアプリは次のようになります。

ここから、プロジェクトワークスペースでダイアログの編集をすれば配置ができます。
エディットボックスは文章の入出力を行うものでWindows95付属の「メモ帳」の操作と同じです。
「TODO:
フォームのコントロールをここに配置」というのは、「スタティックテキスト」に
よるものです。これは、ただ決まった文字を表示するだけで他になにもしません。
これは削除することにします。
コントロールからエディターボックスを選択して配置してください。
コントロールをダブルクリックするとプロパティウィンドウが現れます。
IDは「IDC_EDIT1」にします。(おそらく自動でそうなっています。)
この時点でコンパイルをすると次のようになります。

ここで、マウスのダブルクリックに対応するメッセージハンドラを作成してください。
次のような関数が作成されていると思います。
| クラス | メッセージ | メンバ関数 |
| CNamaeView | 左ダブルクリック | OnLButtonDblClk |
void CNamaeView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CFormView::OnLButtonDblClk(nFlags, point);
}
さらに、エディターのメンバ変数を「m_text」にします。
このプログラムを次のようにしてください。
void CNamaeView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
m_text="This is Edit test Program.";
UpdateData(FALSE);
CFormView::OnLButtonDblClk(nFlags, point);
}
最初にm_textに表示したい文字データを代入します。
そして、UpdateData(FALSE)を実行します。
UpdateDataはTRUEでコントロールに入力されたデータをメンバ関数に読み込み
FALSEでメンバ関数のデータをコントロールに反映させます。
実行するとマウスの左ダブルクリックで次のようになります。
複数行表示できるようにするにはエディターのプロパティで
「複数行」と「改行を許可」をcheckします。
あとは、メンバ変数に代入する文字で、改行部分を「¥r¥n」にします。
¥rはキャラクターコードで13、¥nは10です。
| クラス | メッセージ | メンバ関数 |
| CNamaeView | 左ダブルクリック | OnLButtonDblClk |
void CNamaeView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
m_text="This is Edit test Program.\r\nSecond Mozi.";
UpdateData(FALSE);
CFormView::OnLButtonDblClk(nFlags, point);
}
実行すると2行になりました。
文字を変更できないようにするにはSetReadOnly関数でTRUEにします。
| クラス | メッセージ | メンバ関数 |
| CNamaeView | 左ダブルクリック | OnLButtonDblClk |
void CNamaeView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CEdit* e=(CEdit*)GetDlgItem(IDC_EDIT1);
e->SetReadOnly(TRUE);
m_text="This is Edit test Program.";
UpdateData(FALSE);
CFormView::OnLButtonDblClk(nFlags, point);
}
こうするとダブルクリックした後はエディターの背景が灰色になり
文字が入力できなくなります。
Windows95付属の「メモ帳」など、クリップボードを介してCut&Paste
をするソフトはほとんどです。
今回作ったソフトは右クリックによってCut&Pasteできるのですが
MenuからもCut&Pasteができるようにしてみます。
Menuには標準でCopy,Cut,Pasteがあるので、それに対するメッセージハンドラを作成します。
| クラス | メッセージ | メンバ関数 |
| CNamaeView | ID_EDIT_COPYが押された | OnEditCopy |
| CNamaeView | ID_EDIT_PASTEが押された | OnEditPaste |
| CNamaeView | ID_EDIT_CUTが押された | OnEditCut |
void CNamaeView::OnEditCopy()
{
CEdit* e=(CEdit*)GetFocus();
e->Copy();
}
void CNamaeView::OnEditPaste()
{
CEdit* e=(CEdit*)GetFocus();
e->Paste();
}
void CNamaeView::OnEditCut()
{
CEdit* e=(CEdit*)GetFocus();
e->Cut();
}
GetFocusという関数は現在アクティブになっているコントロールを調べます。 今までのように、
CEdit* e=(CEdit*)GetDlgItem(IDC_EDIT1)
のようにしてもいいのですがエディターが複数ある時は
特定のエディターだけしか操作ができません。そこで
CEdit* e=(CEdit*)GetFocus()
だと現在選択されているものに対して操作できます。
エディターのプロパティではいろいろな設定ができます。
これは3つに分かれていて「一般」「スタイル」「拡張スタイル」があります。
「一般」にはIDやコントロールを表示するかどうかなどの設定ができます。
これがoffになっているとエディターの枠からはみ出るような文字は入力できません。
onにするとカーソルの位置によって文字が移動でき、枠からはみ出るような文字も
入力できます。
onにすると常にスクロールバーが表示されます。
文字が枠内にあるときは淡色になっているのですが、はみ出ると
アクティブになります。
SetReadOnly関数と同様な効果があります。
エディター内に入力された文字をすべて、大文字(小文字)にします。
C++のPageに戻る