リストボックス用グローバル関数

  リストボックス用基本関数



  
// *********************************************************
// リストボックスに文字列を追加
// 戻り値 : 追加された位置
// *********************************************************
int LboxListAdd( HWND hWnd, LPCTSTR pszBuffer )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_ADDSTRING,
		0L,
		(LPARAM)(LPCTSTR)pszBuffer
	);

	return ret;
}

// *********************************************************
// リストボックスに文字列を挿入
// 戻り値 : 挿入された位置
// *********************************************************
int LboxListInsert( HWND hWnd, int nIndex, LPCTSTR pszBuffer )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_INSERTSTRING,
		(WPARAM)nIndex,
		(LPARAM)(LPCTSTR)pszBuffer
	);

	return ret;
}

// *********************************************************
// リストボックスの指定行を更新
// 戻り値 : 挿入された位置
// 戻り値 : 失敗すると -1
// *********************************************************
int LboxListSetText( HWND hWnd, int nIndex, LPCTSTR pszBuffer )
{
	int ret;

	ret = LboxListDelete(
		hWnd,
		nIndex
	);
	if ( ret == -1 ) {
		return ret;
	}
	ret = LboxListInsert(
		hWnd,
		nIndex,
		pszBuffer
	);

	return ret;
}

// *********************************************************
// 選択した行の文字列を取得
// 戻り値 : 取得した文字列の長さ
// 戻り値 : エラーの場合は -1
// *********************************************************
int LboxListSelectedGetText( HWND hWnd, LPCTSTR pszBuffer, int nSize )
{
	int ret,nIndex;

	nIndex = LboxListSelectedRow( hWnd );
	if ( nIndex == -1 ) {
		return -1;
	}

	ret = LboxListGetText( hWnd, nIndex, pszBuffer, nSize );
	if ( ret == -1 ) {
		return -1;
	}

	return ret;
}

// *********************************************************
// 選択した行に文字列を設定
// 戻り値 : 挿入された位置
// 戻り値 : エラーの場合は -1
// *********************************************************
int LboxListSelectedSetText( HWND hWnd, LPCTSTR pszBuffer )
{
	int ret,nIndex;

	nIndex = LboxListSelectedRow( hWnd );
	if ( nIndex == -1 ) {
		return -1;
	}

	ret = LboxListSetText( hWnd, nIndex, pszBuffer );
	if ( ret == -1 ) {
		return -1;
	}

	return ret;
}

// *********************************************************
// 選択した行を削除
// 戻り値 : リスト内に残っている文字列の総数
// 戻り値 : エラーの場合は -1
// *********************************************************
int LboxListSelectedDelete( HWND hWnd )
{
	int ret,nIndex;

	nIndex = LboxListSelectedRow( hWnd );
	if ( nIndex == -1 ) {
		return -1;
	}

	ret = LboxListDelete( hWnd, nIndex );
	if ( ret == -1 ) {
		return -1;
	}

	return ret;
}

// *********************************************************
// リストボックスから文字列を取得
// 戻り値 : 取得した文字列の長さ
// 戻り値 : エラーの場合は -1
// *********************************************************
int LboxListGetText( HWND hWnd, int nIndex, LPCTSTR pszBuffer, int nSize )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_GETTEXTLEN,
		(WPARAM)nIndex,
		0L
	);
	if ( ret == LB_ERR ) {
		return -1;
	}
	if ( ret + 1 > nSize ) {
		return -1;
	}

	ret = (int)SendMessage(
		hWnd,
		LB_GETTEXT,
		(WPARAM)nIndex,
		(LPARAM)(LPCTSTR)pszBuffer
	);
	if ( ret == LB_ERR ) {
		return -1;
	}

	return ret;
}

// *********************************************************
// リストボックスの指定行を削除
// 戻り値 : リスト内に残っている文字列の総数
// 戻り値 : 存在しない行を指定すると -1
// *********************************************************
int LboxListDelete( HWND hWnd, int nIndex )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_DELETESTRING,
		(WPARAM)nIndex,
		0L
	);
	if ( ret == LB_ERR ) {
		ret = -1;
	}

	return ret;
}

// *********************************************************
// リストボックスの行数取得
// 戻り値 : 行数
// *********************************************************
int LboxListCount( HWND hWnd )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_GETCOUNT,
		0L,
		0L
	);

	return ret;
}

// *********************************************************
// リストボックスの選択された行の取得
// 戻り値 : 選択された行(選択されていない場合は -1 )
// *********************************************************
int LboxListSelectedRow( HWND hWnd )
{
	int ret;

	ret = (int)SendMessage(
		hWnd,
		LB_GETCURSEL,
		0L,
		0L
	);
	if ( ret == LB_ERR ) {
		ret = -1;
	}

	return ret;
}

