by NoWest » 2006年7月06日(木) 06:07
> 現在、リストボックスの内容を変更したときに、同じウィンドウにあるエディットボックス(ここでは2です)に説明書きをしたいと思ってコーディングしています。
> しかし、リストボックスの内容が変化しても、GetWindowText関数がちゃんと働かず、デバッグ命令で変数(ここではData)の中身を見てみると、何も入っていない・・・
> という事態になっています。
> コードを載せておきますので、間違っている点ありましたら、書込みお願いします。
> それと、これには、GetDlgItemTextStrという関数を使っていますが、これはイグトランスさんが作られた関数を利用しています。前に書いてあるものと思ってください。
> ウィンドウにはエディットボックスが2個と、リストボックスが1個、コンボボックスが2個設置してあります。
全体的な流れは間違っていませんがリストボックスから文字列を取得する場合、GetDlgItemTextStrは使えません。
同じようにString型を使用する関数ですがリストボックス用のものを用意しましたので使ってください。
ListBox用 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function GetListBoxStr(hLB As HWND, pos As Long, ByRef str As String) As Long
Dim Length As Long
Length = SendMessage(hLB,LB_GETTEXTLEN,pos,0)
str = ZeroString(Length)
If Length = 0 Then
GetListBoxStr = 0
Exit Function
End If
GetListBoxStr = SendMessage(hLB,LB_GETTEXT,pos,StrPtr(str))
SetDWord(StrPtr(str) - SizeOf (DWord), GetListBoxStr)
End Function
Function GetDlgLisBoxStr(hDlg As HWND, idLB As Long, pos As Long, ByRef str As String) As Long
GetDlgLisBoxStr = GetListBoxStr(GetDlgItem(hDlg, idLB), pos, str)
End Function
使い方 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Sub MainWnd_ListBox1_SelChange()
Dim pos As Long
pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0)
Dim Data As String
GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data)
SetWindowText(GetDlgItem(hMainWnd,EditBox2),Data)
End Sub
[quote]> 現在、リストボックスの内容を変更したときに、同じウィンドウにあるエディットボックス(ここでは2です)に説明書きをしたいと思ってコーディングしています。
> しかし、リストボックスの内容が変化しても、GetWindowText関数がちゃんと働かず、デバッグ命令で変数(ここではData)の中身を見てみると、何も入っていない・・・
> という事態になっています。
> コードを載せておきますので、間違っている点ありましたら、書込みお願いします。
> それと、これには、GetDlgItemTextStrという関数を使っていますが、これはイグトランスさんが作られた関数を利用しています。前に書いてあるものと思ってください。
> ウィンドウにはエディットボックスが2個と、リストボックスが1個、コンボボックスが2個設置してあります。
[/quote]
全体的な流れは間違っていませんがリストボックスから文字列を取得する場合、GetDlgItemTextStrは使えません。
同じようにString型を使用する関数ですがリストボックス用のものを用意しましたので使ってください。
[hide=ListBox用][code]Function GetListBoxStr(hLB As HWND, pos As Long, ByRef str As String) As Long
Dim Length As Long
Length = SendMessage(hLB,LB_GETTEXTLEN,pos,0)
str = ZeroString(Length)
If Length = 0 Then
GetListBoxStr = 0
Exit Function
End If
GetListBoxStr = SendMessage(hLB,LB_GETTEXT,pos,StrPtr(str))
SetDWord(StrPtr(str) - SizeOf (DWord), GetListBoxStr)
End Function
Function GetDlgLisBoxStr(hDlg As HWND, idLB As Long, pos As Long, ByRef str As String) As Long
GetDlgLisBoxStr = GetListBoxStr(GetDlgItem(hDlg, idLB), pos, str)
End Function
[/code][/hide]
[hide=使い方][code]Sub MainWnd_ListBox1_SelChange()
Dim pos As Long
pos = SendMessage(GetDlgItem(hMainWnd,ListBox1),LB_GETCURSEL,0,0)
Dim Data As String
GetListBoxStr(GetDlgItem(hMainWnd,ListBox1),pos,Data)
SetWindowText(GetDlgItem(hMainWnd,EditBox2),Data)
End Sub[/code][/hide]