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

📄 headerdlg.cpp

📁 这些源代码
💻 CPP
字号:
// HeaderDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Controls.h"
#include "HeaderDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CHeaderDlg property page

IMPLEMENT_DYNCREATE(CHeaderDlg, CPropertyPage)

CHeaderDlg::CHeaderDlg() : CPropertyPage(CHeaderDlg::IDD)
{
	//{{AFX_DATA_INIT(CHeaderDlg)
	m_bListHotTrack = FALSE;
	m_bListButtons = TRUE;
	m_bListFullDrag = FALSE;
	m_bListDragDrop = FALSE;
	m_bBasicHotTrack = FALSE;
	m_bBasicHidden = FALSE;
	m_bBasicFullDrag = FALSE;
	m_bBasicDragDrop = FALSE;
	m_bBasicButtons = FALSE;
	m_bListHidden = FALSE;
	m_bListIcon = FALSE;
	m_bListText = TRUE;
	m_bListBitmap = FALSE;
	m_nListFormat = 0;
	m_bListBmpOnRight = FALSE;
	//}}AFX_DATA_INIT
	m_psp.dwFlags &= ~PSP_HASHELP;
	m_hBmpPlanet = NULL;
	m_hBmpOrbit = NULL;
	m_hBmpRotate = NULL;
}

CHeaderDlg::~CHeaderDlg()
{
	if (m_hBmpPlanet != NULL)
		DeleteObject (m_hBmpPlanet);
	if (m_hBmpOrbit != NULL)
		DeleteObject (m_hBmpOrbit);
	if (m_hBmpRotate != NULL)
		DeleteObject (m_hBmpRotate);
}

void CHeaderDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CHeaderDlg)
	DDX_Control(pDX, IDC_HEADER_LISTCONTROL, m_HeaderListCtrl);
	DDX_Check(pDX, IDC_HEADER_LISTHOTTRACK, m_bListHotTrack);
	DDX_Check(pDX, IDC_HEADER_LISTBUTTONS, m_bListButtons);
	DDX_Check(pDX, IDC_HEADER_LISTFULLDRAG, m_bListFullDrag);
	DDX_Check(pDX, IDC_HEADER_LISTDRAGDROP, m_bListDragDrop);
	DDX_Check(pDX, IDC_HEADER_BASICHOTTRACK, m_bBasicHotTrack);
	DDX_Check(pDX, IDC_HEADER_BASICHIDDEN, m_bBasicHidden);
	DDX_Check(pDX, IDC_HEADER_BASICFULLDRAG, m_bBasicFullDrag);
	DDX_Check(pDX, IDC_HEADER_BASICDRAGDROP, m_bBasicDragDrop);
	DDX_Check(pDX, IDC_HEADER_BASICBUTTONS, m_bBasicButtons);
	DDX_Check(pDX, IDC_HEADER_LISTHIDDEN, m_bListHidden);
	DDX_Check(pDX, IDC_HEADER_LISTICON, m_bListIcon);
	DDX_Check(pDX, IDC_HEADER_LISTTEXT, m_bListText);
	DDX_Check(pDX, IDC_HEADER_LISTBITMAP, m_bListBitmap);
	DDX_Radio(pDX, IDC_HEADER_LISTLEFT, m_nListFormat);
	DDX_Check(pDX, IDC_HEADER_LISTBMPONRIGHT, m_bListBmpOnRight);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CHeaderDlg, CPropertyPage)
	//{{AFX_MSG_MAP(CHeaderDlg)
	ON_BN_CLICKED(IDC_HEADER_LISTBUTTONS, OnHeaderListbuttons)
	ON_BN_CLICKED(IDC_HEADER_LISTHOTTRACK, OnHeaderListhottrack)
	ON_BN_CLICKED(IDC_HEADER_LISTFULLDRAG, OnHeaderListfulldrag)
	ON_BN_CLICKED(IDC_HEADER_LISTDRAGDROP, OnHeaderListdragdrop)
	ON_BN_CLICKED(IDC_HEADER_BASICDRAGDROP, OnHeaderBasicdragdrop)
	ON_BN_CLICKED(IDC_HEADER_BASICBUTTONS, OnHeaderBasicbuttons)
	ON_BN_CLICKED(IDC_HEADER_BASICFULLDRAG, OnHeaderBasicfulldrag)
	ON_BN_CLICKED(IDC_HEADER_BASICHIDDEN, OnHeaderBasichidden)
	ON_BN_CLICKED(IDC_HEADER_BASICHOTTRACK, OnHeaderBasichottrack)
	ON_BN_CLICKED(IDC_HEADER_LISTTEXT, OnHeaderListtext)
	ON_BN_CLICKED(IDC_HEADER_LISTICON, OnHeaderListicon)
	ON_BN_CLICKED(IDC_HEADER_LISTBITMAP, OnHeaderListbitmap)
	ON_BN_CLICKED(IDC_HEADER_LISTLEFT, OnFormatLabel)
	ON_BN_CLICKED(IDC_HEADER_LISTBMPONRIGHT, OnHeaderListBmponRight)
	ON_BN_CLICKED(IDC_HEADER_LISTRIGHT, OnFormatLabel)
	ON_BN_CLICKED(IDC_HEADER_LISTCENTER, OnFormatLabel)
	ON_BN_CLICKED(IDC_HEADER_LISTHIDDEN, OnHeaderListhidden)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHeaderDlg message handlers

BOOL CHeaderDlg::OnInitDialog() 
{
char *szTitles [] =
	{
	"Planet",
	"Orbit",
	"Rotation"
	};
#define TITLES (sizeof(szTitles)/sizeof(char *))

const char *szPlanets [] =
	{
	"Mercury",
	"Venus",
	"Earth",
	"Mars",
	"Jupiter",
	"Saturn",
	"Uranus",
	"Neptune",
	"Pluto"
	};

	CPropertyPage::OnInitDialog();

	CRect rc;
	m_HeaderListCtrl.GetWindowRect (&rc);
	CHeaderCtrl *header = m_HeaderListCtrl.GetHeaderCtrl ();
	LV_COLUMN	lc;
	HDITEM		hi;

	memset (&lc, '\0', sizeof (LV_COLUMN));
	memset (&hi, '\0', sizeof (HDITEM));
	lc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;	
	for (int sub = 0; sub < TITLES; ++sub)
	{
		lc.iImage = sub;
		lc.pszText = szTitles[sub];
		lc.cx = (rc.right - rc.left) / 3 - 2;
		lc.iSubItem = sub;
		m_HeaderListCtrl.InsertColumn (sub, &lc);
	}
//
//	Calculate the parent window for the list box
//	so it is the same size as the list control.
//
	CRect rcAdv;
	::GetWindowRect (GetDlgItem(IDC_HEADER_ADVANCED)->m_hWnd, rcAdv);
	ScreenToClient (&rcAdv);
	CRect rcBasic;
	::GetWindowRect (GetDlgItem(IDC_HEADER_BASIC)->m_hWnd, rcBasic);
	ScreenToClient (&rcBasic);
	CRect rcCtrl;
	m_HeaderListCtrl.GetWindowRect (&rcCtrl);
	ScreenToClient (&rcCtrl);
	CRect rcListBox (rcBasic);
	rcListBox.left += rcCtrl.left - rcAdv.left;
	rcListBox.right -= rcAdv.right - rcCtrl.right;
	rcListBox.top = rcCtrl.top;
	rcListBox.bottom = rcCtrl.bottom;
//
//	Create the list box parent window. Use the
//	static window type.
//
	m_ListParent.CreateEx (0, "static", NULL, WS_CHILD | WS_VISIBLE | SS_SUNKEN,
							rcListBox, this, IDC_HEADER_LISTBOX);
	m_ListParent.ShowWindow (SW_SHOWNORMAL);
//
//	Initialize the window variables. This will
//	create the list box and its header control.
//
	m_ListParent.Initialize ();
//
//	Load the owner draw list box with file structures
//
	WIN32_FIND_DATA fd;
	HANDLE hFind;
	int nItem = 0;
	if ((hFind = FindFirstFile (_T("*.*"), &fd)) != NULL)
	{
		do
		{
			if (fd.cFileName[0] == '.')
				continue;
			m_ListParent.AddListItem (fd);
		} while (FindNextFile (hFind, &fd) == TRUE);
	}
	m_ListParent.SetSelection (0);
//
//	Disable the hot track button in the basic group
//	and the bitmap on right button in the list box
//	group. Hot Track requires button style, and
//	bitmap on right requires bitmap format.
//
	::EnableWindow (GetDlgItem (IDC_HEADER_BASICHOTTRACK)->m_hWnd, FALSE);
	::EnableWindow (GetDlgItem(IDC_HEADER_LISTBMPONRIGHT)->m_hWnd, FALSE);
//
//	Load the bitmaps for the list control header.
//
    HINSTANCE hInst = AfxGetInstanceHandle ();
	m_hBmpPlanet = (HBITMAP) LoadImage (hInst,
							 MAKEINTRESOURCE(IDB_HEADER_SMALLEARTH), IMAGE_BITMAP, 16, 16, LR_DEFAULTCOLOR);
	m_hBmpOrbit = (HBITMAP) LoadImage (hInst,
							 MAKEINTRESOURCE(IDB_HEADER_ORBIT), IMAGE_BITMAP, 32, 16, LR_DEFAULTCOLOR);
	m_hBmpRotate = (HBITMAP) LoadImage (hInst,
							 MAKEINTRESOURCE(IDB_HEADER_DAYNIGHT), IMAGE_BITMAP, 16, 16, LR_DEFAULTCOLOR);
//
//	Set the image list for the list control header.
//	Note that this image list is completely separate
//	from the other two that may be used with the
//	list control.
//
	m_imageOneTwoThree.Create (IDB_ONETWOTHREE, 16, 2, RGB(0x00, 0x80, 0x80));
	header->SetImageList (&m_imageOneTwoThree);
	return (TRUE);
}

