ハンドルについて・・・

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

ハンドルについて・・・

#1 投稿記事 by SIKAMARU »

ハンドルについてよくわかりません><
だれか優しいかたおしえてください><
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

ハンドルとは、識別子みたいなものだと私は思っています。
例えば、今扱っているウインドウがA,Bと二つあり、Aのウインドウに丸を、Bのウインドウに四角を描画したいなら、AとBを区別する必要があるでしょう?
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
SIKAMARU

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

#3 投稿記事 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
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#4 投稿記事 by C1000 »

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

ありがとうございました

#5 投稿記事 by SIKAMARU »

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

#6 投稿記事 by ゲスト »

コード: 全て選択

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

ー-------------ー--------------------
ハンドルを取得するとはどういう意味ですか?
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#7 投稿記事 by C1000 »

ハンドルを取得するとは、ウィンドウの識別子を変数などに受け取ることだと自分は思っています。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#8 投稿記事 by konisi »

CommandButton1がクリックされた時に、EditBox1のハンドルをメッセージボックスに表示する という内容になると思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
C1000
記事: 185
登録日時: 2006年5月07日(日) 17:16
お住まい: 宮城県
連絡する:

#9 投稿記事 by C1000 »

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

コード: 全て選択

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

返事

#10 投稿記事 by SIKAMARU »

コード: 全て選択

Sub MainWnd_CommandButton1_Click()
    Dim id As Long
    id=GetDlgItem(hMainWnd,EditBox1)
    MessageBox(hMainWnd,Str$(id),"ハンドル",MB_OK)
End Sub
というようにすると「数字」はメッセージボックスにランダムに表示されるのですが、
なぜでしょうか?
原因がわかりません。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

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

#11 投稿記事 by 7 »

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

コード: 全て選択

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

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

分かり辛いかなぁ...。
OverTaker
記事: 231
登録日時: 2005年5月31日(火) 17:14
お住まい: 茨城県

#12 投稿記事 by OverTaker »

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

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

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