お世話になります。
VC++6.0 MFC にてSDIのプログラムを作成しています。
ViewはCFormViewにしています。
このCFormViewにダイアログを複数貼り付け用途に合わせ動作させたい
のですがうまく動作しません。
タブコントロールやプロパティシートが便利ではありますが画面の使用上
向かないので使用しておりません。
貼り付けるダイアログはチャイルド指定にしており,プログラム
起動時の見た目は問題ないのですが,貼り付けたダイアログ上の
コントロールListViewの操作が全くできません。
マウスでアイテムをクリックしても反応がありません。
どうも,ListViewにメッセージが飛んでいないように思えるのですが
何か問題があるのでしょうか?
どなたかご存じの方がおられたらご教授願います。
よろしくお願いします。
貼り付けたダイアログが、WS_DISABLE スタイルを持ってたりしない?
いえ,WS_DISABLEはついていません。
spy++でメッセージをチェックしてみたところ,やはり子ウィンドウには
メッセージが届いていないようです。(親にはメッセージが行っています)
そこで,親から子ウィンドウにメッセージを渡せば良いかと思い,
親のPreTranslateMessageにて子ウィンドウに対し IsDialogMessageを
実行するようにもしてみましたがだめでした。
子ウィンドウの指定を「チャイルド」から「ポップアップ」にすれば
子ウィンドウ上のコントロールは問題なく動作するのですが,親の移動に
子ウィンドウはついていけません。
どなたかご存じの方おられたらアドバイスお願いします。
子ダイアログの親はちゃんとViewになってますか。
確認してみたところ,親ウインドウはViewのようでした。
「ようでした」と書いたのは,View(MainFrameでしょうか?)の
ウインドウの子に「ダイアログ」と言う名前のウィンドウが存在し
これがどうやらCFormViewで使用するダイアログであることがわかりました。
CFormViewに貼り付けるダイアログを生成するときにOnInitialUpdate内で
thisを引数に生成してCreateしていますが,thisではいけないのでしょうか?
前述のCFormViewで使用するダイアログを親にする必要があるのかとも考え
いまトライして見ていますが,このダイアログのクラスへのポインタの取得
方法を模索しています。
たびたび申し訳ありませんが,私の考えが誤っているようならご指摘願います。
>CFormViewに貼り付けるダイアログを生成するときにOnInitialUpdate内で
>thisを引数に生成してCreateしていますが,thisではいけないのでしょうか?
あっています。
>前述のCFormViewで使用するダイアログを親にする必要があるのかとも考え
>いまトライして見ていますが,このダイアログのクラスへのポインタの取得
>方法を模索しています。
いえ、CFormViewがダイアログそのものです。
minaさんがやりたいこととおなじように、
CListCtrlをCFormView上にCListCtrl::Create()を使用して表示していますが
問題なく動作しています。
void CxxxView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// GetParentFrame()->RecalcLayout();
// ResizeParentToFit(FALSE); CRect rect;
GetClientRect(&rect);
rect.DeflateRect(0, 30, 0, 0);
m_pList->Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD |LVS_REPORT, rect, this, 0);
}
なぜなんでしょうね?
ちなみにCFormView以外だとイベントが飛ばな現象が起きたことがあります。
CViewにCListCtrlを貼り付けたとき、LVN_GETDISPINFOが飛んできませんでした。
ご参考になれば。