|
|
// *********************************************************
// リストボックスに文字列を追加
// 戻り値 : 追加された位置
// *********************************************************
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 を含めて計算する |
|