前回は,IDがIDM_TEXTというメニューを作った.
その後の処理の仕方を説明する.
1.クラスビュー → CChildView → プロパティ画面の稲妻マーク(イベント)を選択
2.その中に先程作ったIDがある(IDM_TEXT)
3.COMMANDとUPDATE_COMMAND_UIがある.
COMMANDには機能への処理を,
UPDATE_COMMAND_UIにはメニューの表示の切り替え(が必要なときは作って)を記述する.
まずCOMMANDを選択して,OnTextを作る.
4.
void CChildView::OnText()
{
// TODO : ここにコマンド ハンドラ コードを追加します。
}
というのができるので,
この中に,表示をON,OFFするためのフラグを作る.
そのために,
CChildView → 追加 → 変数の追加 をして,
bool型のm_bText という変数を作る.
5.初期化処理を行う場所
CChildView::CChildView()
にて,m_bText(false)のカッコ内に任意の初期値をいれる.
6.OnTextの中にメニューが押されたときの処理を書こう.
フラグを反転させるときはこう書く
m_bText = !m_bText;
7.OnPaintにもフラグが変わったときの処理を書く.
if(m_bText){
//文字描画
・・・
}
8.上記だけだとメニューを押しても変わらない.
画面のサイズを変えたりしないと再描画いないからだ.
だから,
Invalidate(TRUE);
UpdateWindow();
をOnTextに書く.
以上でメニューを押すことで表示のオン・オフが切り替わるプログラムを説明した.
③では メニュー表示を切り替えるUPDATE_COMMAND_UIについて説明する.
void CChildView::OnPaint()
{
CPaintDC dc(this); // 描画のデバイス コンテキスト
// TODO : ここにメッセージ ハンドラ コードを追加します。
if(m_bText){
dc.SetTextColor(RGB(255,128,128));
CPoint pos_text;//xy座標の値を持つクラス
pos_text.x = 200;
pos_text.y = 300;
CString text;//xy座標の値を持つクラス
text = "馬鹿は俺";
dc.TextOut(pos_text.x,pos_text.y,text);
}
// メッセージの描画のために CWnd::OnPaint() を呼び出さないでください。
}
void CChildView::OnText()
{
// TODO : ここにコマンド ハンドラ コードを追加します。
m_bText = !m_bText;
Invalidate(TRUE);//無効領域ということにする.これだけだと再描画は優先順位の低い処理
UpdateWindow();//再描画の強制
}
最終更新:2007年11月21日 18:44