一.窗口面板中显示内容
① 画出一个圆
1. 首先建立一个MFC项目,我这里取名为 draw
2. 在左边类视图中找到CDrawView类,面板上显示的东西和它有关,再找到CDrawView里面的 OnDraw ( CDC *pDC),双击它。
3. 可以看到void CDrawView::OnDraw(CDC* pDC)这个函数,在这里面写代码,在面板上显示出来。
4.在函数里面写代码 pDC->Ellipse(30,30,60,60); 其中Ellipse是椭圆,参数为两个点的坐标值(int x1,int y1,int x2,int y2);这样,一个圆就画好了,运行一下,可以看到窗口面板上画了一个圆。
②.在窗口面板上显示100个数,1到100,十行十列。
1. 把上面画圆的代码注释掉。还是在OnDraw函数里面写下面代码:
int x=10,y=10,temp=10; //x为横坐标,y为纵坐标,起始位置为(10,10) CString str; for(int i=1;i<=100;i++) { str.Format("%d",i); //把整型的数转换为字符串型 pDC->TextOut(x,y,str); //把数字在(x,y)处显示出来 x+=30; if(i==temp) // 当一行中满10个数,换行,y增加 { y+=30; temp+=10; x=10; } }
Ps:加法效率要比除法效率高,因此我们在上面换行时用到了temp这个变量,而没有用到 if (i%10==0)
③.消息的添加:点击鼠标左键,在窗口面板上画圆
1. 找到左边类视图中的CDrawView 在名字上点右键,点击Add Windows Message Handler (添加窗口消息句柄)
1. 在弹出的对话框的最左边一栏找到 VM_LBUTTONDOWN (鼠标左键的消息),双击,VM_LBUTTONDOWN跑到右边空白处,再双击右边的VM_LBUTTONDOWN,进入到void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)函数里面。
1. 在函数里面写入下面代码:
CDC *pdc=GetDC(); //通过GetDC();函数创建了一个CDC类型对象指针
int r=10;
pdc->Ellipse(point.x-r,point.y-r,point.x+r,point.y+r);
1. 这样功能就实现了,当我们在窗口面板上点击左键,就会画出一个圆。编译,运行,如下效果。
④.在上面的基础上,添加一个菜单按钮使每次点击,画出来的圆半径+10。
找到左边的资源视图,找到里面的Menu,再找到里面的IDR_MAINFRAME,双击,出现菜单栏的编辑状态,在帮助右边双击下,出现对话框,在Caption里面输入按钮的名称,这里我输入 radius+10 如图:
1. 对按钮添加消息,在 radius+10处鼠标右键,点击ClassWizard,对话框中Project里面是draw ,ObjectIDs 选择 ID_MENUITEM32771(刚才新建按钮的ID,查看ID的方法,双击按钮),Classname选择 CDrawView(因为,要在视图中显示出来),Message选择COMMAND,再点击右边的AddFunction ,再点击下面的EditCode ,进入函数界面。
3.在②的代码中,我们是用的变量r作为半径,因此在void CDrawView::OnMenuitem32771()中写代码:r+=10;编译一下,一个错误,drawView.cpp(136) : error C2065: 'r' : undeclared identifier,因为变量r是在void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)这里面定义的,不是全局变量,因此把 int r=10;移到函数外边。
4.编译,运行,在面板中鼠标左键画圆,点击菜单栏中的 radius+10 按钮,画出来的圆半径变大。如图效果: