WM_QUITとはなにですか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
notebook

WM_QUITとはなにですか?

#1

投稿記事 by notebook » 7年前

http://wisdom.sakura.ne.jp/system/winap ... win11.html

ここで終了コードが「終了コードは必ず WS_QUIT の wParam の値でなければならないとされます」
とかいてありますが

return msg.wParam;

となっていてWS_QUITなんてオブジェクトでてきてませんがどういうことなんでしょうか?

WS_QUIT.wParamみたいなかたちで出てこないんでしょうか?

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: WM_QUITとはなにですか?

#2

投稿記事 by YuO » 7年前

WS_QUITはWM_QUITの誤記でしょう。
で,WM_QUITはウィンドウメッセージです。

return msg.wParam;する時の,msg.messageを調べてみると,WM_QUITが入っていることがわかると思います。
この時の追加の情報として,msg.wParamにPostQuitMessageの引数が入っています。

notebook

Re: WM_QUITとはなにですか?

#3

投稿記事 by notebook » 7年前

?????????

最後のreturnのmsg.wParamの

msgがWM_QUITになってるってことですか??????????

頭が混乱しそうです!!!!!

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: WM_QUITとはなにですか?

#4

投稿記事 by YuO » 7年前

MSG structureはちゃんと読んだでしょうか。
MSGは構造体です。
msgはMSG型の変数ですから,msgがWM_QUITになる,ということはないです。
YuO さんが書きました:return msg.wParam;する時の,msg.messageを調べてみると,WM_QUITが入っていることがわかると思います。
この時の追加の情報として,msg.wParamにPostQuitMessageの引数が入っています。
ここを,ちゃんと読み返してください。
msg.messageにWM_QUITが入っているとは書きましたが,msgがWM_QUITになるとは書いていません。

notebook

Re: WM_QUITとはなにですか?

#5

投稿記事 by notebook » 7年前

YuOさん返信ありがとうございます。

でもhttp://wisdom.sakura.ne.jp/system/winapi/win32/win10.html
だとmsg == WM_LBUTTONUPみたいなことしてるから、msg=メッセージではないんでしょうか?
もしmessageなるものがあるなら

msg.message==WM_LBUTTONUPとしないとダメでは??また混乱してしまいました。
そのままmsgだけでcaseしてるからmsgがWM_CLOSEとかWM_PAINTとかいうメッセージの変数なのかと思ってたんですけど。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#6

投稿記事 by softya(ソフト屋) » 7年前

これはですね。
C言語の仮引数や変数がちゃんと理解出来ていないんだと思います。
変数名は変数の型を表していませんので、msgという変数名が同じ型だと思い込むのは理解する上で大変危険です。
よく読んでみてください。型が違いませすよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#7

投稿記事 by notebook » 7年前

softya(ソフト屋)さん

C言語だと

int k
k=20;
switch(i)
case k

の場合iとkは同じ型ですよね?

それなら

msg == WM_LBUTTONUPとかを判定するなら

msgとWM_LBUTTONUPは同じ型なのでは?

すいません、もちろんなんらかの理屈があるから
msg == WM_LBUTTONUPこういう書き方できるんでしょうけど、実際動きますし。

notebook

Re: WM_QUITとはなにですか?

#8

投稿記事 by notebook » 7年前

あ…

UNITって書いてありましたね…

mainの方でMSG msgって書いてあるから
プロシージャのほうのmsgの型を確認してませんでした…
うっかりです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#9

投稿記事 by softya(ソフト屋) » 7年前

そうですね。同じmsgと言う変数名ですが型が違います。
なので、#1から混乱されていることになります。
WM_QUITですがVisualStudioで検索すれば定義を見ることも出来ますよ。
MSG型も同様に検索できます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#10

投稿記事 by notebook » 7年前

ということはプロシージャにはMSGのmsgが渡されるわけだから
msg.msgという書き方は許されるんでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#11

投稿記事 by softya(ソフト屋) » 7年前

notebook さんが書きました:ということはプロシージャにはMSGのmsgが渡されるわけだから
msg.msgという書き方は許されるんでしょうか?
プロシージャの仮引数はMSG型じゃないですし、そもそもMSG型にmsgと言う名前のメンバ変数がなければ出来ませんね。
根本的なところですが、他の方も書いてますがC言語の理解不足だと思います。
プロシージャにはmsg型のmsgは存在しない(未定義)。MSG型にはmsgとメンバ名も存在しない(未定義)です。
まぁ、疑問に思うならコンパイルしてためしてみるのが一番です。試した上で質問して下さい。
経験したことが理解につながるので、質問ばかりで済ませると理解が進みません。

なお、VisualStudio2010だと型名を選択しておいて右クリックで「定義への移動」で見れるはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#12

投稿記事 by notebook » 7年前

softya(ソフト屋) さん

ということは仮引数で渡される(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
この4つの引数には親がいるわけじゃないですか?

親.msg
親.wp
としても間違いではないですよね?
でその親を明示する場合どうしたらいいんでしょうか?

notebbok

Re: WM_QUITとはなにですか?

#13

投稿記事 by notebbok » 7年前

だってjavaだって

親オブジェクト.フィールド
親オブジェクト.メソッド

みたいな書き方しますよね。僕が疑問なのはそこです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#14

投稿記事 by softya(ソフト屋) » 7年前

親ですか?
Javaでもオブジェクトを引数で渡せばオブジェクト=親も参照できますが、メンバ変数だけ引数で渡した場合は、その親は参照できないはずですが。
試してみてください。

【補足】
逆にできたらカプセル化を破壊することになるのでオブジェクト指向言語としては大問題かもしれません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#15

投稿記事 by notebook » 7年前

main関数内のMSG msgとはいったい…
このmsgをディスパッチしてコールバックでプロシージャに送って
そのmsgのUNITやらwParamなどを参照しているというのは全くの間違いということですか??
ちょっとどうしようもないくらい混乱してしまいました…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#16

投稿記事 by softya(ソフト屋) » 7年前

引数で渡すということの本質を理解されていない気がしますが。
Javaでも関数間のオブジェクトの場合とメンバ変数の場合の引数の受け渡しを試されましたか?
試さずに混乱していると書かれても理解が進まないだけですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#17

投稿記事 by notebook » 7年前

引数で渡すということは、渡す主体がいるっていうことですよね。
プロシージャが呼ばれてその4つの引数は誰かの持ち物ってことですよね。
こういう理解でいいですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#18

投稿記事 by softya(ソフト屋) » 7年前

実体は必要ですよ。
ただ、受け取る関数側がどのオブジェクトのメンバ変数であるかを知る事はできません。
そもそもメンバ変数である必要もありません。引数が同じ型であればよいのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#19

投稿記事 by notebook » 7年前

なるほど、でも引数として受け取った後、その引数の値を使うだけでなく実体として変化させたい場合は
&paramのようにポインタとして使うんですね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: WM_QUITとはなにですか?

#20

投稿記事 by softya(ソフト屋) » 7年前

確かにポインタにすれば書き換えれますが、他に良い代案がない場合の手段であって基本は書き換えずに戻り値です。
プログラムのバグを考えるなら関数先で気軽に値を書き換えるのは厳禁ですよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

notebook

Re: WM_QUITとはなにですか?

#21

投稿記事 by notebook » 7年前

softya(ソフト屋)さん
注意致します。ありがとうございました!

閉鎖

“C言語何でも質問掲示板” へ戻る