📄 cdlgfavorite.cpp
字号:
rc.left = rc.top = rc.right = rc.bottom = 0;
::GetWindowRect( hwndBaseList, &rc );
po.x = rc.left;
po.y = rc.top;
::ScreenToClient( hwndDlg, &po );
rc.left = po.x;
rc.top = po.y;
po.x = rc.right;
po.y = rc.bottom;
::ScreenToClient( hwndDlg, &po );
rc.right = po.x;
rc.bottom = po.y;
}
for( nTab = 0; NULL != (pRecent = p_favorite_info[nTab].m_pRecent); nTab++ )
{
hwndList = GetDlgItem( hwndDlg, p_favorite_info[nTab].m_nId );
::MoveWindow( hwndList, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, FALSE );
::ShowWindow( hwndList, SW_HIDE );
col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
col.fmt = LVCFMT_LEFT;
col.cx = (rc.right - rc.left) * 16 / 100;
col.pszText = "お気に入り";
col.iSubItem = 0;
ListView_InsertColumn( hwndList, 0, &col );
col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
col.fmt = LVCFMT_LEFT;
col.cx = (rc.right - rc.left) * 79 / 100;
col.pszText = p_favorite_info[nTab].m_pszCaption;
col.iSubItem = 1;
ListView_InsertColumn( hwndList, 1, &col );
/* 行選択 */
lngStyle = ::SendMessage( hwndList, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0 );
lngStyle |= LVS_EX_FULLROWSELECT;
if( p_favorite_info[nTab].m_bHaveFavorite ) lngStyle |= LVS_EX_CHECKBOXES;
::SendMessage( hwndList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, lngStyle );
/* タブ項目追加 */
tcitem.mask = TCIF_TEXT;
tcitem.pszText = p_favorite_info[nTab].m_pszCaption;
TabCtrl_InsertItem( hwndTab, nTab, &tcitem );
}
hwndList = ::GetDlgItem( hwndDlg, p_favorite_info[m_nCurrentTab].m_nId );
::ShowWindow( hwndList, SW_SHOW );
TabCtrl_SetCurSel( hwndTab, m_nCurrentTab );
//ChangeSlider( m_nCurrentTab );
/* 基底クラスメンバ */
return CDialog::OnInitDialog( m_hWnd, wParam, lParam );
}
BOOL CDlgFavorite::OnBnClicked( int wID )
{
switch( wID )
{
case IDC_BUTTON_HELP:
/* ヘルプ */
::WinHelp( m_hWnd, m_szHelpFile, HELP_CONTEXT, ::FuncID_To_HelpContextID( F_FAVORITE ) );
return TRUE;
case IDOK:
/* ダイアログデータの取得 */
::EndDialog( m_hWnd, (BOOL)GetData() );
return TRUE;
case IDCANCEL:
::EndDialog( m_hWnd, FALSE );
return TRUE;
case IDC_BUTTON_CLEAR: //履歴のクリア
{
::SetDlgItemText( m_hWnd, IDC_STATIC_FAVORITE_MSG, "" );
HWND hwndTab;
int nIndex;
hwndTab = ::GetDlgItem( m_hWnd, IDC_TAB_FAVORITE );
nIndex = TabCtrl_GetCurSel( hwndTab );
if( -1 != nIndex )
{
int nRet;
if( p_favorite_info[nIndex].m_bHaveFavorite )
{
nRet = ::MYMESSAGEBOX( m_hWnd,
MB_YESNOCANCEL | MB_ICONQUESTION, GSTR_APPNAME,
"最近使った%sの履歴を削除します。\n\nよろしいですか?\n\n"
"「はい」\tすべて削除します。\n"
"「いいえ」\tお気に入り以外を削除します。\n",
p_favorite_info[nIndex].m_pszCaption );
}
else
{
nRet = ::MYMESSAGEBOX( m_hWnd,
MB_OKCANCEL | MB_ICONQUESTION, GSTR_APPNAME,
"最近使った%sの履歴を削除します。\n\nよろしいですか?\n",
p_favorite_info[nIndex].m_pszCaption );
}
CRecent *pRecent;
pRecent = p_favorite_info[nIndex].m_pRecent;
switch( nRet )
{
case IDYES:
case IDOK:
if( pRecent ) pRecent->DeleteAllItem();
::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
"最近使った%sの履歴を削除しました。",
p_favorite_info[nIndex].m_pszCaption );
break;
case IDNO:
if( pRecent )
{
HWND hwndList = ::GetDlgItem( m_hWnd, p_favorite_info[nIndex].m_nId );
for( int i = pRecent->GetItemCount() - 1; i >= 0; i-- )
{
if( ! ListView_GetCheckState( hwndList, i ) ){
pRecent->DeleteItem( i );
}
else {
pRecent->SetFavorite( i );
}
}
}
::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
"最近使った%sの履歴(お気に入り以外)を削除しました。",
p_favorite_info[nIndex].m_pszCaption );
break;
case IDCANCEL:
default:
break;
}
}
}
return TRUE;
}
/* 基底クラスメンバ */
return CDialog::OnBnClicked( wID );
}
BOOL CDlgFavorite::OnNotify( WPARAM wParam, LPARAM lParam )
{
LPNMHDR lpnmhdr;
HWND hwndTab;
HWND hwndList;
int nIndex;
hwndTab = ::GetDlgItem( m_hWnd, IDC_TAB_FAVORITE );
lpnmhdr = (LPNMHDR) lParam;
if( lpnmhdr->hwndFrom == hwndTab )
{
switch( lpnmhdr->code )
{
case TCN_SELCHANGE:
::SetDlgItemText( m_hWnd, IDC_STATIC_FAVORITE_MSG, "" );
nIndex = TabCtrl_GetCurSel( hwndTab );
if( -1 != nIndex )
{
//現在表示中のリストを隠す。
hwndList = GetDlgItem( m_hWnd, p_favorite_info[m_nCurrentTab].m_nId );
::ShowWindow( hwndList, SW_HIDE );
//新しく表示する。
hwndList = GetDlgItem( m_hWnd, p_favorite_info[nIndex].m_nId );
::ShowWindow( hwndList, SW_SHOW );
::SetFocus( hwndList );
m_nCurrentTab = nIndex;
//ChangeSlider( nIndex );
}
return TRUE;
//break;
}
}
/* 基底クラスメンバ */
return CDialog::OnNotify( wParam, lParam );
}
BOOL CDlgFavorite::OnActivate( WPARAM wParam, LPARAM lParam )
{
bool bret;
switch( LOWORD( wParam ) )
{
case WA_ACTIVE:
case WA_CLICKACTIVE:
bret = RefreshList();
//if( bret == true )
//{
// ::MYMESSAGEBOX( m_hWnd,
// MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
// "リストが更新されました。\n設定中の情報をクリアし再表示しました。" );
//}
::SetDlgItemText( m_hWnd, IDC_STATIC_FAVORITE_MSG, m_szMsg );
return TRUE;
//break;
case WA_INACTIVE:
default:
break;
}
/* 基底クラスメンバ */
return CDialog::OnActivate( wParam, lParam );
}
LPVOID CDlgFavorite::GetHelpIdTable( void )
{
return (LPVOID)p_helpids;
}
/*
リストを更新する。
*/
bool CDlgFavorite::RefreshList( void )
{
int nTab;
bool bret;
bool ret_val = false;
char msg[1024];
strcpy( msg, "" );
strcpy( m_szMsg, "" );
//全リストの現在選択中のアイテムを取得する。
for( nTab = 0; NULL != p_favorite_info[nTab].m_pRecent; nTab++ )
{
bret = RefreshListOne( nTab );
if( bret == true )
{
ret_val = true;
// ::MYMESSAGEBOX( m_hWnd,
// MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
// "最近使った%sの履歴が更新されました。\n\n設定中の情報をクリアし再表示しました。", p_favorite_info[nTab].m_pszCaption );
if( strlen( msg ) > 0 ) strcat( msg, "、" );
strcat( msg, p_favorite_info[nTab].m_pszCaption );
}
}
if( ret_val )
{
wsprintf( m_szMsg,
"履歴(%s)が更新されたため編集中情報を破棄し再表示しました。",
msg );
}
return ret_val;
}
/*
リストのうち1個を更新する。
*/
bool CDlgFavorite::RefreshListOne( int nIndex )
{
HWND hwndList;
CRecent *pRecent;
int nCount;
int nCurrentIndex;
int nItemCount;
int i;
BOOL bret;
char szText[1024];
LVITEM lvitem;
pRecent = p_favorite_info[nIndex].m_pRecent;
nItemCount = pRecent->GetItemCount();
hwndList = GetDlgItem( m_hWnd, p_favorite_info[nIndex].m_nId );
nCount = ListView_GetItemCount( hwndList );
nCurrentIndex = ListView_GetNextItem( hwndList, -1, LVNI_SELECTED );
if( -1 == nCurrentIndex ) nCurrentIndex = ListView_GetNextItem( hwndList, -1, LVNI_FOCUSED );
if( nItemCount != nCount ) goto changed; //個数が変わったので再構築
//お気に入り数が変わったので再構築
if( p_favorite_info[nIndex].m_nViewCount != pRecent->GetViewCount() ) goto changed;
for( i = 0; i < nCount; i++ )
{
memset( szText, 0, sizeof( szText ) );
memset( &lvitem, 0, sizeof( lvitem ) );
lvitem.mask = LVIF_TEXT;
lvitem.pszText = szText;
lvitem.cchTextMax = sizeof( szText );
lvitem.iItem = i;
lvitem.iSubItem = 1;
bret = ListView_GetItem( hwndList, &lvitem );
if( FALSE == bret ) goto changed; //エラーなので再構築
//アイテム内容が変わったので再構築
if( i != pRecent->FindItem( szText ) ) goto changed;
}
return false;
changed:
SetDataOne( nIndex, nCurrentIndex );
// if( nItemCount > 0 )
// {
// ::MYMESSAGEBOX( m_hWnd,
// MB_OK | MB_ICONINFORMATION, GSTR_APPNAME,
// "最近使った%sの履歴が更新されました。\n\n設定中の情報をクリアし再表示しました。", p_favorite_info[nIndex].m_pszCaption );
// }
return true;
}
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -