C语言工程
一、课程目的
1. 了解与掌握创建MFC项目的方法。 2. 了解并掌握创建菜单并绑定点击事件。 3. 了解与掌握创建对话框、创建通用对话框。 4. 了解与掌握弹出消息框,并建立消息映射。 5. 了解与掌握读取二进制文件。
6. 了解与掌握在程序里绘制直线、折线、弧线、饼图、矩形和椭圆、以及如何清屏和
发出声音。
二、课程内容
创建一个MFC项目、在此基础上创建菜单并绑定点击事件、创建对话框、创建通用对话框、弹出消息框、消息映射、读取二进制文件、在程序里绘制直线、折现、弧线、饼图、矩形和椭圆,以及如何清屏和发出声音等内容。 三、实验仪、设备:计算机、VC 6.0 四、实验步骤
(1) 创建一个MFC项目 1、建立基本的MFC文本菜单
首先创建MFC 应用框架,如下图建立 MFC AppWisard[exe]文件
2、创建单文本文件
3、然后一路next 就可以产生一个标准的MFC文本文件框了。 (2) 创建菜单并绑定点击事件
Resourceview中主要是生成的MFC文本文件所用到的控件,点击其中Menu前面的加号双击箭头所指处进入框架编辑页面。如下右图就是要显示显示页面的结构。
在页面编辑区双击小红椭圆圈起的控件就会弹出对属性对话框,在caption处添加主菜单名称。
双击下图的小蓝圈处添加子菜单,弹出属性对话框在ID处添加ID变量,方便以后编程中调用。
当子菜单名称(caption)添加完成以后,右击子菜单出现浮动菜单选择classWizard,如图1所示箭头指向处,出现图2,然后再message选项栏中选择COMMAND,定义它的(COMMAND)控制函数,这样我们在点击子菜单的时候,就能触发控制函数。点击Add function添加控制函数,然后编辑代码 edit code。
COMMAND 对应的是当操作者点击下拉菜单时(例丰璐一号),它所对应触发的事件。 点击 edit code以后就会出现源码编辑区(在fileview中source file中的mainfram.cpp中)。
在箭头所指区域中进行代码的编辑。
每次添加新的函数即:add function时,VC会自动在CMainFrame.h。这个头文件中加入一个函数声明。而且会在 CMainFrame.cpp消息映射区域中自动生成ON_COMMAND(),或者是 ON_UPDATE_COMMAND_UI(),来出动控制函数,举个例子ON_COMMAND(ID_MOVE1,ONMove1),就是表示当出动ID_MOVE1所对应的框架按钮时,就会触动ONMove1这个函数,ONMove1就是MainFrame这个类的一个函数。编辑相应的控制动作,只需要在ONMove1函数中编写即可。 (3) 弹出对话框
MessageBox(NULL,TEXT(\
(4) 消息映射
可以接收消息和命令的所有框架类都有自已的消息映射。框架利用消息映射把消息、命令与它们的处理函数链接起来。从CCmdTarget类派生的任何类都可以有消息映射。虽然叫作“消息映射”,但消息映射既可以处理消息,也可以处理命令。消息主要有三种类型,即windows消息,命令消息和控件通知。
实现方法:MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数对照表,即消息映射表。在消息映射表中,消息与对应的消息处理
函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类能否处理此消息。如果能处理该消息,则同样依照静态表很容易找到并调用对应的消息处理函数。 (5) 读取二进制文件
CFile f;CFileException e;char* pFileName = \
if( !f.Open( pFileName, CFile::modeCreate | CFile::modeWrite, &e ) ) {#ifdef _DEBUG
afxDump << \ }
(6) 在程序里绘制直线、折线、弧线、饼图、矩形和椭圆,以及如何清屏和发出声音。 1.调用颜色对话框:
void CTestView::OnColor() { CColorDialog dlg;if(dlg.DoModal()==IDOK){cor=dlg.GetColor();} }
2.声明画笔的语句是: CPen pen;
pen.CreatePen(PS_SOLID,1,m_CurrentPenColor); dc.SelectObject(&pen);
3.声明画刷的语句是:CBrush brush(m_CurrentBrushColor);dc.SelectObject(&brush); 4.画直线的语句:dc.MoveTo(sx,sy); dc.LineTo(ex,ey); 具体实现方法:
void CTestView::OnZhixian() { CClientDC dc(this);CPen pen1; pen1.CreatePen(PS_SOLID,1,cor);zhixian dlg; dlg.m_sx=150;dlg.m_sy=100; dlg.m_ex=320;dlg.m_ey=300; if(dlg.DoModal()==IDOK)
{
s_point=dlg.m_sx;s_time=dlg.m_sy;e_point=dlg.m_ex;e_time=dlg.m_ey;
dc.SelectObject(&pen1);dc.MoveTo(s_point,s_time);dc.LineTo(e_point,e_time); } }
5.画折线的语句:POINT pts[]={{n1,n2},{n3,n4},{n5,n6},{n7,n8}};dc.Polyline(pts,4); void CTestView::OnPolyline() { CClientDC dc(this);CBrush brush(RGB(255,255,0)); CPen pen1; pen1.CreatePen(PS_SOLID,1,cor); POINT pts[] = {{500,193},{400,107},{323,160}};
dc.SelectObject(&pen1); dc.Polyline(pts,3); }
6.画弧线的语句:dc.Arc(m_sx,m_sy,m_ex,m_ey,m_hsx,m_hsy,m_hex,m_hey); 具体实现方法:
void CTestView::OnHuxian() { CClientDC dc(this); CPen pen1; pen1.CreatePen(PS_SOLID,1,cor);dialogArc dlg; dlg.m_sx=250;dlg.m_sy=250;dlg.m_ex=350; dlg.m_ey=350;dlg.m_hsx=270;dlg.m_hsy=270;dlg.m_hex=310; dlg.m_hey=310;if(dlg.DoModal()==IDOK) {
m_sx=dlg.m_sx;m_sy=dlg.m_sy;m_ex=dlg.m_ex; m_ey=dlg.m_ey;m_hsx=dlg.m_hsx;m_hsy=dlg.m_hsy; m_hex=dlg.m_hex;m_hey=dlg.m_hey; dc.SelectObject(&pen1); dc.Arc(m_sx,m_sy,m_ex,m_ey,m_hsx,m_hsy,m_hex,m_hey); } }