⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdlgfavorite.cpp

📁 日本的开源编辑器源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -