实训第一天实现了一个在窗口上画线的程序。
下面是实现流程:
工具:
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 Library5.
View->classWizard依次点“是”->Ok->Ok6.
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 GameWnd6.
打开GameWnd.h将类声明里面默认的protected:改为public:7.
打开GameWnd.cpp注释掉#include "stdafx.h"//#include "stdafx.h"=========================================================================
下面开始就在GameWnd类里面写,不用管GameApp了8.
在GameWnd类上右键,单击Add Windows Message Handler //表示添加一个windows句柄找到WM_PAINT双击点OK9.
打开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.
运行代码,可以在窗口上任意画线了!
下面是代码资源链接: