sampledlg.cpp

来自「关于使用VC编程的代码」· C++ 代码 · 共 367 行

CPP
367
字号
// SampleDlg.cpp : implementation file
//

#include "stdafx.h"
#include "General_Control.h"
#include "SampleDlg.h"
#include "CityDlg.h"


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

/////////////////////////////////////////////////////////////////////////////
// CSampleDlg dialog


CSampleDlg::CSampleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSampleDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSampleDlg)
	m_strCity = _T("");
	m_strColor = _T("");
	m_nIntVal = 0;
	m_nScrollNumber = 0;
	//}}AFX_DATA_INIT
}


void CSampleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSampleDlg)
	DDX_CBString(pDX, IDC_CITY_COMBO, m_strCity);
	DDX_LBString(pDX, IDC_COLOR_LIST, m_strColor);
	DDX_Text(pDX, IDC_INT_EDIT, m_nIntVal);
	DDV_MinMaxInt(pDX, m_nIntVal, 0, 100);
	DDX_Scroll(pDX, IDC_NUMBER_SCROLLBAR, m_nScrollNumber);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSampleDlg, CDialog)
	//{{AFX_MSG_MAP(CSampleDlg)
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
	ON_BN_CLICKED(IDC_DELETE_BUTTON, OnDeleteButton)
	ON_NOTIFY(NM_CLICK, IDC_CITY_LIST, OnClickCityList)
	ON_EN_CHANGE(IDC_INT_EDIT, OnChangeIntEdit)
	ON_EN_UPDATE(IDC_INT_EDIT, OnUpdateIntEdit)
	ON_WM_SHOWWINDOW()
	ON_NOTIFY(TCN_SELCHANGE, IDC_PLACE_TAB, OnSelchangePlaceTab)
	ON_NOTIFY(TCN_SELCHANGING, IDC_PLACE_TAB, OnSelchangingPlaceTab)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTree1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSampleDlg message handlers