/////////////////////////////////////////////////////////////////////////////
// Basic group handler functions

void CHeaderDlg::OnHeaderBasicdragdrop() 
{
	UpdateData (TRUE);
	if (m_bBasicDragDrop)
	{
		m_ListParent.GetHeaderCtrl()->ModifyStyle (0, HDS_DRAGDROP, TRUE);
	}
	else
	{
		m_ListParent.GetHeaderCtrl()->ModifyStyle (HDS_DRAGDROP, 0, TRUE);
	}
}

void CHeaderDlg::OnHeaderBasicbuttons() 
{
	UpdateData (TRUE);
	if (m_bBasicButtons)
	{
		::EnableWindow (GetDlgItem (IDC_HEADER_BASICHOTTRACK)->m_hWnd, TRUE);
		m_ListParent.GetHeaderCtrl()->ModifyStyle (0, HDS_BUTTONS, TRUE);
	}
	else
	{
		m_bBasicHotTrack = FALSE;
		::EnableWindow (GetDlgItem (IDC_HEADER_BASICHOTTRACK)->m_hWnd, FALSE);
		m_ListParent.GetHeaderCtrl()->ModifyStyle (HDS_BUTTONS, 0, TRUE);
	}
	UpdateData (FALSE);
}

void CHeaderDlg::OnHeaderBasicfulldrag() 
{
	UpdateData (TRUE);
	if (m_bBasicFullDrag)
	{
		m_ListParent.GetHeaderCtrl()->ModifyStyle (0, HDS_FULLDRAG, TRUE);
	}
	else
	{
		m_ListParent.GetHeaderCtrl()->ModifyStyle (HDS_FULLDRAG, 0, TRUE);
	}
}

void CHeaderDlg::OnHeaderBasichidden() 
{
	UpdateData (TRUE);
	if (m_bBasicHidden)
	{
		m_ListParent.HideHeader(true);
	}
	else
	{
		m_ListParent.HideHeader(false);
	}
}

void CHeaderDlg::OnHeaderBasichottrack() 
{
	UpdateData (TRUE);
	if (m_bBasicHotTrack)
	{
		m_ListParent.GetHeaderCtrl()->ModifyStyle (0, HDS_HOTTRACK, TRUE);
	}
	else
	{
		m_ListParent.GetHeaderCtrl()->ModifyStyle (HDS_HOTTRACK, 0, TRUE);
	}
}

/////////////////////////////////////////////////////////////////////////////
// List control group handler functions

void CHeaderDlg::OnHeaderListbuttons() 
{
	UpdateData (TRUE);
	if (m_bListButtons)
	{
		::EnableWindow (GetDlgItem (IDC_HEADER_LISTHOTTRACK)->m_hWnd, TRUE);
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (0, HDS_BUTTONS, TRUE);
	}
	else
	{
		::EnableWindow (GetDlgItem (IDC_HEADER_LISTHOTTRACK)->m_hWnd, FALSE);
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (HDS_BUTTONS, 0, TRUE);
	}
}

void CHeaderDlg::OnHeaderListhottrack() 
{
	UpdateData (TRUE);
	if (m_bListHotTrack)
	{
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (0, HDS_HOTTRACK, TRUE);
	}
	else
	{
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (HDS_HOTTRACK, 0, TRUE);
	}
}

void CHeaderDlg::OnHeaderListfulldrag() 
{
	UpdateData (TRUE);
	if (m_bListFullDrag)
	{
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (0, HDS_FULLDRAG, TRUE);
	}
	else
	{
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (HDS_FULLDRAG, 0, TRUE);
	}
}

void CHeaderDlg::OnHeaderListdragdrop() 
{
	UpdateData (TRUE);
	if (m_bListDragDrop)
	{
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (0, HDS_DRAGDROP, TRUE);
	}
	else
	{
		m_HeaderListCtrl.GetHeaderCtrl()->ModifyStyle (HDS_DRAGDROP, 0, TRUE);
	}
}

