質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

579閲覧

ウィンドウメッセージのメリット

tanukitii

総合スコア44

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/08/12 04:00

メインのダイアログをクリックしたら,自分で作成した別のダイアログが表示されるようなコードを書きました。

手法としては,

【1】ポインタを使用する。
1.メインのダイアログ(親ダイアログ)とは別に子ダイアログを作成。
2.子ダイアログにひもづくヘッダーを親ダイアログにひもづくヘッダーにインクルード。
3.親ダイアログにひもづくソースコードでポインタなどを使用し,子ダイアログを呼び出す。

【2】ウィンドウメッセージを使用する。
1.メインのダイアログ(親ダイアログ)とは別に子ダイアログを作成。
2.子ダイアログにひもづくヘッダーをメインのダイアログにひもづくヘッダーにインクルード。
3.親ダイアログにひもづくソースコードにSendMessage関数を入力。
4.子ダイアログにひもづくソースコードのBEGIN_MESSAGE_MAP~END_MESSAGE_MAPの間にON_Message()を加える。この関数の引数には,3で入力したSendMessage関数の引数のウィンドウのハンドルをわたす。
5.ウィンドウのハンドルを受け取ったら,子ダイアログが表示される。

おおざっぱですが,メインのダイアログとは別のダイアログを表示させるために2通りの方法をおもいつきました。しかし,【2】のような手法を用いなくとも【1】の方法で十分な気がしますし,そもそも【2】のSendMessage関数を使用した方法がウィンドウメッセージを使用した方法かどうかもよくわかりません。長くなりましたが,私の質問は

【質問】
1.【2】のやり方はウィンドウメッセージを使用した方法といっていよいのでしょうか。違うのであれば,ウィンドウメッセージを使用した方法を教えていただきたいです。

2.そもそもウィンドウメッセージのメリットがわかりません。クラスウィザードからで呼びすことができ,Windowsに直接命令できる便利な関数とは思っているのですが,その解釈は正しいのでしょうか。(もし,その解釈が正しいとすると今回の子ダイアログの表示方法は効率の悪い方法ということになる気がします…)

3.ウィンドウメッセージの関数はWM_…と表記されています。EN…という表記の関数も見つけたのですが,これはなんの略でしょうか。(情けない話,調べて見つけることができませんでした。)

4.ウィンドウプロシージャーという言葉を知りました。ウィンドウメッセージを理解する上で必要な気がするのですが,いまいちどういう仕組みなのか理解することができませんでした。PostMessageやSendMessageとセットで理解するものではないかと思っているのですが…
理解する上で,何かご助言をいただけると幸いです。

長文失礼しました。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問1.
【2】のやり方の4.で独自のWindowメッセージを定義してメッセージマップに追加して、それを使用してSendMessageやPostMessageを行うということであれば、「ウィンドウメッセージを使用した方法」といってもいいと思います。

質問2.
別スレッドや別プロセスから操作できる。

質問3.
具体的な例を記載してください。
例えば、Edit Control系のウィンドウメッセージであれば以下です。
Edit Control Message
EN_といっているのはたぶん以下です。
Edit Control Notifications

質問4.
どの部分が分からないのか、何を読んでわからないのかを具体的に書いてください。
一言でいうと、ウィンドウメッセージを処理する関数です。
ウィンドウメッセージの値に基づいていろいろと処理を行います。

投稿2018/08/12 13:40

hmmm

総合スコア818

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanukitii

2018/08/12 17:40

回答誠にありがとうございます。 質問3と質問4は質問が曖昧でした…,申し訳ございません。ただ,ここはhmmmさんのご助言のおかげでなんとかなりました。ありがとうございます。 追加で質問1と質問2について,いくつか伺いたいのですが, 【質問1について】 スライダコントロールをダイアログ上に設置し,WM_HSCROLLという関数をクラスウィザードから呼び出して使用したことがあります。これを使用したとき,メッセージマップには何も追加されなかったのですが,これはウィンドウメッセージとは異なるものなのでしょうか。 【質問2について】 マルチスレッドやマルチプロセスが使用できる,ということがメリットということでしょうか。 よろしくお願いいたします。
hmmm

2018/08/13 02:53

【質問1について】 [WM_HSCROLLという関数をクラスウィザードから呼び出して使用]の文章の意味が分かりません。 メッセージを選択してイベントハンドラを追加すれば、メッセージマップに追加されると思います。 どういう操作を行ったのかを正確に記載されないと誰も答えられません。 【質問2について】 はい。
tanukitii

2018/08/15 03:01

申し訳ございません,質問1については勘違いをしていました。自己解決したので大丈夫です。 hmmmさんのご回答によって,ウィンドウメッセージの理解が深まりました。誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問