BOOL CSampleDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN1);
	pSpin->SetRange(0,100);
	pSpin->SetPos(0);

	CListBox* pListBox = (CListBox *)GetDlgItem(IDC_COLOR_LIST);
	pListBox->InsertString(-1,"Red");
	pListBox->InsertString(-1,"Green");
	pListBox->InsertString(-1,"Blue");

	CScrollBar* pBar = (CScrollBar *)GetDlgItem(IDC_NUMBER_SCROLLBAR);
	pBar->SetScrollRange(nMin,nMax);
	pBar->SetScrollPos( (nMin + nMax)/2 );
	CString str;
	str.Format("%d",(nMin + nMax)/2);
	SetDlgItemText(IDC_NUMBER_STATIC, str);

	CListCtrl* pListCtrl = (CListCtrl *)GetDlgItem(IDC_CITY_LIST);
	pListCtrl->InsertItem(0,"ShangHai");
	pListCtrl->InsertItem(1,"GuangZhou");
	GetDlgItem(IDC_DELETE_BUTTON)->EnableWindow( pListCtrl->GetSelectedCount() > 0 );

	CProgressCtrl* pProgCtrl = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS);
	pProgCtrl->SetRange(0,100);
	pProgCtrl->SetPos(0);

	CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_PLACE_TAB);
	TC_ITEM tci;
	tci.mask = TCIF_TEXT;
	tci.pszText = "Page 0";
	pTabCtrl->InsertItem(0,&tci);
	tci.pszText = "Page 1";
	pTabCtrl->InsertItem(1,&tci);
	tci.pszText = "Page 2";
	pTabCtrl->InsertItem(2,&tci);

	HICON hIcon[8];
	int n;
	m_imageList.Create(16, 16, 0, 8, 8); 
	hIcon[0] = AfxGetApp()->LoadIcon(IDI_WHITE);
	hIcon[1] = AfxGetApp()->LoadIcon(IDI_BLACK);
	hIcon[2] = AfxGetApp()->LoadIcon(IDI_RED);
	hIcon[3] = AfxGetApp()->LoadIcon(IDI_BLUE);
	hIcon[4] = AfxGetApp()->LoadIcon(IDI_YELLOW);
	hIcon[5] = AfxGetApp()->LoadIcon(IDI_CYAN);
	hIcon[6] = AfxGetApp()->LoadIcon(IDI_PURPLE);
	hIcon[7] = AfxGetApp()->LoadIcon(IDI_GREEN);
	for (n = 0; n < 8; n++) {
		m_imageList.Add(hIcon[n]);
	}

	static char* color[] = {"white", "black", "red",
	                        "blue", "yellow", "cyan",
	                        "purple", "green"};
	CListCtrl* pList =
		(CListCtrl*) GetDlgItem(IDC_TREE1);
	pList->SetImageList(&m_imageList, LVSIL_SMALL);
	for (n = 0; n < 8; n++) {
		pList->InsertItem(n, color[n], n);
	}
	pList->SetBkColor(RGB(0, 255, 255)); 
	pList->SetTextBkColor(RGB(0, 255, 255));

	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
	pTree->SetImageList(&m_imageList, TVSIL_NORMAL);

	
	TV_INSERTSTRUCT tvinsert;
	tvinsert.hParent = NULL;
	tvinsert.hInsertAfter = TVI_LAST;
	tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE
	                     | TVIF_TEXT;
	tvinsert.item.hItem = NULL;
	tvinsert.item.state = 0;
	tvinsert.item.stateMask = 0;
	tvinsert.item.cchTextMax = 6;
	tvinsert.item.iSelectedImage = 1;
	tvinsert.item.cChildren = 0;
	tvinsert.item.lParam = 0;
	
	tvinsert.item.pszText = "Animal";
	tvinsert.item.iImage = 2;
	HTREEITEM hTop1 = pTree ->InsertItem(&tvinsert);
	tvinsert.item.pszText = "Plant";
	HTREEITEM hTop2 = pTree->InsertItem(&tvinsert);
	
	tvinsert.hParent = hTop1;
	tvinsert.item.pszText = "Wolf";
	tvinsert.item.iImage = 3;
	pTree->InsertItem(&tvinsert);
	tvinsert.item.pszText = "Rabbit";
	pTree->InsertItem(&tvinsert);
	
	tvinsert.hParent = hTop2;
	tvinsert.item.pszText = "Tree";
	tvinsert.item.iImage = 4;
	pTree->InsertItem(&tvinsert);
	tvinsert.item.pszText = "Bamboo";
	pTree->InsertItem(&tvinsert);
	tvinsert.item.pszText = "Flower";
	HTREEITEM hOther = pTree->InsertItem(&tvinsert);
	
	tvinsert.hParent = hOther;
	tvinsert.item.pszText = "Rose";
	tvinsert.item.iImage = 7;
	pTree->InsertItem(&tvinsert);
	tvinsert.item.pszText = "Lotus";
	pTree->InsertItem(&tvinsert);

	SetDlgItemText(IDC_STATIC_TREE, "");

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSampleDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	int nTemp1, nTemp2;

	nTemp1 = pScrollBar->GetScrollPos();
	switch(nSBCode) {
	case SB_THUMBPOSITION:
		pScrollBar->SetScrollPos(nPos);
		break;
	case SB_LINELEFT: // left arrow button
		nTemp2 = (nMax - nMin) / 10;
		if ((nTemp1 - nTemp2) > nMin) {
			nTemp1 -= nTemp2;
		}
		else {
			nTemp1 = nMin;
		}
		pScrollBar->SetScrollPos(nTemp1);
		break;
	case SB_LINERIGHT: // right arrow button
		nTemp2 = (nMax - nMin) / 10;
		if ((nTemp1 + nTemp2) < nMax) {
			nTemp1 += nTemp2;
		}
		else {
			nTemp1 = nMax;
		}
		pScrollBar->SetScrollPos(nTemp1);
		break;
	}
	CString str;
	UpdateData(TRUE);
	str.Format("%d", m_nScrollNumber);
	GetDlgItem(IDC_NUMBER_STATIC)->SetWindowText(str);
}

void CSampleDlg::OnAddButton() 
{
	CCityDlg dlg;
	
	if( dlg.DoModal() == IDOK ) 
	{
		CListCtrl* pListCtrl = (CListCtrl *)GetDlgItem(IDC_CITY_LIST);
		pListCtrl->InsertItem(pListCtrl->GetItemCount(), dlg.m_strCity);
		pListCtrl->Update(pListCtrl->GetItemCount());
	}
}

void CSampleDlg::OnDeleteButton() 
{
	if( AfxMessageBox("Are you sure to delete the selected item?", MB_OKCANCEL) == IDOK )
	{
		CListCtrl* pListCtrl = (CListCtrl *)GetDlgItem(IDC_CITY_LIST);
		int i = pListCtrl->GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
		pListCtrl->DeleteItem( i );	
		pListCtrl->RedrawItems(0, pListCtrl->GetItemCount());
		GetDlgItem(IDC_DELETE_BUTTON)->EnableWindow(FALSE);
	}
}

