by 7 » 2006年6月08日(木) 15:42
雷電さん さんが書きました:何か間違っているのでしょうか?
選択されている項目が変わった時(CBN_SELCHANGEですね)、コンボボックスにCB_GETLBTEXTを送信して選択されている項目の文字列を取得すればいいのではないでしょうか。
GetWindowText()関数で取得できる文字列はコンボボックスのエディットコントロールに入力されている文字列なので...。
こんな感じでどうでしょう? [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function ComboBox_GetCurSel(ByVal hCombo As HWND) As Long
ComboBox_GetCurSel=SendMessage(hCombo,CB_GETCURSEL,0,0) As Long
End Function
Function ComboBox_GetLBTextLen(ByVal hCombo As HWND,ByVal nIndex As Long) As Long
ComboBox_GetLBTextLen=SendMessage(hCombo,CB_GETLBTEXTLEN,nIndex,0) As Long
End Function
Function ComboBox_GetLBText(ByVal hCombo As HWND,ByVal nIndex As Long,ByVal lpStringBuf As LPSTR) As Long
ComboBox_GetLBText=SendMessage(hCombo,CB_GETLBTEXT,nIndex,lpStringBuf As LPARAM) As Long
End Function
Sub MainWnd_CBN_SELCHANGE()
Dim hCombo As HWND
Dim lpStr As LPSTR
Dim nIndex As Long
hCombo=GetDlgItem(hMainWnd,ComboBox1)
nIndex=ComboBox_GetCurSel(hCombo)
If nIndex<>CB_ERR Then
lpStr=malloc(ComboBox_GetLBTextLen(hCombo,nIndex)+1)
ComboBox_GetLBText(hCombo,nIndex,lpStr)
Select Case 0
Case lstrcmp("test",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test")
Case lstrcmp("test1",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test1")
Case lstrcmp("test2",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test2")
Case lstrcmp("test3",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test3")
Case Else
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"error")
End Select
/*
' 別にlstrcmp()関数要らなかったという罠...。
Select Case MakeStr(lpStr)
Case "test"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test")
Case "test1"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test1")
Case "test2"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test2")
Case "test3"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test3")
Case Else
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"error")
End Select
*/
free(lpStr)
End If
End Sub
[quote="雷電さん"]何か間違っているのでしょうか?[/quote]
選択されている項目が変わった時(CBN_SELCHANGEですね)、コンボボックスにCB_GETLBTEXTを送信して選択されている項目の文字列を取得すればいいのではないでしょうか。
GetWindowText()関数で取得できる文字列はコンボボックスのエディットコントロールに入力されている文字列なので...。
[hide=こんな感じでどうでしょう?][code]Function ComboBox_GetCurSel(ByVal hCombo As HWND) As Long
ComboBox_GetCurSel=SendMessage(hCombo,CB_GETCURSEL,0,0) As Long
End Function
Function ComboBox_GetLBTextLen(ByVal hCombo As HWND,ByVal nIndex As Long) As Long
ComboBox_GetLBTextLen=SendMessage(hCombo,CB_GETLBTEXTLEN,nIndex,0) As Long
End Function
Function ComboBox_GetLBText(ByVal hCombo As HWND,ByVal nIndex As Long,ByVal lpStringBuf As LPSTR) As Long
ComboBox_GetLBText=SendMessage(hCombo,CB_GETLBTEXT,nIndex,lpStringBuf As LPARAM) As Long
End Function
Sub MainWnd_CBN_SELCHANGE()
Dim hCombo As HWND
Dim lpStr As LPSTR
Dim nIndex As Long
hCombo=GetDlgItem(hMainWnd,ComboBox1)
nIndex=ComboBox_GetCurSel(hCombo)
If nIndex<>CB_ERR Then
lpStr=malloc(ComboBox_GetLBTextLen(hCombo,nIndex)+1)
ComboBox_GetLBText(hCombo,nIndex,lpStr)
Select Case 0
Case lstrcmp("test",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test")
Case lstrcmp("test1",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test1")
Case lstrcmp("test2",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test2")
Case lstrcmp("test3",lpStr)
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test3")
Case Else
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"error")
End Select
/*
' 別にlstrcmp()関数要らなかったという罠...。
Select Case MakeStr(lpStr)
Case "test"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test")
Case "test1"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test1")
Case "test2"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test2")
Case "test3"
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"test3")
Case Else
SendMessage(List,LB_RESETCONTENT,0,0)
SendMessage(List,LB_ADDSTRING,0,"error")
End Select
*/
free(lpStr)
End If
End Sub[/code][/hide]