超初心者ですが、ヘルプセンターのWin32講座の
ステップ0でつまづいています。
先ず、
MessageBox(0, "Hello world!", "タイトル", MB_OK)
という例文があり
そのすぐ下のイメージを見るとMessageBox( )ではなくて
MsgBox 0になっています。
どちらでもうまくいくようですが、どちらでもいいのですね。(?)
MessageBoxの場合は括弧が必要なんでしょうか?
どっちでもいいのならMsgBox 0 のほうが覚えやすいかなあ。
それと、
ヘルプのリファレンスを見ると、MsgBoxになっています。
上から順にひとつひとつやってみたら
MB_ICONSTOPまでの10項目までは
MessageBox(0, "メッセージ", "タイトル", MB_YESNOCANCEL, MB_ICONSTOP)
のように、MB_の続きを書き換えれば、メッセージボックスの
スタイルが変えられるということがわかりました。
しかしMB_DEFBUTTON1でつまづきました。
たとえばMB_YESNOCANCELのスタイルで
3番目のボタンをデフォルトにしたい場合
MB_YESNOCANCEL, MB_DEFBUTTON3
のようにしたらエラーが出ますし
そもそも、MB_YESNOCANCELのスタイルで
3番目のボタンをデフォルトにしたい場合
どう書けばいいのでしょうか???
MsgBox
Re: MsgBox
> MessageBox(0, "Hello world!", "タイトル", MB_OK)
> という例文があり
> そのすぐ下のイメージを見るとMessageBox( )ではなくて
> MsgBox 0になっています。
> どちらでもうまくいくようですが、どちらでもいいのですね。(?)
関数と命令の違いでしょうかね?
Win32APIのMessageBox()関数、BASIC系のMsgBox命令...?
> たとえばMB_YESNOCANCELのスタイルで
> 3番目のボタンをデフォルトにしたい場合
> MB_YESNOCANCEL, MB_DEFBUTTON3
> のようにしたらエラーが出ますし
MessageBox()関数の引数は四つです。
> 3番目のボタンをデフォルトにしたい場合
> どう書けばいいのでしょうか???
ABOXさんのMessageBox()関数の使い方を見ると引数を五つ渡してるのでエラーになると思います。
MsgBox命令は引数が五つなんですけどね。
MB_YESNOCANCEL, MB_DEFBUTTON3のタイプを組み合わせて指定する場合、コンマで区切るのではなく演算子を使います。
> という例文があり
> そのすぐ下のイメージを見るとMessageBox( )ではなくて
> MsgBox 0になっています。
> どちらでもうまくいくようですが、どちらでもいいのですね。(?)
関数と命令の違いでしょうかね?
Win32APIのMessageBox()関数、BASIC系のMsgBox命令...?
> たとえばMB_YESNOCANCELのスタイルで
> 3番目のボタンをデフォルトにしたい場合
> MB_YESNOCANCEL, MB_DEFBUTTON3
> のようにしたらエラーが出ますし
MessageBox()関数の引数は四つです。
コード: 全て選択
MessageBox(
hWnd As HWND,
lpText As BytePtr,
lpCaption As BytePtr,
uType As DWord) As Long
- hWnd : メッセージボックスを所有するウィンドウのハンドル
lpText : メッセージボックスに表示する文字列
lpCaption : メッセージボックスのタイトル バーに表示する文字列
uType : メッセージボックスのタイプ
戻り値 : 押されたボタンを示す定数が返る。失敗すると 0
> 3番目のボタンをデフォルトにしたい場合
> どう書けばいいのでしょうか???
ABOXさんのMessageBox()関数の使い方を見ると引数を五つ渡してるのでエラーになると思います。
MsgBox命令は引数が五つなんですけどね。
MB_YESNOCANCEL, MB_DEFBUTTON3のタイプを組み合わせて指定する場合、コンマで区切るのではなく演算子を使います。
コード: 全て選択
MessageBox(hMainWnd,"テキストになります","タイトルです",MB_YESNOCANCEL Or MB_DEFBUTTON3)
ありがとうございました
うーん。そうですか。なんとなくですが、少しだけ納得できました。
勉強不足で申し訳ありません。 APIの知識ゼロです。
今はあまり深く考えないようにしてみます。
一応、基本的にはMsgBox命令を使い、凝ったやつを使いたい場合は
Win32APIのMessageBox()関数を使い分けるのだと理解したいと
思います。
>>MessageBox()関数の引数は四つです。
>>Code:
>>MessageBox(
>> hWnd As HWND,
>> lpText As BytePtr,
>> lpCaption As BytePtr,
>> uType As DWord) As Long
了解いたしました。 MessageBox()関数の引数を5つにしたら
エラーが出るのは当然ですね!
>> B_YESNOCANCEL, MB_DEFBUTTON3のタイプを組み合わせて
>> 指定する場合、コンマで区切るのではなく演算子を使います。
>> Code:
>> MessageBox(hMainWnd,"テキストになります","タイトルです",MB_YESNOCANCEL Or MB_DEFBUTTON3)
『演算子を使います』→参考になります。「Or」を使うのですね。まったく気がつきませんでした。
実際にhMainWndを0にして上記のを実行すると、僕の念願どおりの結果ができました。
又、MB_DEFBUTTON2で、2番目をデフォルト指定できました。
通常の言語的には(AでしかもB)なのでAndを使いたいような気がしますが、Andだと結果は
OKボタンのみになってしまいます。まあ、あまり深く考えないで、使い方をすこしづつでも
覚えたいと思います。
勉強不足で申し訳ありません。 APIの知識ゼロです。
今はあまり深く考えないようにしてみます。
一応、基本的にはMsgBox命令を使い、凝ったやつを使いたい場合は
Win32APIのMessageBox()関数を使い分けるのだと理解したいと
思います。
>>MessageBox()関数の引数は四つです。
>>Code:
>>MessageBox(
>> hWnd As HWND,
>> lpText As BytePtr,
>> lpCaption As BytePtr,
>> uType As DWord) As Long
了解いたしました。 MessageBox()関数の引数を5つにしたら
エラーが出るのは当然ですね!
>> B_YESNOCANCEL, MB_DEFBUTTON3のタイプを組み合わせて
>> 指定する場合、コンマで区切るのではなく演算子を使います。
>> Code:
>> MessageBox(hMainWnd,"テキストになります","タイトルです",MB_YESNOCANCEL Or MB_DEFBUTTON3)
『演算子を使います』→参考になります。「Or」を使うのですね。まったく気がつきませんでした。
実際にhMainWndを0にして上記のを実行すると、僕の念願どおりの結果ができました。
又、MB_DEFBUTTON2で、2番目をデフォルト指定できました。
通常の言語的には(AでしかもB)なのでAndを使いたいような気がしますが、Andだと結果は
OKボタンのみになってしまいます。まあ、あまり深く考えないで、使い方をすこしづつでも
覚えたいと思います。
Re: ありがとうございました
> 通常の言語的には(AでしかもB)なのでAndを使いたいような気がしますが、Andだと結果は
> OKボタンのみになってしまいます。まあ、あまり深く考えないで、使い方をすこしづつでも
> 覚えたいと思います。
ちょっと難しい話なので流してもらって構わないんですが、AndやOrは論理演算子で、And演算子は論理積を求める演算子です。
MB_YESNOCANCELの値を二進数に直すと1000000000になり、MB_DEFBUTTON2の値を二進数に直すと0100000000になります。
1000000000
0100000000
この二つの論理積は0になってしまうんですね。
この0っていうのはMB_OKと同じ値なのでOKボタンだけになります。
Or演算子は論理和を求める演算子なので問題はありません。
1000000000
0100000000
1100000000という答えになります。
これで二つ目のボタンがデフォルトの、はいいいえキャンセルのメッセージボックスが作れるという訳です。
ちなみにOr演算子じゃなくても算術演算子の+でも大丈夫です。
> OKボタンのみになってしまいます。まあ、あまり深く考えないで、使い方をすこしづつでも
> 覚えたいと思います。
ちょっと難しい話なので流してもらって構わないんですが、AndやOrは論理演算子で、And演算子は論理積を求める演算子です。
MB_YESNOCANCELの値を二進数に直すと1000000000になり、MB_DEFBUTTON2の値を二進数に直すと0100000000になります。
1000000000
0100000000
この二つの論理積は0になってしまうんですね。
この0っていうのはMB_OKと同じ値なのでOKボタンだけになります。
Or演算子は論理和を求める演算子なので問題はありません。
1000000000
0100000000
1100000000という答えになります。
これで二つ目のボタンがデフォルトの、はいいいえキャンセルのメッセージボックスが作れるという訳です。
ちなみにOr演算子じゃなくても算術演算子の+でも大丈夫です。