タイトル

コントロール1

タイトル

1,コントロールについて
2,エディット 複数行の表示 読み出し専用状態 Cut&Paste

1,コントロールについて

コントロールとは、ダイアログボックスでよく使われるもので特有の機能があります。
コントロールの種類としては「プッシュボタン」「エディットボックス」
「ラジオボタン」「チェックボックス」「スクロールバー」などがあります。

Appwizardでデフォルトの状態で作成したアプリにはコントロールは配置できません。
配置できるのは、ダイアログボックスやAppwizardの6/6でCNamaeViewの
基本クラスをCViewからCFormViewに変更することによって
コントロールの配置ができるようになります。

ここでは基本クラスをCViewからCFormViewに変更する方法をとります。
そのようにして作成されたアプリは次のようになります。

初期のForm

ここから、プロジェクトワークスペースでダイアログの編集をすれば配置ができます。

上上へ


2,エディット

エディットボックスは文章の入出力を行うもので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);
}

こうするとダブルクリックした後はエディターの背景が灰色になり
文字が入力できなくなります。


Cut&Paste

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に戻る