CFormViewに子ウィンドウの貼り付け – プログラミング – Home

CFormViewに子ウィンドウの貼り...
 
通知
すべてクリア

CFormViewに子ウィンドウの貼り付け


mina
 mina
(@mina)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

お世話になります。
VC++6.0 MFC にてSDIのプログラムを作成しています。
ViewはCFormViewにしています。

このCFormViewにダイアログを複数貼り付け用途に合わせ動作させたい
のですがうまく動作しません。
タブコントロールやプロパティシートが便利ではありますが画面の使用上
向かないので使用しておりません。

貼り付けるダイアログはチャイルド指定にしており,プログラム
起動時の見た目は問題ないのですが,貼り付けたダイアログ上の
コントロールListViewの操作が全くできません。

マウスでアイテムをクリックしても反応がありません。
どうも,ListViewにメッセージが飛んでいないように思えるのですが
何か問題があるのでしょうか?

どなたかご存じの方がおられたらご教授願います。
よろしくお願いします。


引用解決済
トピックタグ
Shimira
 Shimira
(@Shimira)
ゲスト
結合: 22年前
投稿: 2
 

貼り付けたダイアログが、WS_DISABLE スタイルを持ってたりしない?


返信引用
mina
 mina
(@mina)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

いえ,WS_DISABLEはついていません。
spy++でメッセージをチェックしてみたところ,やはり子ウィンドウには
メッセージが届いていないようです。(親にはメッセージが行っています)

そこで,親から子ウィンドウにメッセージを渡せば良いかと思い,
親のPreTranslateMessageにて子ウィンドウに対し IsDialogMessageを
実行するようにもしてみましたがだめでした。

子ウィンドウの指定を「チャイルド」から「ポップアップ」にすれば
子ウィンドウ上のコントロールは問題なく動作するのですが,親の移動に
子ウィンドウはついていけません。

どなたかご存じの方おられたらアドバイスお願いします。


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

子ダイアログの親はちゃんとViewになってますか。


返信引用
mina
 mina
(@mina)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

確認してみたところ,親ウインドウはViewのようでした。
「ようでした」と書いたのは,View(MainFrameでしょうか?)の
ウインドウの子に「ダイアログ」と言う名前のウィンドウが存在し
これがどうやらCFormViewで使用するダイアログであることがわかりました。

CFormViewに貼り付けるダイアログを生成するときにOnInitialUpdate内で
thisを引数に生成してCreateしていますが,thisではいけないのでしょうか?

前述のCFormViewで使用するダイアログを親にする必要があるのかとも考え
いまトライして見ていますが,このダイアログのクラスへのポインタの取得
方法を模索しています。

たびたび申し訳ありませんが,私の考えが誤っているようならご指摘願います。


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

>CFormViewに貼り付けるダイアログを生成するときにOnInitialUpdate内で
>thisを引数に生成してCreateしていますが,thisではいけないのでしょうか?

あっています。

>前述のCFormViewで使用するダイアログを親にする必要があるのかとも考え
>いまトライして見ていますが,このダイアログのクラスへのポインタの取得
>方法を模索しています。

いえ、CFormViewがダイアログそのものです。


返信引用
りんご
 りんご
(@りんご)
ゲスト
結合: 23年前
投稿: 28
 

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が飛んできませんでした。
ご参考になれば。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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