- ベストアンサー
CLRを使ったメッセージの送信方法とは?
- CLRを使って他のアプリケーションにメッセージを送信する方法をご紹介します。
- Visual C++で新しいプロジェクトCLR Windowsフォームアプリケーションを作成し、Form1の内容を他のアプリケーションに送信する方法を解説します。
- Form1のウィンドウプロシージャの仕組みや使い方についても説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 PlatformSDKさえインストールされていれば、「共通言語ランタイムサポート」をONにして、windows.hをインクルードして、普通にPostMessage()を呼び出せると思います。 逆にForm1でメッセージを受け取りたいのであるならば、WndProcをオーバーライドして http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.wndproc(VS.80).aspx virtual void WndProc(Message% m) override { switch(m.Msg) { case WM_???://引っ掛ける } this->Form::WndProc(m); } と言った具合だと思います。 通常はイベントで受け取ります。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form_members(VS.80).aspx イベントには存在しないメッセージを受け取りたい時など、余程の理由が無い限りWndProcをオーバーライドする事は無く、普段はWndProcの存在すら気にされていない感じです。
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
こんにちは。補足頂きました。 おお、書き忘れておりました。必要なライブラリをリンクしなければいけませんでした。 それぞれのAPIが収められたライブラリはMSDNの一番下「対応情報」に書かれているので一目瞭然です。 http://msdn.microsoft.com/ja-jp/library/cc410952.aspx 「何故リンクを追加するハメに陥ったか」と言う事ですが、WIN32プロジェクトを作成すると、「基本的なWIN32APIのリンクは行ってくれる設定にしてくれる」からではないでしょうか。 CLRの方はWIN32を使用する事が前提に無いので、「使用する場合は任意で」と言った解釈で良いと思います。 要は本来必要な設定をプロジェクトの種類に応じてVCが自動で行ってくれると言う事なのでは。 例えば当方が使用しているVC2005Expressは、WIN32プロジェクト自体が作成出来ないので、作成出来る様にする為に設定を行いました。 更にWIN32プロジェクトを作成するにも、必要となるリンクは全て自分で行う必要があります。 製品版ではないので其処までしてくれませんでした。他社のコンパイラを使用するともなれば、フォルダの構成から何から、1から全てを書く必要があります。 この辺りは「環境」による違いに左右される事ですので、チョッと一言では説明出来ません・・・。 で、肝心な「この先何が必要になるか」と言う事ですが kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib winmm.lib 辺り迄、リンクしてあれば後先楽にはなりそうです。
お礼
丁寧な回答ありがとうございます。やはりCLRの開発では基本的にAPIは使わないのですね、となるとまたいろいろ覚えなければならないのか。。。 でもAPIも問題なく使えるようになったので安心です。 とりあえずライブラリの設定はしておきます。 ありがとうございました。
補足
回答ありがとうございます。Form1でもメッセージを受け取れるんですね。自分でユーザー定義のメッセージをたくさんつかうので役立ちそうです。 あとPostMessage()の問題ですが、普通に使えるんですね。 でも、自分の環境で使うと未解決のトークンというエラーでコンパイルできませんでした。それでネットで調べたところhttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200601/06010032.txt で同じような問題のスレがあり #pragma comment(lib, "user32.lib") を追加したところ実行することができました。 それで質問なのですが、なぜuser32.libをリンクするライブラリに登録する必要があるのでしょうか。いままでこのようなことを行ったおぼえがありません。あと、他に何か設定しておくライブラリってありますか?