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

📄 tabctrldlg.cpp

📁 vc的一些原码,对于帮助学习和提高很有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// TabCtrlDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Controls.h"
#include "TabCtrlDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define		TREE_STYLES		(TVS_HASBUTTONS|TVS_HASLINES\
							 | TVS_LINESATROOT | TVS_SHOWSELALWAYS\
							 | WS_CHILD)
#define		EDIT_STYLES		(ES_MULTILINE | ES_WANTRETURN | WS_CHILD) // & !(WS_SYSMENU | WS_CAPTION))

#define		TCS_MULTISEL	0x04

/////////////////////////////////////////////////////////////////////////////
// CTabCtrlDlg property page

IMPLEMENT_DYNCREATE(CTabCtrlDlg, CPropertyPage)

CTabCtrlDlg::CTabCtrlDlg() : CPropertyPage(CTabCtrlDlg::IDD)
{
	//{{AFX_DATA_INIT(CTabCtrlDlg)
	m_Align = 0;
	m_TabsLocation = 0;
	m_StyleButtons = FALSE;
	m_StyleHotTrack = FALSE;
	m_StyleMultiline = FALSE;
	//}}AFX_DATA_INIT
	m_psp.dwFlags &= ~PSP_HASHELP;
}

CTabCtrlDlg::~CTabCtrlDlg()
{
}

void CTabCtrlDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTabCtrlDlg)
	DDX_Control(pDX, IDC_TABCTRL_STYLE_MULTILINE, m_StyleMultilineCtrl);
	DDX_Radio(pDX, IDC_TABCTRL_ALIGN_RIGHTJUSTIFY, m_Align);
	DDX_Radio(pDX, IDC_TABCTRL_TABS_TOP, m_TabsLocation);
	DDX_Check(pDX, IDC_TABCTRL_STYLE_BUTTONS, m_StyleButtons);
	DDX_Check(pDX, IDC_TABCTRL_STYLE_HOTTRACK, m_StyleHotTrack);
	DDX_Check(pDX, IDC_TABCTRL_STYLE_MULTILINE, m_StyleMultiline);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTabCtrlDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CTabCtrlDlg)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TABCTRL_SAMPLETAB, OnSelchangeSampletab)
	ON_NOTIFY(TCN_SELCHANGING, IDC_TABCTRL_SAMPLETAB, OnSelchangingSampletab)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_TABCTRL_STYLE_MULTILINE, OnStyleMultiline)
	ON_BN_CLICKED(IDC_TABCTRL_TABS_TOP, OnPlaceTabs)
	ON_BN_CLICKED(IDC_TABCTRL_ALIGN_FIXEDWIDTH, OnAlignFixedwidth)
	ON_BN_CLICKED(IDC_TABCTRL_ALIGN_RIGHTJUSTIFY, OnAlignRightjustify)
	ON_BN_CLICKED(IDC_TABCTRL_ALIGN_RAGGEDRIGHT, OnAlignRaggedright)
	ON_BN_CLICKED(IDC_TABCTRL_STYLE_BUTTONS, OnStyleButtons)
	ON_BN_CLICKED(IDC_TABCTRL_STYLE_HOTTRACK, OnStyleHottrack)
	ON_BN_CLICKED(IDC_TABCTRL_TABS_BOTTOM, OnPlaceTabs)
	ON_BN_CLICKED(IDC_TABCTRL_TABS_LEFT, OnPlaceTabs)
	ON_BN_CLICKED(IDC_TABCTRL_TABS_RIGHT, OnPlaceTabs)
	ON_BN_CLICKED(IDC_TABCTRL_SWITCHCONTROLS, OnTabctrlSwitchcontrols)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTabCtrlDlg message handlers

