ここから本文です

解決済みの質問

DLLで作成したウィンドウの破棄について教えて下さい。

tt1582さん

DLLで作成したウィンドウの破棄について教えて下さい。

現在、非MFCのDLLモジュールの開発を行なっているのですが、
その中で、CreateWindowでウィンドウを生成し、DestroyWindowでウィンドウの破棄を行なっています。

そのウィンドウがメッセージを処理できるように、
スレッドを生成し、スレッドの中でGetMessageによるメッセージポンプを作成したのですが、
どうもこのメッセージポンプでは、まったくメッセージを受信しておらず、
むしろメッセージポンプがなくても、
作成したウィンドウのウィンドウプロシージャにメッセージ(WM_PAINTやWM_DESTROY)が来ていました。

メッセージポンプがなくても、メッセージ処理ができるものなのでしょうか・・?

まったくの初心者な質問で申し訳ないのですが、
詳しい方おられましたら、ご回答をお願い致します。

補足
lehshellさん
hideakira_2010さん
ご回答有難うございました。

lehshellさんの回答にある通り、
lpszClassNameとhInstanceを同じにしていたため、
WndProcでメッセージ処理が出来ていたんだと思います。

この辺について、勉強をしてみます。

違反報告

ベストアンサーに選ばれた回答

lehshellさん

コードがないと適切なコメントは難しそう。

> メッセージポンプがなくても、メッセージ処理ができるものなのでしょうか・・?
できません。
ただし、モーダルダイアログの場合はアプリケーションサイドでメッセージポンプの記述は不要です。
しかし、今回とは関係ないですね。

作成したアプリケーションにはメッセージポンプが1つも存在しないにもかかわらず
> 作成したウィンドウのウィンドウプロシージャにメッセージ(WM_PAINTや
> WM_DESTROY)が来ていました。
ということ?
DLL の中で CreateWindow しようが外でしようが関係ないのだけどね。
DLL の外で CreateWindow しても同じと思うけどね。
RegisterClassEx() CreateWindow() WndProc() の関係がわかっていますか?

RegisterClassEx() に渡す WNDCLASSEX 構造体の lpfnWndProc に WndProc を指定して hInstance にアプリケーションインスタンスを指定して lpszClassName にアプリケーションのクラス名を指定していますよね
この lpszClassName と同じクラス名を指定して(hInstance も当然同じにする) CreateWindow を行えば WndProc() にこのウィンドウのメッセージがコールバックされます。
別のクラス名と別の WndProc を指定して(hInstance は同じで) RegisterClassEx() を行えば、この別のクラス名を指定して CreateWindow することで別の WndProc でこのウィンドウのメッセージを受け取れます。
この時、メッセージポンプの追加は不要です。
クラス名と関連付けられたウィンドウの WndProc にコールバックができる情報は Windows OS に渡していますから。

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 0点(5点満点中)0人が役に立つと評価しています。

ベストアンサー以外の回答

(1件中1〜1件)

 

hideakira_2010さん

ウィンドウが、同じクラスと関連付けられていれば、

同じウィンドウ・プロシージャになるのは当然です。

メッセージ・ループは、インスタンスに関連付けられています。

すべて、繋がっています。

すべて、繋げているからです。

そこの所を整理して下さい。

  • 違反報告
  • 編集日時:2012/2/14 23:31:05
  • 回答日時:2012/2/14 23:30:03
知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

ただいまの回答者

01時40分現在

2341
人が回答!!

1時間以内に4,269件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する