dialogcolorsetup.cpp

来自「一个俄罗斯方块的vc源代码」· C++ 代码 · 共 282 行

CPP
282 行
字号
// DialogColorSetup.cpp : implementation file
//

#include "stdafx.h"
#include "Russia.h"
#include "DialogColorSetup.h"

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



static const TCHAR szSection[] = _T("Settings");
static const TCHAR clrCube[] = _T("方块颜色");
static const TCHAR clrDeclareCube[] = _T("声明区域的方块颜色");
static const TCHAR clrMaxRect[] = _T("最大区域颜色");
static const TCHAR clrDeclareRect[] = _T("声明区域颜色");
static const TCHAR clrDiamondsRect[] = _T("运行区域颜色");
static const TCHAR clrLine[] = _T("方格线颜色");
static const TCHAR clrDeclareFont[] = _T("声明区域的字体颜色");
static const TCHAR clrGameOverFont[] = _T("游戏结束字体的颜色");
static const TCHAR bRandomCubeColor[] = _T("随机产生运动方块颜色");
	
/////////////////////////////////////////////////////////////////////////////
// CDialogColorSetup dialog


CDialogColorSetup::CDialogColorSetup(CWnd* pParent /*=NULL*/)
	: CDialog(CDialogColorSetup::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDialogColorSetup)
	m_bRandomCubeColor = FALSE;
	m_FirstLeft = _T("");
	//}}AFX_DATA_INIT

	m_clrCube=RGB(0,0,0);//方块颜色
	m_clrDeclareCube=RGB(0,0,0);//声明区域的方块颜色
	m_clrMaxRect=RGB(0,0,0);//最大区域颜色
	m_clrDeclareRect=RGB(0,0,0);//声明区域颜色
	m_clrDiamondsRect=RGB(0,0,0);//运行区域颜色
	m_clrLine=RGB(0,0,0);//方格线颜色
	m_clrDeclareFont=RGB(0,0,0);	//声明区域的字体颜色
	m_clrGameOverFont=RGB(0,0,0);	//游戏结束字体的颜色
	
}


void CDialogColorSetup::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDialogColorSetup)
	DDX_Control(pDX, IDC_TAB1, m_TabSetup);
	DDX_Control(pDX, IDC_COMBO_COLOR, m_ComboColor);
	DDX_Check(pDX, IDC_CHECK1, m_bRandomCubeColor);
	DDX_Text(pDX, IDC_EDIT1, m_FirstLeft);
	DDV_MaxChars(pDX, m_FirstLeft, 1);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDialogColorSetup, CDialog)
	//{{AFX_MSG_MAP(CDialogColorSetup)
	ON_BN_CLICKED(IDC_BUTTON_CHANGE, OnButtonChange)
	ON_WM_SHOWWINDOW()
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
	ON_BN_CLICKED(IDC_BUTTON_DEFAULT, OnButtonDefault)
	ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDialogColorSetup message handlers

void CDialogColorSetup::OnButtonChange() 
{
	// TODO: Add your control notification handler code here
	//m_ComboColor.SetSelectedColorValue(RGB(255,255,255));
	CColorDialog dlg;
	dlg.m_cc.Flags|=CC_RGBINIT;//CC_PREVENTFULLOPEN|CC_RGBINIT
	dlg.m_cc.rgbResult=m_ComboColor.GetSelectedColorValue();

	if(dlg.DoModal()==IDOK)
	{
		m_ComboColor.ChangeColor(dlg.GetColor());
		Invalidate(true);
	}
}

void CDialogColorSetup::OnOK() 
{
	// TODO: Add extra validation here
		//颜色设置
	
	UpdateData(TRUE);

	m_clrCube=m_ComboColor.GetColorValue(0);//方块颜色
	m_clrDeclareCube=m_ComboColor.GetColorValue(1);//声明区域的方块颜色
	m_clrMaxRect=m_ComboColor.GetColorValue(2);//最大区域颜色
	m_clrDeclareRect=m_ComboColor.GetColorValue(3);//声明区域颜色
	m_clrDiamondsRect=m_ComboColor.GetColorValue(4);//运行区域颜色
	m_clrLine=m_ComboColor.GetColorValue(5);//方格线颜色
	m_clrDeclareFont=m_ComboColor.GetColorValue(6);	//声明区域的字体颜色
	m_clrGameOverFont=m_ComboColor.GetColorValue(7);	//游戏结束字体的颜色
	
	CWinApp* pApp = AfxGetApp();
	pApp->WriteProfileInt(szSection, clrCube, m_clrCube);
	pApp->WriteProfileInt(szSection, clrDeclareCube, m_clrDeclareCube);
	pApp->WriteProfileInt(szSection,clrMaxRect ,m_clrMaxRect );
	pApp->WriteProfileInt(szSection,clrDeclareRect , m_clrDeclareRect);
	pApp->WriteProfileInt(szSection,clrDiamondsRect , m_clrDiamondsRect);
	pApp->WriteProfileInt(szSection, clrLine, m_clrLine);
	pApp->WriteProfileInt(szSection, clrDeclareFont,m_clrDeclareFont );
	pApp->WriteProfileInt(szSection,clrGameOverFont , m_clrGameOverFont);
	pApp->WriteProfileInt(szSection, bRandomCubeColor,m_bRandomCubeColor );

	CDialog::OnOK();
}

void CDialogColorSetup::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	UpdateData(FALSE);//让CHECK控件更新

	// TODO: Add your message handler code here
	m_ComboColor.ChangeColor(0,m_clrCube);
	m_ComboColor.ChangeColor(1,m_clrDeclareCube);
	m_ComboColor.ChangeColor(2,m_clrMaxRect);
	m_ComboColor.ChangeColor(3,m_clrDeclareRect);
	m_ComboColor.ChangeColor(4,m_clrDiamondsRect);
	m_ComboColor.ChangeColor(5,m_clrLine);
	m_ComboColor.ChangeColor(6,m_clrDeclareFont);
	m_ComboColor.ChangeColor(7,m_clrGameOverFont);
	Invalidate(FALSE);

}

BOOL CDialogColorSetup::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	ButtonOK.SubclassDlgItem(IDOK,this);
	ButtonOK.SetIcon(IDI_ICON_OK,IDI_ICON_OK);
	ButtonCancel.SubclassDlgItem(IDCANCEL,this);
	ButtonCancel.SetIcon(IDI_ICON_CANCEL,IDI_ICON_CANCEL);	
	
	TC_ITEM* m_pTCItem;
	m_pTCItem=new TC_ITEM;
	m_pTCItem->mask=TCIF_TEXT;
	m_pTCItem->pszText="颜色设置";
	m_TabSetup.InsertItem(0,m_pTCItem);

	m_pTCItem->pszText="键盘控制设置";
	m_TabSetup.InsertItem(1,m_pTCItem);

	//界面开始时显示颜色设置
		GetDlgItem(IDC_COMBO_COLOR)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_CHECK1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTON_CHANGE)->ShowWindow(SW_SHOW);

		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT8)->ShowWindow(SW_HIDE);

		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC8)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC9)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_HIDE);


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

void CDialogColorSetup::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	if(m_TabSetup.GetCurSel()==0)//颜色设置
	{
		GetDlgItem(IDC_COMBO_COLOR)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_CHECK1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_BUTTON_CHANGE)->ShowWindow(SW_SHOW);
	
		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_EDIT8)->ShowWindow(SW_HIDE);

		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC8)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC9)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_HIDE);
	}
	else	//键盘控制设置
	{
		GetDlgItem(IDC_COMBO_COLOR)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_CHECK1)->ShowWindow(SW_HIDE);
		GetDlgItem(IDC_BUTTON_CHANGE)->ShowWindow(SW_HIDE);

		GetDlgItem(IDC_EDIT1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT3)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT4)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT5)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT6)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT7)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_EDIT8)->ShowWindow(SW_SHOW);

		GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC4)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC5)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC6)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC7)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC8)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC9)->ShowWindow(SW_SHOW);
		GetDlgItem(IDC_STATIC10)->ShowWindow(SW_SHOW);
	}

	*pResult = 0;
}

void CDialogColorSetup::OnButtonDefault() 
{
	m_bRandomCubeColor=TRUE;	//运动方块颜色随即产生
	UpdateData(FALSE);
	m_clrCube=RGB(255,255,200);//运动方块颜色
	m_clrMaxRect=RGB(64,128,128);	//最大区域颜色
	m_clrDeclareRect=RGB(190,190,190);	//声明区域颜色
	m_clrDiamondsRect=RGB(57,83,60);	//运行区域颜色
	m_clrLine=RGB(45,100,50);		//方格线颜色
	m_clrDeclareCube=RGB(0,0,0);			//声明区域的方块颜色
	m_clrDeclareFont=RGB(0,0,0);	//声明区域的字体颜色
	m_clrGameOverFont=RGB(20,20,255);	//游戏结束字体的颜色
//更新颜色
	m_ComboColor.ChangeColor(0,m_clrCube);
	m_ComboColor.ChangeColor(1,m_clrDeclareCube);
	m_ComboColor.ChangeColor(2,m_clrMaxRect);
	m_ComboColor.ChangeColor(3,m_clrDeclareRect);
	m_ComboColor.ChangeColor(4,m_clrDiamondsRect);
	m_ComboColor.ChangeColor(5,m_clrLine);
	m_ComboColor.ChangeColor(6,m_clrDeclareFont);
	m_ComboColor.ChangeColor(7,m_clrGameOverFont);
	Invalidate(FALSE);
}

void CDialogColorSetup::OnChangeEdit1() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

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