BOOL CTabCtrlDlg::OnInitDialog() 
{

	CPropertyPage::OnInitDialog();

	GetClientRect (m_rcBase);
	m_rcBase.right = 60 * m_rcBase.right / 100;
	m_rcBase.bottom = m_rcBase.bottom / 2 + 20;
	m_rcBase.left += 5;
	m_rcBase.top += 10;
	m_tab.Create (WS_VISIBLE | TCS_FOCUSNEVER | TCS_SINGLELINE, m_rcBase, this, IDC_TABCTRL_SAMPLETAB);
	CFont* font = GetFont ();
	m_tab.SetFont (font);

	m_Images.Create (16, 16, ILC_MASK, 6, 4);
	HICON hIcon = AfxGetApp()->LoadIcon (IDI_REDOFFLED);
	m_Images.Add(hIcon);
	DeleteObject (hIcon);
	hIcon = AfxGetApp()->LoadIcon (IDI_REDONLED);
	m_Images.Add(hIcon);
	DeleteObject (hIcon);

	hIcon = AfxGetApp()->LoadIcon (IDI_GREENOFFLED);
	m_Images.Add(hIcon);
	DeleteObject (hIcon);
	hIcon = AfxGetApp()->LoadIcon (IDI_GREENONLED);
	m_Images.Add(hIcon);
	DeleteObject (hIcon);

	hIcon = AfxGetApp()->LoadIcon (IDI_YELLOWOFFLED);
	m_Images.Add(hIcon);
	DeleteObject (hIcon);
	hIcon = AfxGetApp()->LoadIcon (IDI_YELLOWONLED);
	m_Images.Add(hIcon);
	DeleteObject (hIcon);
	m_tab.SetImageList (&m_Images);

//
//	Create the dialog box items. These will be placed
//	on the tab page. Other pages will be created with
//	the controls in place.
//
	m_tabtree.Create(MAKEINTRESOURCE(IDD_TABCTRL_SAMPLEDLG1), GetDlgItem (IDD_PROPPAGE_TABCTRLDLG));
	m_tabtree.ModifyStyle (WS_CAPTION, 0, FALSE);
	m_tabboxes.Create(MAKEINTRESOURCE(IDD_TABCTRL_SAMPLEDLG2), GetDlgItem (IDD_PROPPAGE_TABCTRLDLG));
	m_tabboxes.ModifyStyle (WS_CAPTION, 0, FALSE);

	CRect r;
	m_tab.GetClientRect (&r);
	m_tab.GetWindowRect (m_rcBase);
	ScreenToClient (m_rcBase);
	m_tab.GetItemRect (0, &m_rcTab);
//
//	Create the individual controls. Notice they are
//	sized to the client rectangle, which is the client
//	area of a tab page.
	CRect rcControl;
	r = m_rcBase;
	r.top += m_rcTab.bottom - m_rcTab.top;
	m_list.CreateEx (0, "SysListView32",
			NULL, WS_CHILD | LVS_REPORT | WS_BORDER, r.left, r.top,
			r.right - r.left, r.bottom - r.top,
			this->m_hWnd, NULL, NULL);//IDC_TABLIST);
//	m_list.ModifyStyle (WS_CAPTION, 0, TRUE);

	DWORD dwStyle = TREE_STYLES;
	m_tree.CreateEx (0, "SysTreeView32",
			NULL, TREE_STYLES, r.left, r.top,
			r.right - r.left, r.bottom - r.top,
			this->m_hWnd, NULL, NULL);// IDC_TABTREECTRL);
	m_tree.ModifyStyle (WS_CAPTION, 0, TRUE);
	m_FirstPageControl = &m_tree;

	m_edit.CreateEx (0, "Edit",
			"", EDIT_STYLES | WS_CHILD,
			r.left, r.right, r.right - r.left,
			r.bottom - r.top,
			this->m_hWnd, NULL, NULL);// IDC_TABEDIT);
	m_edit.SetWindowText ("This is a multiline edit control without scrolling.");

	InitializeTree (&m_tree);
//
//	Insert the tab pages. Seven in all.
//
	AddTabItems ();
	AlignTabsAtTop();
//
//	Show the first control or dialog
//
	m_tab.ShowWindow (true);
	m_tree.ShowWindow (SW_NORMAL);

	return TRUE;
}

