ハンドルについて・・・

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ハンドルについて・・・

by OverTaker » 2006年7月06日(木) 22:27

補足で追記させていただきます。
7さん さんが書きました:コントロールに割り当てられた識別番号
誰に割り当てられるのかというと、Windowsです。
私たちがウィンドウを生成するときにはWindowsに「ウィンドウを作ってください」と頼みます。(ActiveBasicのRADを使っている場合、この辺はActiveBasicがやってくれます)するとWindowsがウィンドウを作ってくれて、そのウィンドウを示す番号を教えてくれます。以後、ウィンドウに操作したいときはこの番号を使用して「Windowsさん、この番号のウィンドウに文字を設定してくれよ」と頼んだりするわけです。その番号がハンドルということになります。
ちなみに、ID(EditBox1とか)は、こちらでウィンドウにつけた名前のようなものです。Windowsにいきなり「あなたは番号10283(実際こうではありませんが)のウィンドウを作りましたから使ってください」と言われても、こんな半端の番号では扱いずらいですよね。そこでこっちはこっちで、番号10283のウィンドウは"EditBox1"と命名しよう。とするわけです。
RADを使う場合、私たちはIDを使っています。それではWindowsに頼めませんのでGetDlgItem()でIDからハンドルを取得するわけです。

ちなみに、ハンドルはWindowsのいたるところで使われます。ウィンドウに限った話ではありません。

説明大丈夫かなぁ~、、、多少語弊のあるような説明をしたところもありますが、ハンドルを理解できたころにはそれも問題なくなると思います。

Re: ハンドルについて・・・

by 7 » 2006年7月06日(木) 21:37

ハンドル、コントロールに割り当てられた識別番号、って感じですかねぇ...。

コード: 全て選択

Dim hEdit As HWND
	hEdit=GetDlgItem(hMainWnd,EditBox1)
というコードを書いた場合、hMainWnd っていうウィンドウに含まれる、 EditBox1 っていうエディットコントロールの識別番号を hEdit に代入する、といった動きになっています。

で、この識別番号は可変性のものでプログラムを実行する度に変わってしまいます。
hMainWnd というウィンドウに含まれる EditBox1 であることに変わりはないんですけどね。
あ。 hMainWnd っていうのもハンドルで、ウィンドウに割り当てられた識別番号になります。
コントロールもウィンドウなので、コントロールとウィンドウは別として考えなくてもいいです。

分かり辛いかなぁ...。

返事

by SIKAMARU » 2006年7月06日(木) 21:32

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
    Dim id As Long
    id=GetDlgItem(hMainWnd,EditBox1)
    MessageBox(hMainWnd,Str$(id),"ハンドル",MB_OK)
End Sub
というようにすると「数字」はメッセージボックスにランダムに表示されるのですが、
なぜでしょうか?
原因がわかりません。

by C1000 » 2006年7月06日(木) 21:07

でも、こうしないとアクセス違反になってしまうのでは?

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
    Dim id As Long
    id=GetDlgItem(hMainWnd,EditBox1)
    MessageBox(hMainWnd,Str$(id),"ハンドル",MB_OK)
End Sub

by konisi » 2006年7月06日(木) 20:57

CommandButton1がクリックされた時に、EditBox1のハンドルをメッセージボックスに表示する という内容になると思います。

by C1000 » 2006年7月06日(木) 20:33

ハンドルを取得するとは、ウィンドウの識別子を変数などに受け取ることだと自分は思っています。

by ゲスト » 2006年7月06日(木) 20:28

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
	Dim id As Long
	id=GetDlgItem(hMainWnd,EditBox1)
	MessageBox(hMainWnd,id,"ハンドル",MB_OK)
     
	
End Sub
としたらどのようになるのですか?

ー-------------ー--------------------
ハンドルを取得するとはどういう意味ですか?

ありがとうございました

by SIKAMARU » 2006年7月06日(木) 19:57

貴重な資料ありがとうございました。
またトラブルがあれば質問させていただきます

by C1000 » 2006年7月06日(木) 19:55

hEditはLong型の変数なので10を代入することはできます。なのでメッセージボックスには10と表示されます。
上の場合はhMainWndにあるEditBox1のハンドルを取得しています。
SetWindowText(hEdit,"10")などとすればEditBox1に10と表示できます。

これはどういう意味になるんですか?>Konisiさん

by SIKAMARU » 2006年7月06日(木) 19:35

コード: 全て選択

Dim hEdit As Long
hEdit=GetDlgItem(hMainWnd,EditBox1)
このような場合はどうなるんですか?
また「hEdit」に数字などを代入してメッセージボックスに表示させることは、
できるのですか?

コード: 全て選択

Dim hEdit As Long
hEdit=GetDlgItem(hMainWnd,EditBox1)

hEdit=10
MessageBox(0,hEdit,"テスト",MB_OK)
どうか返答よろしくですm(_ _)m

by konisi » 2006年7月06日(木) 19:01

ハンドルとは、識別子みたいなものだと私は思っています。
例えば、今扱っているウインドウがA,Bと二つあり、Aのウインドウに丸を、Bのウインドウに四角を描画したいなら、AとBを区別する必要があるでしょう?

ハンドルについて・・・

by SIKAMARU » 2006年7月06日(木) 18:19

ハンドルについてよくわかりません><
だれか優しいかたおしえてください><

ページトップ