リストボックス基本処理

  コントロールに何らかの処理を行なうには



SendMessage関数を使用します。

コントロールは基本的には全て「ウインドウ」なので、メッセージを送るという
Windowsプログラミング独特の考え方で処理を「命令」する事になります。

その「命令」の為のメッセージが各クラスに用意されており、リストボックスを
扱う上において基本的な三つのメッセージを以下に示します。


  • LB_ADDSTRING
  • LB_DELETESTRING
  • LB_INSERTSTRING

  • SendMessage 関数をそのまま使うのは、Windowsプログラミングを
    学ぶ上において非常に有効ですが、実際にコントロール処理を実践する
    場合、「windowsx.h」ヘッダファイルをインクルードしてマクロを使用する
    ほうが良いでしょう。



      行の追加



    ListBox_AddString は、行の最後に1行追加します。

      
    if( LOWORD(wParam) == IDOK ) {
    
    	ListBox_AddString( GetDlgItem( hDlg, IDC_LIST ), "追加" );
    
    	return TRUE;
    }
    
      

    ListBox_InsertString は、指定した位置に1行追加します。
    指定位置を -1 にすると、行の最後に1行追加します。

      
    if( LOWORD(wParam) == IDC_INSERT ) {
    
    	ListBox_InsertString( GetDlgItem( hDlg, IDC_LIST ), 3, "挿入" );
    
    	return TRUE;
    }
    
      



      行の削除

      
    LRESULT CALLBACK MyDialog( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
    {
    	RECT rTop;
    	RECT rMe;
    
    	switch( message ) {
    		case WM_INITDIALOG:
    			GetWindowRect( GetDesktopWindow(), &rTop );
    			GetWindowRect( hDlg, &rMe );
    			MoveWindow( hDlg
    				,rTop.right/2 - (rMe.right-rMe.left)/2
    				,rTop.bottom/2 - (rMe.bottom-rMe.top)/2
    				,(rMe.right-rMe.left)
    				,(rMe.bottom-rMe.top)
    				,TRUE
    			);
    
    			SetFocus( GetDlgItem( hDlg, IDCANCEL ) );
    			return FALSE;
    
    		case WM_COMMAND:
    			if( LOWORD(wParam) == IDOK ) {
    				ListBox_AddString( GetDlgItem( hDlg, IDC_LIST ), "追加" );
    				return TRUE;
    			}
    			if( LOWORD(wParam) == IDC_INSERT ) {
    				ListBox_InsertString( GetDlgItem( hDlg, IDC_LIST ), 3, "挿入" );
    				return TRUE;
    			}
    
    			if( LOWORD(wParam) == IDC_DELETE ) {
    				ListBox_DeleteString( GetDlgItem( hDlg, IDC_LIST ), 0 );
    				return TRUE;
    			}
    
    			if( LOWORD(wParam) == IDCANCEL ) {
    				EndDialog(hDlg, LOWORD(wParam));
    				return TRUE;
    			}
    			break;
    	}
    	return FALSE;
    }
    
      



      マクロ一覧

      
    #define ListBox_Enable(hwndCtl, fEnable) \
    	EnableWindow((hwndCtl), (fEnable))
    
    #define ListBox_GetCount(hwndCtl) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETCOUNT, 0L, 0L))
    
    #define ListBox_ResetContent(hwndCtl) \
    	((BOOL)(DWORD)SNDMSG((hwndCtl), LB_RESETCONTENT, 0L, 0L))
    
    #define ListBox_AddString(hwndCtl, lpsz) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(LPCTSTR)(lpsz)))
    
    #define ListBox_InsertString(hwndCtl, index, lpsz) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpsz)))
    
    #define ListBox_AddItemData(hwndCtl, data) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_ADDSTRING, 0L, (LPARAM)(data)))
    
    #define ListBox_InsertItemData(hwndCtl, index, data) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_INSERTSTRING, (WPARAM)(int)(index), (LPARAM)(data)))
    
    #define ListBox_DeleteString(hwndCtl, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_DELETESTRING, (WPARAM)(int)(index), 0L))
    
    #define ListBox_GetTextLen(hwndCtl, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETTEXTLEN, (WPARAM)(int)(index), 0L))
    
    #define ListBox_GetText(hwndCtl, index, lpszBuffer) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETTEXT, (WPARAM)(int)(index), (LPARAM)(LPCTSTR)(lpszBuffer)))
    
    #define ListBox_GetItemData(hwndCtl, index) \
    	((LRESULT)(DWORD)SNDMSG((hwndCtl), LB_GETITEMDATA, (WPARAM)(int)(index), 0L))
    
    #define ListBox_SetItemData(hwndCtl, index, data) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SETITEMDATA, (WPARAM)(int)(index), (LPARAM)(data)))
    
    #if (WINVER >= 0x030a)
    #define ListBox_FindString(hwndCtl, indexStart, lpszFind) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
    
    #define ListBox_FindItemData(hwndCtl, indexStart, data) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_FINDSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
    
    #define ListBox_SetSel(hwndCtl, fSelect, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SETSEL, (WPARAM)(BOOL)(fSelect), (LPARAM)(index)))
    
    #define ListBox_SelItemRange(hwndCtl, fSelect, first, last) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SELITEMRANGE, (WPARAM)(BOOL)(fSelect), MAKELPARAM((first), (last))))
    
    #define ListBox_GetCurSel(hwndCtl) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETCURSEL, 0L, 0L))
    
    #define ListBox_SetCurSel(hwndCtl, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SETCURSEL, (WPARAM)(int)(index), 0L))
    
    #define ListBox_SelectString(hwndCtl, indexStart, lpszFind) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
    
    #define ListBox_SelectItemData(hwndCtl, indexStart, data) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SELECTSTRING, (WPARAM)(int)(indexStart), (LPARAM)(data)))
    
    #define ListBox_GetSel(hwndCtl, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETSEL, (WPARAM)(int)(index), 0L))
    
    #define ListBox_GetSelCount(hwndCtl) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETSELCOUNT, 0L, 0L))
    
    #define ListBox_GetTopIndex(hwndCtl) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETTOPINDEX, 0L, 0L))
    
    #define ListBox_GetSelItems(hwndCtl, cItems, lpItems) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETSELITEMS, (WPARAM)(int)(cItems), (LPARAM)(int *)(lpItems)))
    
    #define ListBox_SetTopIndex(hwndCtl, indexTop) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SETTOPINDEX, (WPARAM)(int)(indexTop), 0L))
    
    #define ListBox_SetColumnWidth(hwndCtl, cxColumn) \
    	((void)SNDMSG((hwndCtl), LB_SETCOLUMNWIDTH, (WPARAM)(int)(cxColumn), 0L))
    
    #define ListBox_GetHorizontalExtent(hwndCtl) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETHORIZONTALEXTENT, 0L, 0L))
    
    #define ListBox_SetHorizontalExtent(hwndCtl, cxExtent) \
    	((void)SNDMSG((hwndCtl), LB_SETHORIZONTALEXTENT, (WPARAM)(int)(cxExtent), 0L))
    
    #define ListBox_SetTabStops(hwndCtl, cTabs, lpTabs) \
    	((BOOL)(DWORD)SNDMSG((hwndCtl), LB_SETTABSTOPS, (WPARAM)(int)(cTabs), (LPARAM)(int *)(lpTabs)))
    
    #define ListBox_GetItemRect(hwndCtl, index, lprc) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETITEMRECT, (WPARAM)(int)(index), (LPARAM)(RECT *)(lprc)))
    
    #define ListBox_SetCaretIndex(hwndCtl, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SETCARETINDEX, (WPARAM)(int)(index), 0L))
    
    #define ListBox_GetCaretIndex(hwndCtl) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETCARETINDEX, 0L, 0L))
    
    #define ListBox_FindStringExact(hwndCtl, indexStart, lpszFind) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_FINDSTRINGEXACT, (WPARAM)(int)(indexStart), (LPARAM)(LPCTSTR)(lpszFind)))
    
    #define ListBox_SetItemHeight(hwndCtl, index, cy) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_SETITEMHEIGHT, (WPARAM)(int)(index), MAKELPARAM((cy), 0)))
    
    #define ListBox_GetItemHeight(hwndCtl, index) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_GETITEMHEIGHT, (WPARAM)(int)(index), 0L))
    
    #endif  /* WINVER >= 0x030a */
    
    #define ListBox_Dir(hwndCtl, attrs, lpszFileSpec) \
    	((int)(DWORD)SNDMSG((hwndCtl), LB_DIR, (WPARAM)(UINT)(attrs), (LPARAM)(LPCTSTR)(lpszFileSpec)))
    
      










      infoboard   管理者用   
    このエントリーをはてなブックマークに追加





    フリーフォントWEBサービス
    SQLの窓WEBサービス

    SQLの窓フリーソフト

    素材

    一般WEBツールリンク

    SQLの窓

    フリーソフト

    JSライブラリ