加中实训第一天(笔记+代码) - 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