MsgBox

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ABOX

MsgBox

#1 投稿記事 by ABOX »

超初心者ですが、ヘルプセンターの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番目のボタンをデフォルトにしたい場合
どう書けばいいのでしょうか???
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: MsgBox

#2 投稿記事 by 7 »

> MessageBox(0, "Hello world!", "タイトル", MB_OK)
> という例文があり
> そのすぐ下のイメージを見ると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
> そもそも、MB_YESNOCANCELのスタイルで
> 3番目のボタンをデフォルトにしたい場合
> どう書けばいいのでしょうか???
ABOXさんのMessageBox()関数の使い方を見ると引数を五つ渡してるのでエラーになると思います。
MsgBox命令は引数が五つなんですけどね。

MB_YESNOCANCEL, MB_DEFBUTTON3のタイプを組み合わせて指定する場合、コンマで区切るのではなく演算子を使います。

コード: 全て選択

MessageBox(hMainWnd,"テキストになります","タイトルです",MB_YESNOCANCEL Or MB_DEFBUTTON3)
ABOX

ありがとうございました

#3 投稿記事 by ABOX »

うーん。そうですか。なんとなくですが、少しだけ納得できました。
勉強不足で申し訳ありません。 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ボタンのみになってしまいます。まあ、あまり深く考えないで、使い方をすこしづつでも
覚えたいと思います。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: ありがとうございました

#4 投稿記事 by 7 »

> 通常の言語的には(AでしかもB)なのでAndを使いたいような気がしますが、Andだと結果は
> OKボタンのみになってしまいます。まあ、あまり深く考えないで、使い方をすこしづつでも
> 覚えたいと思います。
ちょっと難しい話なので流してもらって構わないんですが、AndOrは論理演算子で、And演算子は論理積を求める演算子です。

MB_YESNOCANCELの値を二進数に直すと1000000000になり、MB_DEFBUTTON2の値を二進数に直すと0100000000になります。

1000000000
0100000000

この二つの論理積は0になってしまうんですね。
この0っていうのはMB_OKと同じ値なのでOKボタンだけになります。

Or演算子は論理和を求める演算子なので問題はありません。

1000000000
0100000000

1100000000という答えになります。
これで二つ目のボタンがデフォルトの、はいいいえキャンセルのメッセージボックスが作れるという訳です。

ちなみにOr演算子じゃなくても算術演算子の+でも大丈夫です。
返信する