TITLE:  [150] Re: リストビューへのアイテムの追加
DATE : 2001-10-25 23:34:00
--------------------------------------------------
a-murata さん、お返事有り難うございます。

リストビューの所わかりました。
メニューの項目の追加と同じでしたね。
# 僕のホームページのeVBのところで説明していたのにねぇ・・・

>  やはり標準では行全体の選択というのは無理なんでしょうかね。でもQMi
>  lとか、そのほかのリストビュー的なコントロールを使うものについては、
>  できてしまっているようですし、やはりeVBようのコントロールの問題か
>  もしれませんね。

APIのSendMessageを使ってリストビューコントロールに
LVS_EX_FULLROWSELECTを設定できれば、1行選択できるのだそうです。
しかし、SendMessageの第1引数にリストビューコントロールのハンドル
(hWnd)が必要なのですけれど、それがどうも取得できないようです。

この問題が解決できれば、きっとうまくいくはずですけれど、eVBのヘル
プにはHWndというプロパティーが載っているのに、ListViewのプロパティ
には、これが存在しないのですよね。

どうやると、コントロールのハンドルが取得できるのでしょうかね?

と思って、ネットを歩いていたら見つけました。

<ソースの先頭あたりに置いてください>
Const LVM_FIRST = &H1000
Const LVM_SETEXTENDEDLISTVIEWSTYLE = &H1036
Const LVM_GETEXTENDEDLISTVIEWSTYLE = &H1037
Const LVS_EX_FULLROWSELECT = &H20

Public Declare Function GetFocus Lib "Coredll" () As Long

Public Declare Function SendMessage Lib "Coredll" Alias 
"SendMessageW" (ByVal hwnd As Long, ByVal wMsg As Long, 
ByVal wParam As Long, lParam As Long) As Long

Public LVM_Style As Long
Public LVM_Handle As Long

<そして、リストビューのGotFocusハンドラで次のように書きます>
Private Sub ListViewCtrl1_GotFocus()
  On Error Resume Next

  'リストビューのハンドル取得 すばらしい!!
  LVM_Handle = GetFocus

  LVM_Style = SendMessage(LVM_Handle, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0)
  LVM_Style = LVM_Style Or LVS_EX_FULLROWSELECT
  Call SendMessage(LVM_Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVM_Style)

End Sub

しかし、僕の所ではこれを実行するとチェックボックスが左に着くだけで、
行選択にはなりません。もう一歩です。