リストボックスをコードで作成             <TOP>


CreateWindowEX 新しいウインドウ(コントロール)を作成

DestroyWindow ウインドウ(コントロール)の解放

SendMessage ウィンドウにメッセージを送信

 

 
'================================================================
'= リストボックスをコードで作成
'=     (CreateWindowEx3.bas)
'================================================================
#include "Windows.bi"

' ウィンドウ(コントロール)を作成
Declare Function Api_CreateWindowEx& Lib "user32" Alias "CreateWindowExA" (ByVal ExStyle&, ByVal ClassName$, ByVal WinName$, ByVal Style&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal Parent&, ByVal Menu&, ByVal Instance&, ByVal Param&)

' CreateWindowExの解放
Declare Function Api_DestroyWindow& Lib "user32" Alias "DestroyWindow" (ByVal hWnd&)

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

#define WS_BORDER &H800000              'フォームの枠線がある
#define WS_CHILD &H40000000             '親ウインドウを持つコントロール(子ウインドウ)を作成する
#define WS_CLIPSIBLINGS &H4000000       '兄弟関係にある子ウィンドウをクリップする
#define WS_EX_WINDOWEDGE &H100          'ウィンドウが盛り上がった縁の境界線を持つように指定
#define WS_EX_OVERLAPPEDWINDOW &H300    'WS_EX_WINDOWEDGEとWS_EX_CLIENTEDGEの組み合わせ
#define WS_VISIBLE &H10000000           '可視状態のウィンドウを作成する
#define WS_HSCROLL &H100000             '水平スクロールバーを持つウィンドウを作成する
#define WS_VSCROLL &H200000             '垂直スクロールバーを持つウィンドウを作成する
#define WS_EX_CLIENTEDGE &H200          '縁が沈んで見える境界線を持つウィンドウを指定
#define WS_THICKFRAME &H40000           'サイズ変更境界を持つウィンドウを作成する

#define BS_PUSHBUTTON &H0               'プッシュボタン
#define BS_AUTOCHECKBOX &H3             'チェックボックス
#define BS_AUTORADIOBUTTON &H9          'ラジオボタン
#define BS_GROUPBOX &H7                 'グループボックス

#define ES_AUTOHSCROLL &H80             '入力範囲を越えたら自動的に水平スクロールする
#define ES_AUTOVSCROLL &H40             '最後の行で自動的に垂直スクロールをする
#define ES_CENTER 1                     'テキストを水平方向で中央に表示する
#define ES_LEFT 0                       'テキストを左揃えする(デフォルト)
#define ES_LOWERCASE &H10               '入力文字を小文字にする
#define ES_MULTILINE 4                  '複数行エディットを作成する
#define ES_NOHIDESEL &H100              'フォーカスを失っても選択範囲を表示する
#define ES_NUMBER &H2000                '数値入力専用にする
#define ES_OEMCONVERT &H400             '入力文字をOEM文字セットに変換する
#define ES_PASSWORD &H20                '入力文字をデフォルトでは*にして表示する
#define ES_READONLY &H800               '読みとり専用にする(選択してコピーはできる)
#define ES_RIGHT 2                      'テキストを右揃えする
#define ES_UPPERCASE 8                  '入力文字を大文字にする
#define ES_WANTRETURN &H1000            '複数行エディットでEnterキーで改行する

#define CBS_SIMPLE &H1                  '単純なコンボボックス。リストは常にドロップダウンされている
#define CBS_DROPDOWN &H2                'CBS_SIMPLEで、リストはドロップダウンアイコンで表示する

