Last Updated 2004/10/08
Visual C++ MFC 他のコントロール
スタティックコントロールのハンドラ
2004/10/08

ダイアログベースにスタティックコントロールを貼り付けて,そのハンドラを記述するにはどうしたらいいか?
ClassWizard にはスタティックコントロールにメッセージを割り付けようにも手段がない.

ClassWizard は万全ではなく,全てのメッセージに対応しているわけではない.
そういう時は手動で追加しなければならない.

以下はスタティックコントロールがマウスクリックされた時のハンドラを記述する方法である.


1. リソース ID を "IDC_STATIC" から任意のものに変更
例えば "IDC_STC1" など

2. コントロールのプロパティの「スタイル」タブの「通知(N)」をチェック

3. ダイアログクラスのソースに,以下のように手動でメッセージマップ追記

BEGIN_MESSAGE_MAP(CXXXXXDlg, CDialog)
    //{{AFX_MSG_MAP(CXXXXXDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_STC1, OnStc1Clicked)   // これを自分で追加
END_MESSAGE_MAP()


4. ダイアログクラスのソースに,以下のように手動で関数を追記

void CXXXXXDlg::OnStc1Clicked()
{
}


5. ダイアログクラスのヘッダに,以下のように手動で追記

class CXXXXXDlg : public CDialog
{
    // 生成されたメッセージ マップ関数
    //{{AFX_MSG(CXXXXXDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    virtual void OnOK();
    //}}AFX_MSG
    afx_msg void OnStc1Clicked();  // これを自分で追加
    DECLARE_MESSAGE_MAP()
};


参照
前後のTips
スタティックコントロールのハンドラ

DSS ProgrammingTipsCGI Ver1.02