親と一体の子ダイアロクの作り方 – プログラミング – Home

親と一体の子ダイアロクの作り方
 
通知
すべてクリア

[解決済] 親と一体の子ダイアロクの作り方


ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

VC++ 2005 MFC でSDIアプリケーションを作っています。
親ウインド(CMainFrame)に張り付き一体となったボーダの無い 子モードレスダイアログを
作成したいと思っています。
ダイアログフォームリソースを作成し、新しいクラスを作成してCMainFrameの中で、
m_pSubPanel = new CSubPanel(this);
のようにフォームを生成、Createして画面が表示は正しくされました。
子ダイアログの Style で、ポップアップを指定した場合、子ダイアログの上に貼り付けた
ボタンが正しく動作する事を確認しました。Clickのイベント処理関数に飛んできます。
ここまで動作する事を確認して、、、、
念願の親ウインドと一体化する為に子ダイアログの Style を「子」に変更すると、
子ダイアログが動かなくなり、ボタンも効かなくなります。
ポップアップでは独立してメッセージを受け取り動作していたのが、Styleを「子」にした
事によりメッセージを受け取れなくなったように見えます。
私の想像なのですが、、
「子」だから親ウインドからメッセージを引き渡してもらわないといけない所、メッセージの
連係が切れてしまっていて動作しなくなったように思うのですが、、、、
このような場合、どの点に対応が不足しているのか、お教えいただけませんでしょうか?
すみませんが、よろしくお願いします。


引用未解決
トピックタグ
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

親ウィンドウにメッセージを引き渡す処理を書かなくても
各ウィンドウへのメッセージは各ウィンドウ(ハンドラ)に渡されるはずです。


返信引用
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

超初心者さま、レスありがとうございます。
あれから色々と試していますが、うまくいっていません。
おっしゃる通りメッセージは受け取っているようです。
子ダイアログに貼り付けたボタンをクリックするとWindowProc()になんらかのメッセージが
送られます。多分、Button Clickだと思います。
ボタンがそのメッセージを受け取らず無視しているようです。
ダイアログのフォーム作成でなにか不適切なことがあるのでしょうか?
なにかお気づきの点ありましたら教えてください。
すみませんが、よろしくお願いします。


返信引用
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

前の投稿の修正です。
>>子ダイアログに貼り付けたボタンをクリックするとWindowProc()になんらかのメッセージが
>>送られます。多分、Button Clickだと思います。
と書きましたが、訂正します。
まともなメッセージは送られていませんでした。

子ダイアログに貼り付けたボタンをクリックした時のメッセージは次のようなものでした。

CFormView messae = 0x0084 WM_NCHITTEST
CFormView messae = 0x0021 WM_MOUSEACTIVATE
CFormView messae = 0x0020 WM_SETCURSOR
CFormView messae = 0x0201 WM_LBUTTONDOWN
CFormView messae = 0x0363 ??????? WM_AFX????
CSubPanel messae = 0x0363 ??????? WM_AFX????
CFormView messae = 0x0084 WM_NCHITTEST
CFormView messae = 0x0020 WM_SETCURSOR
CFormView messae = 0x0202 WM_LBUTTONUP
CFormView messae = 0x0363 ??????? WM_AFX????
CSubPanel messae = 0x0363 ??????? WM_AFX????

子ダイアログ(CSubPanel)には、0x363の意味がよく解らないメッセージが出力されています。
どうも親(CFormView)のほうで子ダイアログ向けのマウスメッセージまで処理されてしまって
いるようです。

このような状況ですが、なにかお気づきの点ありましたら教えてください。
よろしくお願いします。m(_ _)m


返信引用
ゆう
 ゆう
(@ゆう)
ゲスト
結合: 23年前
投稿: 114
Topic starter  

自己解決しました。
子ダイアログのCreateの仕方が不適切だったようです。
m_pSubPanel = new CSubPanel(this);
ではなく、m_pSubPanelをクラス変数にかえて、
m_SubPanel.Create(IDD_SUBPANEL,this);
のようにしたら動きました。
根本的なところはよく解っていないのですが、なんとか問題が回避できました。

お騒がせしました。
超初心者さま、レスありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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