ページ 1 / 1
ハンドルについて・・・
Posted: 2006年7月06日(木) 18:19
by SIKAMARU
ハンドルについてよくわかりません><
だれか優しいかたおしえてください><
Posted: 2006年7月06日(木) 19:01
by konisi
ハンドルとは、識別子みたいなものだと私は思っています。
例えば、今扱っているウインドウがA,Bと二つあり、Aのウインドウに丸を、Bのウインドウに四角を描画したいなら、AとBを区別する必要があるでしょう?
これはどういう意味になるんですか?>Konisiさん
Posted: 2006年7月06日(木) 19:35
by SIKAMARU
コード: 全て選択
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
Posted: 2006年7月06日(木) 19:55
by C1000
hEditはLong型の変数なので10を代入することはできます。なのでメッセージボックスには10と表示されます。
上の場合はhMainWndにあるEditBox1のハンドルを取得しています。
SetWindowText(hEdit,"10")などとすればEditBox1に10と表示できます。
ありがとうございました
Posted: 2006年7月06日(木) 19:57
by SIKAMARU
貴重な資料ありがとうございました。
またトラブルがあれば質問させていただきます
Posted: 2006年7月06日(木) 20:28
by ゲスト
コード: 全て選択
Sub MainWnd_CommandButton1_Click()
Dim id As Long
id=GetDlgItem(hMainWnd,EditBox1)
MessageBox(hMainWnd,id,"ハンドル",MB_OK)
End Sub
としたらどのようになるのですか?
ー-------------ー--------------------
ハンドルを取得するとはどういう意味ですか?
Posted: 2006年7月06日(木) 20:33
by C1000
ハンドルを取得するとは、ウィンドウの識別子を変数などに受け取ることだと自分は思っています。
Posted: 2006年7月06日(木) 20:57
by konisi
CommandButton1がクリックされた時に、EditBox1のハンドルをメッセージボックスに表示する という内容になると思います。
Posted: 2006年7月06日(木) 21:07
by C1000
でも、こうしないとアクセス違反になってしまうのでは?
コード: 全て選択
Sub MainWnd_CommandButton1_Click()
Dim id As Long
id=GetDlgItem(hMainWnd,EditBox1)
MessageBox(hMainWnd,Str$(id),"ハンドル",MB_OK)
End Sub
返事
Posted: 2006年7月06日(木) 21:32
by SIKAMARU
コード: 全て選択
Sub MainWnd_CommandButton1_Click()
Dim id As Long
id=GetDlgItem(hMainWnd,EditBox1)
MessageBox(hMainWnd,Str$(id),"ハンドル",MB_OK)
End Sub
というようにすると「数字」はメッセージボックスにランダムに表示されるのですが、
なぜでしょうか?
原因がわかりません。
Re: ハンドルについて・・・
Posted: 2006年7月06日(木) 21:37
by 7
ハンドル、
コントロールに割り当てられた識別番号、って感じですかねぇ...。
コード: 全て選択
Dim hEdit As HWND
hEdit=GetDlgItem(hMainWnd,EditBox1)
というコードを書いた場合、hMainWnd っていうウィンドウに含まれる、 EditBox1 っていうエディットコントロールの識別番号を hEdit に代入する、といった動きになっています。
で、この識別番号は可変性のものでプログラムを実行する度に変わってしまいます。
hMainWnd というウィンドウに含まれる EditBox1 であることに変わりはないんですけどね。
あ。 hMainWnd っていうのもハンドルで、
ウィンドウに割り当てられた識別番号になります。
コントロールもウィンドウなので、コントロールとウィンドウは別として考えなくてもいいです。
分かり辛いかなぁ...。
Posted: 2006年7月06日(木) 22:27
by OverTaker
補足で追記させていただきます。
7さん さんが書きました:コントロールに割り当てられた識別番号
誰に割り当てられるのかというと、Windowsです。
私たちがウィンドウを生成するときにはWindowsに「ウィンドウを作ってください」と頼みます。(ActiveBasicのRADを使っている場合、この辺はActiveBasicがやってくれます)するとWindowsがウィンドウを作ってくれて、そのウィンドウを示す番号を教えてくれます。以後、ウィンドウに操作したいときはこの番号を使用して「Windowsさん、この番号のウィンドウに文字を設定してくれよ」と頼んだりするわけです。その番号がハンドルということになります。
ちなみに、ID(EditBox1とか)は、こちらでウィンドウにつけた名前のようなものです。Windowsにいきなり「あなたは番号10283(実際こうではありませんが)のウィンドウを作りましたから使ってください」と言われても、こんな半端の番号では扱いずらいですよね。そこでこっちはこっちで、番号10283のウィンドウは"EditBox1"と命名しよう。とするわけです。
RADを使う場合、私たちはIDを使っています。それではWindowsに頼めませんのでGetDlgItem()でIDからハンドルを取得するわけです。
ちなみに、ハンドルはWindowsのいたるところで使われます。ウィンドウに限った話ではありません。
説明大丈夫かなぁ~、、、多少語弊のあるような説明をしたところもありますが、ハンドルを理解できたころにはそれも問題なくなると思います。