アットウィキロゴ
 
前回は,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