// *********************************************************
// リストボックスのリセット
// 戻り値 : 無し
// *********************************************************
void LboxListReset( HWND hWnd )
{
	SendMessage(
		hWnd,
		LB_RESETCONTENT,
		0L,
		0L
	);
}
  



  開発支援 関数



  
// *********************************************************
// リストボックスにダンプ結果を表示
// *********************************************************
void LboxListDump( HWND hWnd, LPCTSTR pszBuffer, int nSize )
{
	int i,j,nRow,nPos;
	char szBuffer[80];

	nRow = nPos = 0;
	for( i = 0; i < nSize; i += 16 ) {
		for( j = i; j < i + 16; j++ ) {
			wsprintf( 
				szBuffer+(j-i)*3,
				"%02x ",
				0x000000ff & *(pszBuffer+nPos)
			);
			nPos++;
		}
		CharUpperBuff( szBuffer, 80 );
		LboxListInsert( hWnd, nRow, szBuffer );
		nRow++;
	}
}

// *********************************************************
// リストボックスにフォーマットした文字列を表示
// *********************************************************
void LboxListPrintf( HWND hWnd, LPSTR FormatString, ...  )
{
	va_list marker;
	char szBuffer[1024];

	char *szNewBuff = new char[lstrlen(FormatString)+10];
	lstrcpy( szNewBuff, FormatString );

	va_start(marker, FormatString);
	vsprintf(szBuffer, szNewBuff, marker);
	va_end(marker);              

	unsigned char *pszToken;
	int nRow = 0;

	pszToken = _mbstok(
		(unsigned char *)szBuffer,
		(const unsigned char *)"\n"
	);
	while( pszToken != NULL ) {
		LboxListInsert( hWnd, nRow, (LPCTSTR)pszToken );
		nRow++;
		pszToken = _mbstok( NULL, (const unsigned char *)"\n" );
	}

	delete [] szNewBuff;
}
  



  リストボックスに対する処理

  
// *********************************************************
// クリップボードにコピー
// 行の終わりには、改行コードを付加
// bSelect が true の場合は 選択した行のみコピーする
// 戻り値 : true 成功, false 失敗
// *********************************************************
BOOL LboxListCopyClipboard( HWND hWnd, BOOL bSelect )
{
	DWORD nSize;
	int nRows,i;
	BOOL bFlg;

	nSize = 0;
	nRows = LboxListCount( hWnd );
	for( i = 0; i < nRows; i++ ) {
		if ( bSelect ) {
			bFlg = (BOOL)SendMessage(
				hWnd,
				LB_GETSEL,
				(WPARAM)i,
				0L
			);
			if ( !bFlg ) {
				continue;
			}
		}
		nSize += (DWORD)SendMessage(
			hWnd,
			LB_GETTEXTLEN,
			(WPARAM)i,
			0L
		);
		nSize++;
	}

	HGLOBAL hGlobal;
	LPTSTR pMem;

	hGlobal = GlobalAlloc(GHND, nSize + 128 );
	if ( hGlobal == NULL ) {
		return false;
	}
	pMem = (LPTSTR)GlobalLock( hGlobal );
	if ( pMem == NULL ) {
		GlobalFree( hGlobal );
		return false;
	}
	
	*pMem = 0x00;

	for( i = 0; i < nRows; i++ ) {
		if ( bSelect ) {
			bFlg = (BOOL)SendMessage(
				hWnd,
				LB_GETSEL,
				(WPARAM)i,
				0L
			);
			if ( !bFlg ) {
				continue;
			}
		}
		SendMessage(
			hWnd,
			LB_GETTEXT,
			(WPARAM)i,
			(LPARAM)(LPCTSTR)pMem
		);
		lstrcat( pMem, "\n" );
		pMem = pMem + lstrlen( pMem );
	}

	GlobalUnlock( hGlobal );
	OpenClipboard( NULL );
	EmptyClipboard();
	SetClipboardData(CF_TEXT, hGlobal);
	CloseClipboard();

	return true;
}
  



  リストボックス全体のテキストサイズを NULL を含めて計算する

  
// *********************************************************
// リストボックス全体のテキストサイズを NULL を含めて計算する
// 戻り値 : テキストサイズ
// *********************************************************
int LboxListTextSize( HWND hWnd )
{
	int nTextSize,nCount,i;

	nTextSize = 0;
	nCount = LboxListCount( hWnd );
	for( i = 0; i < nCount; i++ ) {
		nTextSize += ListBox_GetTextLen( hWnd, i );
		nTextSize++;
	}
	nTextSize++;

	return nTextSize;

}
  










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