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

ダイアログ派生クラス(リストビュー付)...
 
通知
すべてクリア

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


トンプソン
 トンプソン
(@トンプソン)
ゲスト
結合: 20年前
投稿: 29
Topic starter  

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

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


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
 

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


返信引用
トンプソン
 トンプソン
(@トンプソン)
ゲスト
結合: 20年前
投稿: 29
Topic starter  

お返事ありがとうございます。
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
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
 

ん?
待ってください、OnGetMinMaxInfoは、ダイアログクラスListBoxViewDlgの方に
追加したいんですよね?

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


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
 

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

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

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


返信引用
トンプソン
 トンプソン
(@トンプソン)
ゲスト
結合: 20年前
投稿: 29
Topic starter  

クラスウィザードにはWM_GETMINMAXINFOがなかったです。
ただ!★を追加したら呼び出されました!
もう少しメッセージマップを学ぼうと思います。
ありがとうございます!!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました