dポイントプレゼントキャンペーン実施中!

WindowsXP VC.netでプログラミングしているのですが、
PostMessageでコールされる関数のWPARAMを
publicで宣言した変数に代入しても、
値が更新されないんです。。。

public:
WPARAM m_wWP;

とヘッダで定義して、
WPARAMの値が10であった時、

long testclass::PostCallFunc(
WPARAM wparam, LPARAM lparam)
{
m_wWP = wparam;
}
とやってもm_wWPが10にならないんです。。。
とっても困っています。
ご存知の方がいらっしゃいましたらご教授ください。
よろしくお願いします。

A 回答 (3件)

補足の質問に回答するのは簡単なのですが、その前に・・・No.1の回答での指摘は合っていたのでしょうか。

それとも的外れだったのでしょうか。

この回答への補足

Windowsの仕組みから考えて、PostMessageしたあと、
メッセージプロシージャがコールされた時、
WPARAM、LPARAMの値が確定(更新?)されない場合が
あるとは、考えにくいと思います。
現に、
(1)AからBにPostMessage
(この度質問した例)
(2)AからCにPostMessage
(3)AからDにPostMessage
(同様の処理を行う別のモジュール)
とあった場合、
(2)と(3)はまったく問題なく処理できているのに、
(1)はできなかったのです。
また、質問した後、リビルドしたら現象が起きなくなりました。
よって、PostMessageした後、値が更新されていない可能性がある、というのは、ちょっと該当しないと思われます。

補足日時:2005/07/20 01:03
    • good
    • 0

testclass::PostCallFunc関数はlong型になっているのに、


戻り値が無いのはタイプミスですか?

この回答への補足

タイプミスじゃないです。
省略です。

補足日時:2005/07/19 14:01
    • good
    • 0

ひょっとして



  (1) testclassにPostMessage()する
  (2) PostMessage()から帰ってくる
  (3) testclass::m_wWPの値を見る
  (4) 変化していない!?

という手順で変数の値を確認していませんか?

この例で変数の値を確認する正しい手順は

  (1) m_wWP = wparam;の行にブレークポイントを置く(あるいはデバッグ用メッセージ出力を置く)
  (2) testclassにPostMessage()する
  (3) ブレークポイントに到達するのを待つ(あるいはデバッグ用メッセージが表示あれるのを待つ)
  (4) (ブレークの場合はブレーク行をステップ実行してから)変数の値を確認する

です。

PostMessageで送ったウィンドウメッセージは、PostMessage()から帰ってきた時点ではまだ処理されていない可能性が高いので、PostMessage()から帰ってきた直後は変数の値が変化していない可能性もまた高くなります。

この回答への補足

回答ありがとうございます!
お礼が遅れて申し訳ありません!!

回答の中で「PostMessageで送ったウィンドウメッセージは、PostMessage()から帰ってきた時点ではまだ処理されていない可能性が高い」とありますが、なぜなんでしょうか・・・?
ウィンドウメッセージ(WM_CREATEやWM_PAINTなど)を使用しても値が更新されないような問題は発生していません。。。

補足日時:2005/07/19 14:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています