呓语 | 杨英明的个人博客

专注于c++、Python,欢迎交流

By

加中实训第一天(笔记+代码) - 2013.5.28

实训第一天实现了一个在窗口上画线的程序。

下面是实现流程:

 

 工具: 


VC++6.0、Visual.Assist.X

 

准备工作


 

1.
New->Win32 Application(Game) //创建一个项目

2.
New->HeaderFile(game.h)->#include <afxwin.h> //在项目里创建一个头文件,在头文件里添加一行代码

3.
New->ResourceScript(game.rc) //在项目里创建一个资源文件

4.
Project->setting->General
在MicrosoftFoundationClasses栏目里选择 Use MFC in a Static Library

5.
View->classWizard
依次点“是”->Ok->Ok

6.
Insert->New class
在Class type里选择Generic Class
在Name里填写GameApp
在Base class里添加CWinApp  public //表示CWinApp是GameApp的基类
这样就创建了一个GameApp类,VC会自动生成一个GameApp.h文件(类声明)和GameApp.cpp文件(类实现)

7.
继续创建一个GameWnd类
Insert->New class
在Class type里选择MFC Class //注意和上一个不一样
在Name里填写GameWnd
在Baseclass里添加CFrameWnd  public 


准备工作结束,开始写代码

 


1.
打开GameApp.h
添加成员函数 BOOL InitInstance();

2.
打开GameApp.cpp
添加:
GameApp theapp;

BOOL GameApp::InitInstance() //BOOL必须用大写,用bool会出错
{
 m_pMainWnd=new GameWnd;  //内存里申请一块空间,把空间首地址给前面的指针
}

3.
因为上一步用到了GameWnd的构造函数,所以
打开GameWnd.cpp
在GameWnd::GameWnd()里添加为
GameWnd::GameWnd()
{
 Create(NULL,"烟台大学"); //窗口的名称,标题栏
}

4.
打开InitInstance
继续添加为
BOOL GameApp::InitInstance()
{
 m_pMainWnd=new GameWnd;  //内存里申请一块空间,把空间首地址给前面的指针
 m_pMainWnd->ShowWindow(SW_SHOW);
 m_pMainWnd->UpdateWindow();
 return true;
}

5.
在GameApp.cpp里添加头文件
#include "GameWnd.h" //因为用到了new GameWnd

6.
打开GameWnd.h
将类声明里面默认的protected:改为public:

7.
打开GameWnd.cpp
注释掉#include "stdafx.h"
//#include "stdafx.h"

=========================================================================
下面开始就在GameWnd类里面写,不用管GameApp了

8.
在GameWnd类上右键,单击Add Windows Message Handler //表示添加一个windows句柄
找到WM_PAINT双击
点OK

9.
打开GameWnd->OnPaint(),开始写代码
在CPaintDC dc(this); 后面添加
 dc.MoveTo(100,200);
 dc.LineTo(300,400); 
这样一条线就出来了。
继续画,看能不能画出一个桌子来。

10.
试验:
打开MSDN
查找 Rectangle(100,200,300,400); //矩形
 Ellipse(100,200,300,300); //圆
函数,了解他们的作用,并掌握MSDN的使用方法。

11.
继续写代码,接下来要实现在窗口上任意画线。

右键GameWnd单击 Add Member Variable
在第一个框里填:CPoint
在第二个框里填:start
在access里选Private
点OK
找到刚才添加的变量,在下面继续添加终点
CPoint end;
这样就变成:
private:
CPoint start;
CPoint end;
以上是给GameWnd类添加private变量。

12.
找到构造函数GameWnd::GameWnd() //双击GameWnd()
之前已经有了
GameWnd::GameWnd()
{
 Create(NULL,"烟台大学");
}
继续添加
要实现功能,当鼠标左键按下去的时候,把鼠标所在的点坐标给起点,当松开的时候,把此事鼠标所在的点坐标给终点。

在GameWnd类上右键,单击Add Windows Message Handler //表示添加一个windows句柄
找到WM_LBUTTONDOWN双击 //表示按下鼠标时
找到WM_LBUTTONUP双击 //表示松开鼠标
点ADD And EDIT //加入并编辑

13.
找到添加的OnLButtonDown()句柄函数,添加代码 
start=point; //将鼠标按下时的坐标赋给起点
函数变成:
void GameWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 start=point;
 CFrameWnd::OnLButtonDown(nFlags, point);
}
同样修改OnLButtonUp()函数,添加end=point; //将鼠标松开时的点坐标赋给终点,这样一条线就出来了

14.
运行发现无反应,修改代码
在OnLButtonUp()后面继续添加一行代码:
Invalidate(false); //鼠标松开的时候将屏幕刷新一下

//如果出现24个错误,多编译几遍就没了。如果不管用,把项目关了重新开启一遍。如果还是不行,把项目所在文件夹下debug文件夹删掉。

15.
运行代码,可以在窗口上任意画线了!


 

下面是代码资源链接:

http://pan.baidu.com/share/link?shareid=684887&uk=1779322541

##原创声明 **转载请注明:[呓语](http://www.yangyingming.com) » [加中实训第一天(笔记+代码) - 2013.5.28](http://www.yangyingming.com/article/336)**