void CTabCtrlDlg::AddTabItems()
{
	TC_ITEM TabItem;
	memset (&TabItem, '\0', sizeof (TC_ITEM));
	TabItem.mask = TCIF_TEXT | TCIF_IMAGE | TCIF_PARAM;
	TabItem.iImage = 1;
//	TabItem.lParam = (long) &m_tree;
	TabItem.lParam = (LPARAM) m_FirstPageControl;
	TabItem.pszText = "First";
	m_tab.InsertItem (0, &TabItem);

	TabItem.iImage = 2;
	TabItem.lParam = (long) &m_tabboxes;
	TabItem.pszText = "Second";
	m_tab.InsertItem (1, &TabItem);

	TabItem.iImage = 4;
	TabItem.pszText = "Third";
	TabItem.lParam = (long) &m_list;
	m_tab.InsertItem (2, &TabItem);

	TabItem.pszText = "Fourth";
	TabItem.lParam = (long) &m_edit;
	TabItem.iImage = 0;
	m_tab.InsertItem (3, &TabItem);

	TabItem.pszText = "Fifth";
	TabItem.lParam = (long) &m_tabtree;
	TabItem.iImage = 2;
	m_tab.InsertItem (4, &TabItem);

//
//	The next two pages are blank.
//
	TabItem.pszText = "Sixth";
	TabItem.lParam = 0L;
	TabItem.iImage = 4;
	m_tab.InsertItem (5, &TabItem);

	TabItem.pszText = "Seventh";
	TabItem.iImage = 0;
	m_tab.InsertItem (6, &TabItem);
}

void CTabCtrlDlg::DeleteTabItems()
{
	m_tab.DeleteAllItems ();
}

void CTabCtrlDlg::OnSelchangeSampletab(NMHDR* pNMHDR, LRESULT* pResult) 
{
TC_ITEM		ti;
CWnd*		cDlg;
int			result;

	// TODO: Add your control notification handler code here

	int sel = m_tab.GetCurSel();
	ti.mask = TCIF_PARAM | TCIF_IMAGE;
	result = m_tab.GetItem (sel, &ti);
	cDlg = (CWnd *) ti.lParam;
	if (cDlg)
		cDlg->ShowWindow (true);
	ti.mask = TCIF_IMAGE;
	ti.iImage += 1;
	m_tab.SetItem (sel, &ti);

	*pResult = 0;
}

void CTabCtrlDlg::OnSelchangingSampletab(NMHDR* pNMHDR, LRESULT* pResult) 
{
TC_ITEM		ti;
CWnd*		cDlg;
int			result;

	// TODO: Add your control notification handler code here

	int sel = m_tab.GetCurSel();
	ti.mask = TCIF_PARAM | TCIF_IMAGE;
	result = m_tab.GetItem (sel, &ti);
	cDlg = (CWnd *) ti.lParam;
	if (cDlg)
		cDlg->ShowWindow (false);
	ti.mask = TCIF_IMAGE;
	ti.iImage -= 1;
	m_tab.SetItem (sel, &ti);
	*pResult = 0;
}

//
//	All controls that were not created on a dialog box must be
//	destroyed here.
//
void CTabCtrlDlg::OnDestroy() 
{
	m_list.DestroyWindow ();
	m_edit.DestroyWindow ();
//	m_tree.DestroyWindow ();
	m_FirstPageControl->DestroyWindow ();
	m_tab.DestroyWindow ();
	CPropertyPage::OnDestroy();
	
	// TODO: Add your message handler code here
}

