|
// *********************************************************
// クリップボードにコピー
// 行の終わりには、改行コードを付加
// 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;
}
| |