void CSampleDlg::OnClickCityList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CListCtrl* pListCtrl = (CListCtrl *)GetDlgItem(IDC_CITY_LIST);
	GetDlgItem(IDC_DELETE_BUTTON)->EnableWindow( pListCtrl->GetSelectedCount() > 0 );
	*pResult = 0;
}

void CSampleDlg::OnChangeIntEdit() 
{
	UpdateData(TRUE);
	CProgressCtrl* pProgCtrl = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS);	
	if(pProgCtrl != NULL)
	{
		pProgCtrl->SetPos(m_nIntVal);
	}
}

void CSampleDlg::OnUpdateIntEdit() 
{
/*	UpdateData(TRUE);
	CProgressCtrl* pProgCtrl = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS);	
	if(pProgCtrl != NULL)
	{
		pProgCtrl->SetPos(m_nIntVal);
	}
*/
  }

void CSampleDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);

	CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_PLACE_TAB);
	if( bShow == TRUE )
	{
		m_FirstDlg.Create(IDD_DIALOG1, GetDlgItem(IDC_PLACE_TAB));//pTabCtrl->GetActiveWindow());
		m_FirstDlg.ShowWindow(SW_SHOW);
		m_SecondDlg.Create(IDD_DIALOG2, GetDlgItem(IDC_PLACE_TAB));//pTabCtrl->GetActiveWindow());
		m_SecondDlg.ShowWindow(SW_HIDE);
		m_ThirdDlg.Create(IDD_DIALOG3, GetDlgItem(IDC_PLACE_TAB));//pTabCtrl->GetActiveWindow());
		m_ThirdDlg.ShowWindow(SW_HIDE);
	}
}

void CSampleDlg::OnSelchangePlaceTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_PLACE_TAB);
	switch( pTabCtrl->GetCurSel() )
	{
	case 0:
		{
			m_FirstDlg.ShowWindow( SW_SHOW );
			m_SecondDlg.ShowWindow( SW_HIDE );
			m_ThirdDlg.ShowWindow( SW_HIDE );
			break;
		}
	case 1:
		{
			m_FirstDlg.ShowWindow( SW_HIDE );
			m_SecondDlg.ShowWindow( SW_SHOW );
			m_ThirdDlg.ShowWindow( SW_HIDE );
			break;
		}
	case 2:
		{
			m_FirstDlg.ShowWindow( SW_HIDE );
			m_SecondDlg.ShowWindow( SW_HIDE );
			m_ThirdDlg.ShowWindow( SW_SHOW );
			break;
		}
	}
	
	*pResult = 0;
}

void CSampleDlg::OnSelchangingPlaceTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
/*	CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_PLACE_TAB);
	switch( pTabCtrl->GetCurSel() )
	{
	case 0:
		{
			m_FirstDlg.ShowWindow( SW_SHOW );
			m_SecondDlg.ShowWindow( SW_HIDE );
			m_ThirdDlg.ShowWindow( SW_HIDE );
			break;
		}
	case 1:
		{
			m_FirstDlg.ShowWindow( SW_HIDE );
			m_SecondDlg.ShowWindow( SW_SHOW );
			m_ThirdDlg.ShowWindow( SW_HIDE );
			break;
		}
	case 2:
		{
		//	m_FirstDlg.ShowWindow( SW_HIDE );
		//	m_SecondDlg.ShowWindow( SW_HIDE );
			m_ThirdDlg.ShowWindow( SW_SHOW );
			break;
		}
	}
		
*/	*pResult = 0;
}

void CSampleDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	CTreeCtrl* pTree =
		(CTreeCtrl*) GetDlgItem(IDC_TREE1);
	HTREEITEM hSelected = pNMTreeView->itemNew.hItem;
	if (hSelected != NULL) {
		char text[31];
		TV_ITEM item;
		item.mask = TVIF_HANDLE | TVIF_TEXT;
		item.hItem = hSelected;
		item.pszText = text;
		item.cchTextMax = 30;
		VERIFY(pTree->GetItem(&item));
		SetDlgItemText(IDC_STATIC_TREE, text);
	}		
	*pResult = 0;
}

⌨️ 快捷键说明

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