void CTabCtrlDlg::InitializeTree(CTreeCtrl * tree)
{
TV_INSERTSTRUCT TreeItem;

	// TODO: Add extra initialization here
	TreeItem.hParent = TVI_ROOT;
	TreeItem.hInsertAfter = TVI_LAST;
	TreeItem.item.mask = TVIF_TEXT | TVIF_PARAM;
	TreeItem.item.pszText = "Animals";
	TreeItem.item.lParam = 0;
	HTREEITEM hAnimal1 = tree->InsertItem(&TreeItem);

	TreeItem.item.pszText = "Plants";
	TreeItem.item.lParam = 1;
	HTREEITEM hPlants1 = tree->InsertItem(&TreeItem);

	TreeItem.item.mask = TVIF_TEXT | TVIF_PARAM;
	TreeItem.item.iImage = -1;
	TreeItem.item.iSelectedImage = -1;
	TreeItem.hParent = hAnimal1;
	TreeItem.item.pszText = "Domesticated";
	TreeItem.item.lParam = 100;
	HTREEITEM hAnimal2 = tree->InsertItem(&TreeItem);

	TreeItem.item.pszText = "Wild and Free";
	TreeItem.item.lParam = 100;
	HTREEITEM hAnimal3 = tree->InsertItem(&TreeItem);

	TreeItem.hParent = hAnimal2;
	TreeItem.item.pszText = "Dogs";
	TreeItem.item.lParam = 101;
	tree->InsertItem(&TreeItem);

	TreeItem.item.pszText = "Cats";
	TreeItem.item.lParam = 102;
	tree->InsertItem(&TreeItem);

	TreeItem.item.pszText = "Hamsters";
	TreeItem.item.lParam = 103;
	tree->InsertItem(&TreeItem);

	TreeItem.hParent = hAnimal3;
	TreeItem.item.pszText = "Tigers";
	TreeItem.item.lParam = 111;
	tree->InsertItem(&TreeItem);

	TreeItem.item.pszText = "Lions";
	TreeItem.item.lParam = 112;
	tree->InsertItem(&TreeItem);

	TreeItem.item.pszText = "Gerbils";
	TreeItem.item.lParam = 113;
	tree->InsertItem(&TreeItem);
}

void CTabCtrlDlg::InitializeList(CListCtrl *list)
{
char *szTitles [] =
	{
	"Life Form",
	"Type",
	"Status"
	};

#define TITLES (sizeof(szTitles)/sizeof(char *))

	LV_COLUMN	lc;
	CRect rc;
	list->GetWindowRect (rc);
	int nWidth = (rc.right - rc.left) / 3;
	memset (&lc, '\0', sizeof (LV_COLUMN));
	lc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
	for (int sub = 0; sub < TITLES; ++sub)
	{
		lc.pszText = szTitles[sub];
		lc.cx = nWidth;
		lc.iSubItem = sub;
		list->InsertColumn (sub, &lc);
	}
}

void CTabCtrlDlg::OnStyleMultiline() 
{
	UpdateData (TRUE);
	if (m_StyleMultiline == TRUE)
	{
		m_tab.ModifyStyle (TCS_SINGLELINE | TCS_MULTISEL, TCS_MULTILINE, TRUE);
		m_tab.Invalidate ();
	}
	else
	{
		m_tab.ModifyStyle (TCS_MULTILINE | TCS_MULTISEL, TCS_SINGLELINE, TRUE);
		m_tab.Invalidate ();
	}
	switch (m_TabsLocation)
	{
		case 0:		// At the top
			AlignTabsAtTop();
			break;
		case 1:		// At the bottom
			AlignTabsAtBottom ();
			break;
		case 2:		// At the left
			AlignTabsAtLeft();
			break;
		case 3:		// At the right
			AlignTabsAtRight();
			break;
	}
	TC_ITEM		ti;
	int nSel = m_tab.GetCurSel ();
	ti.mask = TCIF_PARAM | TCIF_IMAGE;
	m_tab.GetItem (nSel, &ti);
	CWnd *cDlg = (CWnd *) ti.lParam;
	if (cDlg != NULL)
		cDlg->Invalidate ();
}

void CTabCtrlDlg::OnPlaceTabs() 
{
DWORD dwStyle, dwStyleEx;

	UpdateData (TRUE);
	switch (m_TabsLocation)
	{
		case 0:		// At the top
			m_tab.ModifyStyle (TCS_BOTTOM | TCS_VERTICAL, 0, TRUE);
			dwStyle = m_tab.GetStyle();
			dwStyleEx = m_tab.GetExStyle();
			RecreateWindow (dwStyle, dwStyleEx);
			m_StyleMultilineCtrl.EnableWindow(TRUE);
			AlignTabsAtTop();
			break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -