Visual Studio 2010(VS)--消消乐定制版?--添加反应计时
上期回顾(上期主要是把原来16格,扩展到了36格的,带18组文字图形的消消乐):
本期将给他加一个计时,就是当第一次按下的时候,如果一定时间没有按第二次,就隐藏
1.0 点击左边的工具栏,找到组件下的timer定时器,双击,给程序添加定时器,默认为timer3
2.0 修改timer3的属性Interval改为2000,让他点了第一个控件显示后,等待2S
3.0 双击timer3图形,就会在代码页面生成这个定时器的代码,如下
private void timer3_Tick(object sender, EventArgs e)
{
}
4.0 在定时器timer3中,添加到时隐藏功能,具体代码如下
private void timer3_Tick(object sender, EventArgs e)
{
//定时事件到了就停止定时器
timer3.Stop();
//把刚才单击两次显示的控件覆盖隐藏
firstClicked.ForeColor = firstClicked.BackColor;
//重置引用变量,使其下次能再次记忆两次单击
firstClicked = null;
}
5.0 在单击组件的响应处理程序label_Click中,加入timer3的开启
if (firstClicked == null)
{
firstClicked = clickedLabel;//那他就跟踪当前单击的控件标签
firstClicked.ForeColor = www.sychzs.cn;//让他的前景色单独变成黑色,才能显示
timer2.Start();//游戏时间计时
timer3.Start();//单击后计时,限时隐藏
System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"D:360MoveDataUsersyanjun.wangDesktopshake.wav");
www.sychzs.cn();
return;//当第一次单击后,会用return跳出这个单机响应程序
}
6.0 保存按F5调试,这时候的效果应该是,单击一个控件后,延时2S,如果没有单击第二个控件就会隐藏,如果在时间内选择了就不会隐藏
Visual Studio 2010(VS)--消消乐定制版?--添加反应计时
上期回顾(上期主要是把原来16格,扩展到了36格的,带18组文字图形的消消乐):
本期将给他加一个计时,就是当第一次按下的时候,如果一定时间没有按第二次,就隐藏
1.0 点击左边的工具栏,找到组件下的timer定时器,双击,给程序添加定时器,默认为timer3
2.0 修改timer3的属性Interval改为2000,让他点了第一个控件显示后,等待2S
3.0 双击timer3图形,就会在代码页面生成这个定时器的代码,如下
private void timer3_Tick(object sender, EventArgs e)
? ? ? ? {
? ? ? ? }
4.0 在定时器timer3中,添加到时隐藏功能,具体代码如下
private void timer3_Tick(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //定时事件到了就停止定时器
? ? ? ? ? ? timer3.Stop();
? ? ? ? ? ? //把刚才单击两次显示的控件覆盖隐藏
? ? ? ? ? ? firstClicked.ForeColor = firstClicked.BackColor;
? ? ? ? ? ? //重置引用变量,使其下次能再次记忆两次单击
? ? ? ? ? ? firstClicked = null;
? ? ? ? }
5.0 在单击组件的响应处理程序label_Click中,加入timer3的开启
if (firstClicked == null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? firstClicked = clickedLabel;//那他就跟踪当前单击的控件标签
? ? ? ? ? ? ? ? ? ? firstClicked.ForeColor = www.sychzs.cn;//让他的前景色单独变成黑色,才能显示
? ? ? ? ? ? ? ? ? ? timer2.Start();//游戏时间计时
? ? ? ? ? ? ? ? ? ? timer3.Start();//单击后计时,限时隐藏
? ? ? ? ? ? ? ? ? ? System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"D:\360MoveData\Users\www.sychzs.cn\Desktop\shake.wav");
? ? ? ? ? ? ? ? ? ? www.sychzs.cn();
? ? ? ? ? ? ? ? ? ? return;//当第一次单击后,会用return跳出这个单机响应程序
? ? ? ? ? ? ? ? }
6.0 保存按F5调试,这时候的效果应该是,单击一个控件后,延时2S,如果没有单击第二个控件就会隐藏,如果在时间内选择了就不会隐藏?
实验环境:Windows XP,Visual Studio 2010 ?Ultimate
1 创建项目
? ? 1.1 文件>>新建>>项目,选择“其他语言”>>Visual C++,选中“MFC应用程序”。项目名改为“First”。如下图所示:
? ??
1.2 在上图中,单击确认后,将会弹出”MFC应用向导“,在其中的”应用程序类型“界面中,设置如下图所示。
1.3 直接点击”完成“,其他的保存默认设置即可。
2 点击菜单栏的“视图”,依次找到“解决方案资源管理器”,“工具箱”,“类视图”,“资源视图”和“属性窗口”,分别单击它们。菜单如下图所示。
创建好工程后,效果图如下图所示
3 为视图类添加颜色成员变量m_nCurColor和绘图函数DrawCircle
3.1 在“类视图”中找到CFirstView(视图类),右键单击,将会弹出一个向导,通过这个向导可以向这个类中添加变量和函数。如下图所示。
3.2 为CFirstView添加一个变量,如下图所示意。
3.3 为CFirstView添加一个函数,如下图所示。
3.4 添加定时器。
在“类视图”中右键单击,在弹出来的对话框中选择“属性”,在“属性”的上方,选择“消息”,在消息列表中找到WM_TIMER,在其右侧的下拉选项中选中OnTimer。如下图所示。
3.5 添加启动和停止按钮
3.5.1 双击“资源视图”中的Menu下的IDR_MAINFRAME,如下图所示。
3.5.2 在打开的主菜单中添加“设置”菜单,为“设置”添加“启动”和“停止”两个下拉菜单,他们的ID分别为ID_START和ID_STOP。
通过右击菜单,选择“属性”去设置。如下图所示。
3.5.3 为“启动”和“停止”添加事件处理函数。
右击“启动”,在弹出来的对话框中选择“添加事件处理程序”。如下图所示。
在弹出来的“事件处理程序向导”中,消息类型选择“COMMAND”,类列表选择CFirstView,然后单击“添加编辑”,即可在CFirstView类中
添加了一个OnStart()函数。
用同样的方法为“停止”添加事件处理函数。
4 添加代码
4.1 在CFirstView类的构造函数中,将m_nCurColor变量赋值为-1.如下所示。
CFirstView::CFirstView()
: m_nCurColor(0)
{
// TODO: 在此处添加构造代码
m_nCurColor=-1;//m_nCurColor表示当前需要让哪种颜色的灯闪烁。
}
4.2 完善刚才添加的DrawCircle函数,如下所示。
int CFirstView::DrawCircle(int CurColor, CDC* pDC)
{
pDC->Rectangle(80,80,220,440);
CRect rRect(100,100,200,200);
CRect gRect(100,210,200,310);
CRect yRect(100,320,200,420);
CBrush rBrush(RGB(255,0,0));
CBrush gBrush(RGB(0,0,255));
CBrush yBrush(RGB(255,255,0));
CBrush wBrush(RGB(255,255,255));
CBrush *pOldBrush;
if(CurColor==0)//CurColor表示当前红绿灯的颜色
{
pDC->Ellipse(&gRect);
pDC->Ellipse(&yRect);
pOldBrush=pDC->SelectObject(&rBrush);
pDC->Ellipse(&rRect);
}
else if(CurColor==1)
{
pDC->Ellipse(&rRect);
pDC->Ellipse(&yRect);
pOldBrush=pDC->SelectObject(&gBrush);
pDC->Ellipse(&gRect);
}
else if(CurColor==2)
{
pDC->Ellipse(&rRect);
pDC->Ellipse(&gRect);
pOldBrush=pDC->SelectObject(&yBrush);
pDC->Ellipse(&yRect);
}
else
{
pOldBrush=pDC->SelectObject(&wBrush);
pDC->Ellipse(&rRect);
pDC->Ellipse(&gRect);
pDC->Ellipse(&yRect);
}
pDC->SelectObject(pOldBrush);
return 0;
}
4.3 完善定时器函数OnTimer(),如下所示。
void CFirstView::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nCurColor=(++m_nCurColor)%3;
Invalidate();
CView::OnTimer(nIDEvent);
}
4.4 为“启动”和“停止”添加事件处理响应。
void CFirstView::OnStart()
{
// TODO: 在此添加命令处理程序代码
SetTimer(1,1000,NULL);
}
void CFirstView::OnStop()
{
// TODO: 在此添加命令处理程序代码
KillTimer(1);
m_nCurColor=-1;
Invalidate();
}
4.5 修改OnDraw函数
OnDraw函数是创建工程的时候就已经自动生成的了。由于他的pDC参数被注释了,因此要去掉其注释。并且在//TODO下方添加代码。如下所示。
void CFirstView::OnDraw(CDC* pDC)
{
CFirstDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
DrawCircle(m_nCurColor,pDC);
}
5 调试
在Visual Studio 2010 主菜单中单击“启动”|“启动调试”,生成可执行文件后,在程序的运行界面上,单击我们创建的“设置”|"启动"菜单,即可看到
红绿蓝三种颜色的“灯”循环点亮/熄灭。如下图所示。
6 工程源码。http://www.sychzs.cn/detail/q1302182594/5213571。
7 本项目的运行流程分析,请看《Visual Studio 2010——MFC应用程序调用顺序分析》。
8 参考文献
荣钦科技:李淑馨,陈伟 编著.Viusal C++ 2008程序设计完全自学教程.北京:清华大学出版社,2009
吕智,马瑞力等编著.Visual C++.NET精彩编程百例.北京:中国水利水电出版社,2004
梁兴柱主编.Visual C++.NET程序设计.北京:清华大学出版社,2010