ダイアログ派生クラス(リストビュー付)でオーバーライドされない

[戻る]
トンプソン [E-Mail] 2005/02/22(火) 11:33:04
質問です。
ウィンドウの初期サイズと最大、最小サイズを設定したいです。
 
1、CDialogを継承した
  クラス ListBoxViewDlgをつくりました
 
2、メインクラスでダイアログに張り付いているリストビューに
  メンバ変数を作成しました。
 
3、ClassWizard で PreTranslateMessageと、
  PreCreateWindow などをオーバーライドしました
 
  ClassWizardで表示されていなかったため、自分で
  OnGetMinMaxInfoをオーバーライドしました。

 実行してみるとオーバーライドした関数が呼ばれません
 
  
4、ClassWizard でOnSizeを作成しました。
  この時は呼び出されます。
 
何かおかしなことしてるんでしょうか・・・? 
よろしくお願いします。

sugar 2005/02/22(火) 12:07:46
自分でオーバーライドしたとありますが、
どのように記述したのかが気になります。
ようは、メッセージマップの記述が抜けていないのか、と・・・。
単に、同名の関数を追加すればよいということではないので。

トンプソン [E-Mail] 2005/02/22(火) 12:09:56
お返事ありがとうございます。
CPP内には

void ListBoxViewDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
    //最小サイズ指定
    lpMMI->ptMinTrackSize.x = 640;
    lpMMI->ptMinTrackSize.y = 480;

    //最大サイズ指定
    lpMMI->ptMaxTrackSize.x = 1024;
    lpMMI->ptMaxTrackSize.y = 768;


    CDialog::OnGetMinMaxInfo(lpMMI);
}
H内には
    virtual void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
と・・。
もしかして、
    afx_msg void OnSize(UINT nType, int cx, int cy);
は必要ってことでしょうか?

sugar 2005/02/22(火) 12:12:33
ん?
待ってください、OnGetMinMaxInfoは、ダイアログクラスListBoxViewDlgの方に
追加したいんですよね?

クラスウィザードには、WM_GETMINMAXINFOが出てきますよ?

sugar 2005/02/22(火) 12:16:19
あぁ、それだけでは、メッセージマップの記述がないですね。
WM_GETMINMAXINFOメッセージが来たときに、OnGetMinMaxInfoを呼び出します、という
メッセージと関数の対応付けをする必要があります。

cppファイルに、以下の記述があると思いますが、
そこに★を追加してみてください。


BEGIN_MESSAGE_MAP(ListBoxViewDlg, CDialog)
    //{{AFX_MSG_MAP(ListBoxViewDlg)
    ON_WM_GETMINMAXINFO()                 // ★
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

トンプソン [E-Mail] 2005/02/22(火) 12:28:41
[[解決]]
クラスウィザードにはWM_GETMINMAXINFOがなかったです。
ただ!★を追加したら呼び出されました!
もう少しメッセージマップを学ぼうと思います。
ありがとうございます!!

古いスレッドには追加発言できません。