|
|
#include <lightbox.h>
LboxListview *Lview;
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_INITDIALOG:
Lview = new LboxListview( GetDlgItem( hDlg, IDC_LIST1 ) );
return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDCANCEL ) {
EndDialog(hDlg, LOWORD(wParam));
delete Lview;
return TRUE;
}
if( LOWORD(wParam) == IDC_BUTTON1 ) {
Lview->AddColumn( LVCFMT_LEFT, 70, "コード" );
Lview->AddColumn( LVCFMT_LEFT, 150, "氏名" );
Lview->AddColumn( LVCFMT_LEFT, 150, "フリガナ" );
Lview->AddColumn( LVCFMT_LEFT, 100, "電話番号" );
}
break;
}
return FALSE;
}
| |
|
|
|
|
#include <lightbox.h>
LboxListview *Lview;
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_INITDIALOG:
Lview = new LboxListview( GetDlgItem( hDlg, IDC_LIST1 ) );
Lview->AddColumn( LVCFMT_LEFT, 70, "コード" );
Lview->AddColumn( LVCFMT_LEFT, 150, "氏名" );
Lview->AddColumn( LVCFMT_LEFT, 150, "フリガナ" );
Lview->AddColumn( LVCFMT_LEFT, 100, "電話番号" );
Lview->Grid();
return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDCANCEL ) {
EndDialog(hDlg, LOWORD(wParam));
delete Lview;
return TRUE;
}
// 行追加
if( LOWORD(wParam) == IDC_BUTTON1 ) {
Lview->AddRow();
Lview->AddRow();
Lview->AddRow();
Lview->AddRow();
}
// カレント行設定
if( LOWORD(wParam) == IDC_BUTTON2 ) {
Lview->SetCurrentRow( 1 );
}
// カラムテキストを設定
if( LOWORD(wParam) == IDC_BUTTON3 ) {
Lview->SetColumnText( 0, "0001" );
Lview->SetColumnText( 1, "山田太郎" );
Lview->SetColumnText( 2, "ヤマダタロウ" );
Lview->SetColumnText( 3, "123-456-7890" );
}
break;
}
return FALSE;
}
| |
|
|
|
エディットコントロールのフック無し
|
// *********************************************************
// 拡張コンストラクタ
// *********************************************************
LboxListview::LboxListview( HWND hList )
{
LboxListview::hWnd = hList;
LboxListview::hEdit = NULL;
LboxListview::hEdit =
LboxCreateEdit( hList, 50001 );
if ( LboxListview::hEdit != NULL ) {
HFONT hFont;
hFont = (HFONT)SendMessage( hList, WM_GETFONT, 0, 0 );
SendMessage( LboxListview::hEdit, WM_SETFONT, (WPARAM)hFont, 0 );
LboxMoveWindowTop( LboxListview::hEdit );
}
LboxListview::hMenu = NULL;
LboxListview::hFont = NULL;
}
| |
|
エディットコントロールのフック有り
|
// *********************************************************
// 拡張コンストラクタ
// *********************************************************
LboxListview::LboxListview( HWND hList, DWORD dwFlag )
{
LboxListview::hWnd = hList;
LboxListview::hEdit = NULL;
LboxListview::hEdit =
LboxCreateEdit( hList, 50001 );
if ( LboxListview::hEdit != NULL ) {
HFONT hFont;
hFont = (HFONT)SendMessage( hList, WM_GETFONT, 0, 0 );
SendMessage( LboxListview::hEdit, WM_SETFONT, (WPARAM)hFont, 0 );
LboxMoveWindowTop( LboxListview::hEdit );
}
if ( dwFlag & 0x00000001 ) {
hhk = SetWindowsHookEx(
WH_CALLWNDPROCRET,
CallWndRetProc,
NULL,
GetCurrentThreadId()
);
}
LboxListview::hMenu = NULL;
LboxListview::hFont = NULL;
}
| |
|
※ フックは、最初に作成するリストビューのみに使用します。二つ目以降のリストビューは、フック無しのほうを使用して下さい
|
#define LBOX_EN_LISTVIEW WM_USER + 1
// *********************************************************
// エディットコントロール用のフックプロシージャ
// *********************************************************
LRESULT CALLBACK CallWndRetProc(
int code,// フックコード
WPARAM wParam,// 削除フラグ
LPARAM lParam// メッセージが入った構造体へのポインタ
)
{
CWPRETSTRUCT *msg;
HWND hOwner;
HWND hListview;
msg = (CWPRETSTRUCT *)lParam;
if ( LOWORD(msg->wParam) == 50001 ) {
if ( msg->message == WM_COMMAND ) {
hListview = GetParent( (HWND)msg->lParam );
hOwner = GetParent( hListview );
if ( msg->message == WM_COMMAND ) {
SendMessage(
hOwner,
LBOX_EN_LISTVIEW,
msg->wParam,
msg->lParam
);
}
if ( HIWORD(msg->wParam) == EN_KILLFOCUS ) {
char *szBuffer = new char[512];
GetWindowText(
(HWND)msg->lParam,
szBuffer,
512
);
ListView_SetItemText(
hListview,
nEditRow,
nEditCol,
szBuffer
)
ShowWindow( (HWND)msg->lParam, SW_HIDE );
delete [] szBuffer;
}
}
}
return CallNextHookEx( hhk, code, wParam, lParam );
}
| |
|
|
|
|
// *********************************************************
// リストビューに列挿入
// 戻り値 : 無し
// nFmt 用定数
// LVCFMT_CENTER : 中央
// LVCFMT_LEFT : 左寄せ
// LVCFMT_RIGHT : 右寄せ
// *********************************************************
void LboxListview::InsertColumn(
int nCol, int nFmt, int nWidth, LPTSTR szTitle
)
{
#if CODING == 1
LVCOLUMNA col;
#else
LV_COLUMN col;
#endif
ZeroMemory( &col, sizeof( LV_COLUMN ) );
col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
col.fmt = nFmt;
col.cx = nWidth;
col.pszText = szTitle;
ListView_InsertColumn(hWnd, nCol, &col);
}
// *********************************************************
// リストビューに列追加
// 戻り値 : 無し
// *********************************************************
void LboxListview::AddColumn(
int nFmt, int nWidth, LPTSTR szTitle
)
{
int nCol;
#if CODING == 1
LVCOLUMNA col;
#else
LV_COLUMN col;
#endif
ZeroMemory( &col, sizeof( LV_COLUMN ) );
col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;
col.fmt = nFmt;
col.cx = nWidth;
col.pszText = szTitle;
nCol = LboxListview::ColumnCount( );
ListView_InsertColumn(hWnd, nCol, &col);
}
| |
|
|
|
|
// *********************************************************
// リストビューの行数取得
// 戻り値 : 行数
// *********************************************************
int LboxListview::Count( void )
{
return ListView_GetItemCount(
LboxListview::hWnd
);
}
// *********************************************************
// リストビューに行挿入
// 戻り値 : 挿入された行。エラーの場合は -1
// *********************************************************
int LboxListview::InsertRow( int nRow )
{
#if CODING == 1
LVITEMA row;
#else
LV_ITEM row;
#endif
ZeroMemory( &row, sizeof( LV_ITEM ) );
row.mask = LVIF_TEXT;
row.pszText = "";
row.iItem = nRow;
LboxListview::nCurrentRow = nRow;
return ListView_InsertItem(
LboxListview::hWnd,
&row
);
}
// *********************************************************
// リストビューに行追加
// 戻り値 : 追加された行。エラーの場合は -1
// *********************************************************
int LboxListview::AddRow( void )
{
int nLastRow;
nLastRow = LboxListview::Count();
LboxListview::nCurrentRow = nLastRow;
return LboxListview::InsertRow( nLastRow );
}
// *********************************************************
// リストビューの内部カレント行を設定
// 戻り値 : 無し
// *********************************************************
void LboxListview::SetCurrentRow( int nRow )
{
LboxListview::nCurrentRow = nRow;
}
// *********************************************************
// リストビューの行を削除
// 戻り値 : 無し
// *********************************************************
void LboxListview::DeleteRow( int nRow )
{
ListView_DeleteItem(
LboxListview::hWnd,
nRow
);
}
// *********************************************************
// リストビューの行を全て削除
// 戻り値 : 無し
// *********************************************************
void LboxListview::Reset( void )
{
ListView_DeleteAllItems(
LboxListview::hWnd
);
}
| |
|
|
|
|
// *********************************************************
// リストビューの列数取得
// 戻り値 : 列数
// *********************************************************
int LboxListview::ColumnCount( void )
{
int i;
#if CODING == 1
LVCOLUMNA test;
#else
LV_COLUMN test;
#endif
ZeroMemory( &test, sizeof( LV_COLUMN ) );
test.mask = LVCF_FMT;
i = 0;
while( 1 ) {
if ( !ListView_GetColumn( hWnd, i, &test ) ) {
break;
}
i++;
if ( i > 100 ) {
break;
}
}
return i;
}
// *********************************************************
// リストビューの列のテキストを設定
// 戻り値 : 無し
// *********************************************************
void LboxListview::SetColumnText( int nCol, LPTSTR szBuffer )
{
ListView_SetItemText(
LboxListview::hWnd,
LboxListview::nCurrentRow,
nCol,
szBuffer
)
}
// *********************************************************
// リストビューの列のテキストを取得
// 戻り値 : 無し
// *********************************************************
void LboxListview::GetColumnText( int nCol, LPTSTR szBuffer, int nSize )
{
ListView_GetItemText(
LboxListview::hWnd,
LboxListview::nCurrentRow,
nCol,
szBuffer,
nSize
)
}
// *********************************************************
// リストビューの列のタイトルを設定
// 戻り値 : 無し
// *********************************************************
void LboxListview::SetColumnTitle( int nCol, LPTSTR szBuffer )
{
#if CODING == 1
LVCOLUMNA col;
#else
LV_COLUMN col;
#endif
ZeroMemory( &col, sizeof( LV_COLUMN ) );
col.mask = LVCF_TEXT;
col.pszText = szBuffer;
ListView_SetColumn(
LboxListview::hWnd,
nCol,
&col
);
}
// *********************************************************
// リストビューの列のタイトルを取得
// 戻り値 : 無し
// *********************************************************
void LboxListview::GetColumnTitle( int nCol, LPTSTR szBuffer, int nSize )
{
#if CODING == 1
LVCOLUMNA col;
#else
LV_COLUMN col;
#endif
ZeroMemory( &col, sizeof( LV_COLUMN ) );
col.mask = LVCF_TEXT;
col.pszText = szBuffer;
col.cchTextMax = nSize;
ListView_GetColumn(
LboxListview::hWnd,
nCol,
&col
);
}
// *********************************************************
// リストビューの列の幅を設定
// 戻り値 : 無し
// *********************************************************
void LboxListview::SetColumnWidth( int nCol, int nSize )
{
ListView_SetColumnWidth(
LboxListview::hWnd,
nCol,
nSize
);
}
// *********************************************************
// リストビューの列の幅を取得
// 戻り値 : 列の幅
// *********************************************************
int LboxListview::GetColumnWidth( int nCol )
{
return ListView_GetColumnWidth(
LboxListview::hWnd,
nCol
);
}
// *********************************************************
// リストビューの列を削除
// 戻り値 : 無し
// *********************************************************
void LboxListview::DeleteColumn( int nCol )
{
ListView_DeleteColumn(
LboxListview::hWnd,
nCol
);
}
| |
|
|
|
|
// *********************************************************
// WM_NOTIFYメッセージを取得する
// 戻り値 : メッセージ
// *********************************************************
UINT LboxListview::Notify( LPARAM lParam )
{
LPNMLISTVIEW lpNmlv;
lpNmlv = (LPNMLISTVIEW)lParam;
LboxListview::nCurrentCol = lpNmlv->iSubItem;
LboxListview::nCurrentRow = lpNmlv->iItem;
LboxListview::Action = lpNmlv->hdr.code;
LboxListview::hCurrent = lpNmlv->hdr.hwndFrom;
LboxListview::nCurrentId = lpNmlv->hdr.idFrom;
if ( LboxListview::hCurrent == LboxListview::hWnd ) {
if ( LboxListview::Action == NM_RCLICK ) {
if ( LboxListview::hMenu != NULL ) {
HMENU hPopup;
hPopup = GetSubMenu(
LboxListview::hMenu,
LboxListview::nCurrentPopup
);
ClientToScreen(
LboxListview::hWnd,
&lpNmlv->ptAction
);
TrackPopupMenu(
hPopup,
TPM_LEFTALIGN | TPM_TOPALIGN,
lpNmlv->ptAction.x,
lpNmlv->ptAction.y,
0,
GetParent(LboxListview::hWnd),
NULL
);
}
}
}
return lpNmlv->hdr.code;
}
| |
|
以下使用例
|
case WM_NOTIFY:
Lview->Notify( lParam );
if ( Lview->nCurrentId == IDC_LIST3 ) {
switch( Lview->Action ) {
case NM_DBLCLK:
// データの無い場所をダブルクリックした場合
if ( Lview->nCurrentRow == -1 ) {
break;
}
// 第一カラムは処理しない
if ( Lview->nCurrentCol != 0 ) {
Lview->LoadColumnText(
Lview->nCurrentRow,
Lview->nCurrentCol
);
}
break;
}
}
break;
| |
|
以下ポップアップメニュー用
|
// *********************************************************
// ポップアップメニューの実装
// 戻り値 : 無し
// *********************************************************
void LboxListview::CreatePopup( DWORD mId, int nPos )
{
if ( LboxListview::hMenu != NULL ) {
DestroyMenu( LboxListview::hMenu );
}
LboxListview::hMenu =
LoadMenu(
LboxGetInstance( LboxListview::hWnd ),
MAKEINTRESOURCE(mId)
);
LboxListview::nCurrentPopup = nPos;
}
// *********************************************************
// ポップアップメニューの選択
// 戻り値 : 無し
// *********************************************************
void LboxListview::SelectPopup( int nPos )
{
LboxListview::nCurrentPopup = nPos;
}
| |
|
|
|
対象カラムデータをエディットコントロールへセットして表示させます
|
// *********************************************************
// リストビューのカラムデータをエディットコントロールにセット
// 戻り値 : 無し
// *********************************************************
void LboxListview::LoadColumnText( int nRow, int nCol )
{
char *szBuffer = new char[512];
ListView_GetItemText(
LboxListview::hWnd,
nRow,
nCol,
szBuffer,
512
);
SetWindowText( LboxListview::hEdit, szBuffer );
RECT rt;
ListView_GetSubItemRect(
LboxListview::hWnd,
nRow,
nCol,
LVIR_LABEL,
&rt
);
LboxMoveWindow(
LboxListview::hEdit,
rt.left,
rt.top
);
LboxChangeWindowSize(
LboxListview::hEdit,
rt.right - rt.left,
rt.bottom - rt.top + 3
);
ShowWindow( LboxListview::hEdit, SW_SHOW );
SetFocus( LboxListview::hEdit );
nEditRow = nRow;
nEditCol = nCol;
delete [] szBuffer;
}
| |
|
|
|
※ 情報構造体
|
typedef struct _LBOXLISTVIEWINFO {
int nCurVisibleTopIndex;
int nVisibleCountPerPage;
int nSelectedCount;
COLORREF cBkColor;
COLORREF cTextBkColor;
COLORREF cTextColor;
} LBOXLISTVIEWINFO;
| |
|
|
// *********************************************************
// 情報の取得
// 戻り値 : 情報構造体メンバ変数へのポインタ
// *********************************************************
LBOXLISTVIEWINFO *LboxListview::GetInfo( void )
{
LboxListview::llvi.nCurVisibleTopIndex =
ListView_GetTopIndex( LboxListview::hWnd );
LboxListview::llvi.nVisibleCountPerPage =
ListView_GetCountPerPage( LboxListview::hWnd );
LboxListview::llvi.nSelectedCount =
ListView_GetSelectedCount( LboxListview::hWnd );
LboxListview::llvi.cBkColor =
ListView_GetBkColor( LboxListview::hWnd );
LboxListview::llvi.cTextBkColor =
ListView_GetTextBkColor( LboxListview::hWnd );
LboxListview::llvi.cTextColor =
ListView_GetTextColor( LboxListview::hWnd );
return &(LboxListview::llvi);
}
// *********************************************************
// 状態のチェック
// 戻り値 : true その状態である, false その状態でない
// LVIS_FOCUSED : フォーカスがある
// LVIS_SELECTED : 選択されている
// *********************************************************
BOOL LboxListview::IsState( int nRow, UINT uFlg )
{
UINT uRet;
uRet = ListView_GetItemState(
LboxListview::hWnd,
nRow,
uFlg
);
if ( uRet & uFlg ) {
return true;
}
return false;
}
| |
|
|
|
|
// *********************************************************
// リストビューの行と列の初期化
// 戻り値 : 無し
// *********************************************************
void LboxListview::Initialize( void )
{
LboxListview::Reset();
int i,nCols;
nCols = LboxListview::ColumnCount();
for( i = 0; i < nCols; i++ ) {
LboxListview::DeleteColumn( 0 );
}
}
| |
|
|
// *********************************************************
// 行の検索
// 戻り値 : true 行発見, false 対象行無し
// 初回は、nRow に -1 を渡す
// *********************************************************
BOOL LboxListview::FindNextRow( int *nRow )
{
int nRows;
nRows = LboxListview::Count();
if ( (*nRow) + 1 < nRows ) {
(*nRow)++;
LboxListview::nCurrentRow = (*nRow);
return true;
}
return false;
}
// *********************************************************
// 選択された行の検索
// 戻り値 : true 行発見, false 対象行無し
// 初回は、nRow に -1 を渡す
// *********************************************************
BOOL LboxListview::FindNextSelectedRow( int *nRow )
{
int nRows,i;
nRows = LboxListview::Count();
for( i = (*nRow) + 1; i < nRows; i++ ) {
if ( LboxListview::IsState( i, LVIS_SELECTED ) ) {
*nRow = i;
LboxListview::nCurrentRow = i;
return true;
}
}
return false;
}
| |
|
以下 FindNextSelectedRow の使用例
|
int nRow;
nRow = -1;
while( Lview->FindNextSelectedRow( &nRow ) ) {
Lview->SetColumnText( 4, "*** OK ***" );
}
| |
|
|
// *********************************************************
// 行の選択状態の変更
// 戻り値 : 無し
// bFlg が true ならば選択、false ならば選択解除
// *********************************************************
void LboxListview::SetSelect( int nRow, BOOL bFlg )
{
if ( bFlg ) {
ListView_SetItemState(
LboxListview::hWnd,
nRow,
LVIS_SELECTED,
LVIS_SELECTED
);
}
else {
ListView_SetItemState(
LboxListview::hWnd,
nRow,
0,
LVIS_SELECTED
);
}
}
| |
|
|
char *szTag1 = "<TABLE border=1>";
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;
}
| |
|
|
// *********************************************************
// カラム幅とデータ幅との調整
// 戻り値 : 無し
// *********************************************************
void LboxListview::Fit( void )
{
int nStartRow,nEndRow,nCols,i,j;
int nLen,nMax;
char *szBuffer = new char[MAX_PATH];
nCols = LboxListview::Count();
LboxListview::GetInfo();
nStartRow = LboxListview::llvi.nCurVisibleTopIndex;
nEndRow = nStartRow + LboxListview::llvi.nVisibleCountPerPage;
for( i = 0; i < nCols; i++ ) {
LboxListview::GetColumnTitle( i, szBuffer, MAX_PATH );
nMax = ListView_GetStringWidth(
LboxListview::hWnd,
szBuffer
);
for( j = nStartRow; j <= nEndRow; j++ ) {
LboxListview::SetCurrentRow( j );
LboxListview::GetColumnText( i, szBuffer, MAX_PATH );
nLen = ListView_GetStringWidth(
LboxListview::hWnd,
szBuffer
);
if ( nLen > nMax ) {
nMax = nLen;
}
}
nMax += 14;
LboxListview::SetColumnWidth( i, nMax );
}
delete [] szBuffer;
}
| |
|
|
|
|
// *********************************************************
// フォントのセット
// 戻り値 : true 成功, false 失敗
// *********************************************************
BOOL LboxListview::SetFont( int nType, int nSize, BOOL bBold )
{
if ( LboxListview::hFont != NULL ) {
DeleteObject( LboxListview::hFont );
}
LboxListview::hFont = LboxCreateFont(
nType,
nSize,
bBold
);
if ( LboxListview::hFont == NULL ) {
return false;
}
SendMessage(
LboxListview::hWnd,
WM_SETFONT,
(WPARAM)(LboxListview::hFont),
MAKELPARAM(true, 0)
);
return true;
}
// *********************************************************
// 全ての行の選択状態の変更
// 戻り値 : 無し
// bFlg が true ならば選択、false ならば選択解除
// *********************************************************
void LboxListview::SetSelectAll( BOOL bFlg )
{
int nRow;
nRow = -1;
while( LboxListview::FindNextRow( &nRow ) ) {
LboxListview::SetSelect( nRow, bFlg );
}
}
// *********************************************************
// カラムヘッダーの表示・非表示
// 戻り値 : 無し
// *********************************************************
void LboxListview::ShowColumnHeader( BOOL bShow )
{
if ( bShow ) {
LboxRemoveWindowStyle(
LboxListview::hWnd,
LVS_NOCOLUMNHEADER
);
}
else {
LboxAddWindowStyle(
LboxListview::hWnd,
LVS_NOCOLUMNHEADER
);
}
}
// *********************************************************
// 指定行、指定カラムを表示位置にスクロール
// 戻り値 : 無し
// *********************************************************
void LboxListview::Scroll( int nRow, int nCol )
{
POINT pt;
int i,nWidth;
RECT rt;
ListView_GetItemPosition(
LboxListview::hWnd,
nRow-1,
&pt
);
ListView_GetViewRect(
LboxListview::hWnd,
&rt
);
nWidth = -1024;
ListView_Scroll(
LboxListview::hWnd,
-1024,
0
);
nWidth = 0;
for( i = 0; i < nCol; i++ ) {
nWidth += LboxListview::GetColumnWidth( i );
}
ListView_Scroll(
LboxListview::hWnd,
nWidth,
pt.y
);
}
| |
|
|
|