#define LB_ADDFILE &H196                'リストボックス内のディレクトリリストにファイルを追加する
#define LB_ADDSTRING &H180              'リストボックスに文字列を追加する
#define LB_DELETESTRING &H182           'リストボックス中の文字列を削除する
#define LB_DIR &H18D                    'リストボックスにファイル名を追加する
#define LB_ERR (-1)                     'エラー
#define LB_FINDSTRING &H18F             '前方部分検索
#define LB_FINDSTRINGEXACT &H1A2        'リストボックスでプリフィックス文字を探す
#define LB_GETANCHORINDEX &H9D          'リストボックスのアンカー項目を取得する
#define LB_GETCARETINDEX &H19E          'フォーカス長方形を持つリストボックス項目のインデックスを取得する
#define LB_GETCOUNT &H18B               'リストボックスの項目数を取得する
#define LB_GETCURSEL &H188              'リストボックス内で選択された項目のインデックスを取得する
#define LB_GETHORIZONTALEXTENT &H193    'リストボックスの水平方向範囲を取得する
#define LB_GETITEMDATA &H199            'リストボックスの項目に関連付けられている値を取得する
#define LB_GETITEMHEIGHT &H1A1          'リストボックス内の項目の高さを取得する
#define LB_GETITEMRECT &H198            '項目を囲む境界長方形を取得する
#define LB_GETLOCALE &H1A6              '現在のリストボックスのロケールを取得する
#define LB_GETSEL &H187                 '項目の選択状態を取得する
#define LB_GETSELCOUNT &H190            'リストボックスで選択されている項目の数を取得する
#define LB_GETSELITEMS &H191            '選択されたリストボックス項目の項目番号をリストする
#define LB_GETTEXT &H189                'リストボックスから文字列を取得する
#define LB_GETTEXTLEN &H18A             'リストボックス内の文字列の長さを取得する
#define LB_GETTOPINDEX &H18E            'リストボックスの最初に表示されている(可視属性の)項目のインデックスを取得する
#define LB_INSERTSTRING &H181           '文字列をリストボックスに挿入する
#define LB_ITEMFROMPOINT &H1A9          '特定位置の再近接項目の取得
#define LB_RESETCONTENT &H184           'リストボックスからすべての項目を除去する
#define LB_SELECTSTRING &H18C           'リストボックス内の文字列を選択する
#define LB_SELITEMRANGE &H19B           'リストボックス内の連続する項目を選択する
#define LB_SETANCHORINDEX &H19C         'リストボックスにアンカー項目を設定する
#define LB_SETCARETINDEX &H19E          'リストボックス内にフォーカス長方形を設定する
#define LB_SETCOLUMNWIDTH &H195         'リストボックス内の列の幅を設定する
#define LB_SETCOUNT &H1A7               'リストボックスがデータを持たないときの項目数を設定する
#define LB_SETCURSEL &H186              'リストボックス内の文字列を選択する
#define LB_SETHORIZONTALEXTENT &H194    'リストボックスの水平範囲を設定する
#define LB_SETITEMDATA &H19A            'リストボックスの項目に値を関連付ける
#define LB_SETITEMHEIGHT &H1A0          'リストボックス項目の高さを設定
#define LB_SETLOCALE &H1A5              '現在のリストボックスのロケールを設定する
#define LB_SETSEL &H185                 '複数選択リストボックス内の文字列を選択する
#define LB_SETTABSTOPS &H192            'リストボックス内のタブストップを設定する
#define LB_SETTOPINDEX &H197            'リストボックスの項目が必ず表示状態になるようにする

#define LBS_DISABLENOSCROLL &H1000      'スクロールするほどの項目数がない場合、リストボックスの垂直方向のスクロールバーが無効状態で表示
#define LBS_EXTENDEDSEL &H800           '[Shift]キーとマウス、または特殊なキーの組み合わせで、複数のアイテムを選択できるようにする
#define LBS_HASSTRINGS &H40             'オーナードローリストボックスのアイテムが文字列であることを指定
#define LBS_MULTICOLUMN &H200           '水平にスクロールする複数列のリストボックスを指定します。LB_SETCOLUMNWIDTH メッセージで列の幅を設定
#define LBS_MULTIPLESEL &H8             '項目をクリックまたはダブルクリックして、複数の項目を選択できるようにする
#define LBS_NODATA &H2000               'データを持たないリストボックスを指定。リストボックス内の項目数が1000を超えるとき、このスタイルを指定
#define LBS_NOINTEGRALHEIGHT &H100      'リストボックスのサイズを指定します。デフォルトでは、アイテムが途中で切れないようにリストボックスのサ
#define LBS_NOREDRAW &H4                'アイテムが変更されてもリストボックスの外観を更新しないように指定
#define LBS_NOSEL &H4000L               '表示するだけで選択できないアイテムを持つリストボックスを指定
#define LBS_NOTIFY &H1                  'リストボックス内の文字列をクリック(またはダブルクリック)するたびに、親ウィンドウに入力メッセージを通知
#define LBS_OWNERDRAWFIXED &H10         '各アイテムの高さがすべて同じ、オーナードローリストボックスを作成
#define LBS_OWNERDRAWVARIABLE &H20      '各アイテムの高さがすべて可変の、オーナードローリストボックスを作成
#define LBS_SORT &H2                    'リストボックス内の文字列を自動的にソート
#define LBS_STANDARD &HA00003           '(LBS_NOTIFY Or LBS_SORT Or WS_VSCROLL Or WS_BORDER)スタイルの組み合わせ
#define LBS_USETABSTOPS &H80            'リストボックスが文字列を描画するときにタブ文字を認識し表示できるようにする
#define LBS_WANTKEYBOARDINPUT &H400     'リストボックスが入力フォーカスを持っているとき、ユーザーがキーを押すと、リストボックスのオーナーがWM

Var Shared Text1 As Object
Var Shared Button1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hLB As Long
    Var i As Integer
    Var Ret As Long

    'リストボックスを作成(ソートなし)
  hLB = Api_CreateWindowEx(WS_EX_CLIENTEDGE, "ListBox", "", WS_CHILD Or WS_VISIBLE Or LBS_NOTIFY Or WS_VSCROLL Or WS_BORDER, 10, 10, 210, 70, GethWnd, 0, 0, 0)

    'リストボックスを作成(ソートあり)
  'hLB = Api_CreateWindowEx(WS_EX_CLIENTEDGE, "ListBox", "", WS_CHILD Or WS_VISIBLE Or LBS_STANDARD, 10, 10, 210, 70, GethWnd, 0, 0, 0)
    '項目を設定
    For i = 1 To 20
        Ret = Api_SendMessage(hLB, LB_ADDSTRING, 0, Str$(i))
    Next

    '項目数を取得
    Ret = Api_SendMessage(hLB, LB_GETCOUNT, 0, 0)
  Text1.SetWindowText "項目数:" & Trim$(Str$(Ret))
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End