|
char *szTag1 = "<TABLE >";
char *szTag2 = "<TR>";
char *szTag3 = "</TR>";
char *szTag4 = "<TD>";
char *szTag5 = "</TD>";
char *szTag6 = "</TABLE>";
char *szTag7 = "<TH>";
char *szTag8 = "</TH>";
// *********************************************************
// クリップボードにコピー
// 行の終わりには、改行コードを付加
// bSelect が true の場合は 選択した行のみコピーする
// bTitle が true の場合は、タイトルもコピーする
// nType
// 0 : タブ
// 1 : カンマ(CSV)
// 3 : \
// 4 : HTML テーブルタグ
// 戻り値 : true 成功, false 失敗
// *********************************************************
BOOL LboxListview::CopyClipboard( BOOL bSelect, BOOL bTitle, int nType )
{
DWORD nRows,nCols;
DWORD nSize;
DWORD i;
char *szBuffer = new char[MAX_PATH];
if ( nType < 0 || nType > 3 ) {
return false;
}
char delim[3][4];
lstrcpy( delim[0], "\t" );
lstrcpy( delim[1], "," );
lstrcpy( delim[2], "\\" );
nRows = LboxListview::Count();
nCols = LboxListview::ColumnCount();
nSize = 0;
if ( bTitle ) {
for( i = 0; i < nCols; i++ ) {
LboxListview::GetColumnTitle(
i,
szBuffer,
MAX_PATH
);
nSize += lstrlen( szBuffer );
nSize++;
if ( nType == 3 ) {
nSize += lstrlen( szTag7 );
nSize += lstrlen( szTag8 );
}
}
nSize++;
if ( nType == 3 ) {
nSize += lstrlen( szTag2 );
nSize += lstrlen( szTag3 );
}
}
int nRow;
nRow = -1;
while( LboxListview::FindNextRow( &nRow ) ) {
if ( bSelect ) {
if ( false == LboxListview::IsState(
nRow,
LVIS_SELECTED
) ) {
continue;
}
}
for( i = 0; i < nCols; i++ ) {
LboxListview::GetColumnText(
i,
szBuffer,
MAX_PATH
);
nSize += lstrlen( szBuffer );
nSize++;
if ( nType == 3 ) {
nSize += lstrlen( szTag4 );
nSize += lstrlen( szTag5 );
}
}
nSize++;
if ( nType == 3 ) {
nSize += lstrlen( szTag2 );
nSize += lstrlen( szTag3 );
}
}
if ( nType == 3 ) {
nSize += lstrlen( szTag1 );
nSize += lstrlen( szTag6 );
}
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;
if ( nType == 3 ) {
lstrcat( pMem, szTag1 );
}
if ( bTitle ) {
if ( nType == 3 ) {
lstrcat( pMem, szTag2 );
}
for( i = 0; i < nCols; i++ ) {
if ( nType == 3 ) {
lstrcat( pMem, szTag7 );
}
else {
if ( i != 0 ) {
lstrcat( pMem, delim[nType] );
}
}
LboxListview::GetColumnTitle(
i,
szBuffer,
MAX_PATH
);
lstrcat( pMem, szBuffer );
if ( nType == 3 ) {
lstrcat( pMem, szTag8 );
}
}
if ( nType == 3 ) {
lstrcat( pMem, szTag3 );
}
lstrcat( pMem, "\n" );
pMem += lstrlen( pMem );;
}
nRow = -1;
while( LboxListview::FindNextRow( &nRow ) ) {
if ( bSelect ) {
if ( false == LboxListview::IsState(
nRow,
LVIS_SELECTED
) ) {
continue;
}
}
if ( nType == 3 ) {
lstrcat( pMem, szTag2 );
}
for( i = 0; i < nCols; i++ ) {
if ( nType == 3 ) {
lstrcat( pMem, szTag4 );
}
else {
if ( i != 0 ) {
lstrcat( pMem, delim[nType] );
}
}
LboxListview::GetColumnText(
i,
szBuffer,
MAX_PATH
);
lstrcat( pMem, szBuffer );
if ( nType == 3 ) {
lstrcat( pMem, szTag5 );
}
}
if ( nType == 3 ) {
lstrcat( pMem, szTag3 );
}
lstrcat( pMem, "\n" );
pMem += lstrlen( pMem );;
}
if ( nType == 3 ) {
lstrcat( pMem, szTag6 );
}
GlobalUnlock( hGlobal );
OpenClipboard( NULL );
EmptyClipboard();
SetClipboardData(CF_TEXT, hGlobal);
CloseClipboard();
delete [] szBuffer;
return true;
}
| |