void CHeaderDlg::OnHeaderListtext() 
{
	UpdateData (TRUE);
	HDITEM hi;
	memset (&hi, '\0', sizeof (HDITEM));
	CHeaderCtrl *header = m_HeaderListCtrl.GetHeaderCtrl ();
	hi.mask = HDI_FORMAT;

	header->GetItem (0, &hi);
	if (m_bListText)
	{
		hi.mask = HDI_FORMAT;
		hi.fmt |= HDF_STRING;
		hi.iImage = 0;
		header->SetItem (0, &hi);
		hi.iImage = 1;
		header->SetItem (1, &hi);
		hi.iImage = 2;
		header->SetItem (2, &hi);
	}
	else
	{
		hi.mask = HDI_FORMAT;
		hi.fmt &= ~HDF_STRING;
		header->SetItem (0, &hi);
		header->SetItem (1, &hi);
		header->SetItem (2, &hi);
	}
}

void CHeaderDlg::OnHeaderListicon() 
{
	UpdateData (TRUE);
	HDITEM hi;
	memset (&hi, '\0', sizeof (HDITEM));
	CHeaderCtrl *header = m_HeaderListCtrl.GetHeaderCtrl ();
	hi.mask = HDI_FORMAT;

	header->GetItem (0, &hi);
	if (m_bListIcon)
	{
		hi.mask = HDI_IMAGE | HDI_FORMAT;
		hi.fmt |= HDF_IMAGE;
		hi.iImage = 0;
		header->SetItem (0, &hi);
		hi.iImage = 1;
		header->SetItem (1, &hi);
		hi.iImage = 2;
		header->SetItem (2, &hi);
	}
	else
	{
		hi.mask = HDI_FORMAT;
		hi.fmt &= ~HDF_IMAGE;
		header->SetItem (0, &hi);
		header->SetItem (1, &hi);
		header->SetItem (2, &hi);
	}
}

void CHeaderDlg::OnHeaderListbitmap() 
{
	UpdateData (TRUE);
	HDITEM hi;
	memset (&hi, '\0', sizeof (HDITEM));
	CHeaderCtrl *header = m_HeaderListCtrl.GetHeaderCtrl ();
	hi.mask = HDI_FORMAT;

	header->GetItem (0, &hi);
	if (m_bListBitmap)
	{
		hi.mask = HDI_BITMAP | HDI_FORMAT;
		hi.fmt |= HDF_BITMAP;
		hi.hbm = m_hBmpPlanet;
		header->SetItem (0, &hi);
		hi.hbm = m_hBmpOrbit;
		header->SetItem (1, &hi);
		hi.hbm = m_hBmpRotate;
		header->SetItem (2, &hi);
		::EnableWindow (GetDlgItem(IDC_HEADER_LISTBMPONRIGHT)->m_hWnd, TRUE);
	}
	else
	{
		hi.mask = HDI_FORMAT;
		hi.fmt &= ~HDF_BITMAP;
		header->SetItem (0, &hi);
		header->SetItem (1, &hi);
		header->SetItem (2, &hi);
		::EnableWindow (GetDlgItem(IDC_HEADER_LISTBMPONRIGHT)->m_hWnd, FALSE);
	}
}

void CHeaderDlg::OnFormatLabel() 
{
	UpdateData (TRUE);
	HDITEM hi;
	memset (&hi, '\0', sizeof (HDITEM));
	CHeaderCtrl *header = m_HeaderListCtrl.GetHeaderCtrl ();
	hi.mask = HDI_FORMAT;
	header->GetItem (0, &hi);
	hi.fmt &= ~(HDF_LEFT | HDF_RIGHT | HDF_CENTER);	
	switch (m_nListFormat)
	{
		case 0:		// Left
			hi.fmt |= HDF_LEFT;
			break;
		case 1:		// Right
			hi.fmt |= HDF_RIGHT;
			break;
		case 2:		// Center
			hi.fmt |= HDF_CENTER;
			break;
		default:
			return;
	}
	header->SetItem (0, &hi);
	header->SetItem (1, &hi);
	header->SetItem (2, &hi);
}

void CHeaderDlg::OnHeaderListBmponRight() 
{
	UpdateData (TRUE);
	HDITEM hi;
	memset (&hi, '\0', sizeof (HDITEM));
	CHeaderCtrl *header = m_HeaderListCtrl.GetHeaderCtrl ();
	hi.mask = HDI_FORMAT;
	header->GetItem (0, &hi);
	if (m_bListBmpOnRight)
	{
		hi.fmt |= HDF_BITMAP_ON_RIGHT;
	}
	else
	{
		hi.fmt &= ~HDF_BITMAP_ON_RIGHT;
	}
	header->SetItem (0, &hi);
	header->SetItem (1, &hi);
	header->SetItem (2, &hi);
}

void CHeaderDlg::OnHeaderListhidden() 
{
	UpdateData (TRUE);
	if (m_bListHidden)
	{
		m_HeaderListCtrl.ModifyStyle (0, LVS_NOCOLUMNHEADER, TRUE);
	}
	else
	{
		m_HeaderListCtrl.ModifyStyle (LVS_NOCOLUMNHEADER, 0, TRUE);
	}
}

⌨️ 快捷键说明

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