mfc单文档编程教程
‘壹’ 怎样用vc++6.0来编写MFC
文件--》新建->工程 -->MFC
VC6 有三种选择 基于对话框的 MFC 工程
基于单文档的 MFC 工程
基于多文档的 MFC 工程
这样的问题,建议,直接在网络里搜索 VC++ 6.0 视频教程,看看怎么点的。
或者看本基础书的图片!!! 看图片。
‘贰’ 单文档MFC
菜单的响应函数在MFC ClassWizard里添加,一般加在CXXXView里。然后在自动生成的菜单响应函数里添加对Dialog的操作。在此之前,先在CXXXView的头文件里声明代表Dialogue的成员变量,同时包含Dialog的头文件。
在Dialo编辑界面中双击OK按钮控件,MFC会自动帮你在Dialog的cpp文件中添加响应函数,想保存什么就在里面写就行。
‘叁’ 编写MFC下的单文档程序,绘制圆,圆心坐标和半径由对话框输入
void CCircle_TestView::OnDraw(CDC* pDC)
{
CCircle_TestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HPEN hPen; //画笔;
hPen=CreatePen(PS_DASH,2,0x00ff00);//生成绿色画笔;
SelectObject(pDC->m_hDC,hPen);//把画笔引入设备场境 ;
Arc(pDC->m_hDC,100,100,300,300,350,500,350,500);//画圆 ;
SelectObject(pDC->m_hDC,hPen);//复原 ;
}
总结:其实画圆还可以使用Ellipse函数。
‘肆’ 编写一个mfc程序(无论复杂还是简单的)基本的步骤可以归纳为什么
第一步,选择文档类型。有三个选项,单文档,多文档,对话框。单文档就是像Windows记事本、Windows画图、Windows写字板这样的程序,一个程序只有一个文档处于编辑状态;多文档指的是想Word,Excel这样可以在一个MDI窗口里面同时处理多个文档的类型。对话框方式值得是像Windows扫雷、纸牌那样直接在对话框进行操作的程序。 这一步还有一个选项,叫做Doc/View,指的是对于文档处理来说,MFC可以提供一个数据结构,能够自动存储、编辑、浏览文件。可根据当前编写的应用程序决定上述选项。
第二步,数据库选项。可以选择不需要数据库、只需要头文件、带支持和不带文件支持的数据视图四个选项。如果需要用数据库,那么还可以直接用Data Source来选择数据源,比如是本地数据库文件还是一个服务器上的数据库
第三步,选择文档部件。这个可能比较难于理解,需要必要的ACTIVE X支持。简单的说,就是这样的:比如,当前WORD文档需要嵌入一个EXCEL表格,然后你编辑这个WORD文档内的表格,双击后就激活了EXCEL,编辑完成后退出EXCEL,又回到了WORD,这时候数据也被更新了。这种应用程序内可以再嵌套一个应用程序的技术被微软公司称为ACTIVE X。ActiveX的类型有容器性,多服务器型,单服务器型,同时可以作为容器和服务器,等等。是哪一种应用真的需要认真学习一下。比如说上面的WORD嵌入EXCEL,那么WORD相当于容器,EXCEL相当于服务器;但是其实EXCEL被设计为同时可以作为容器和服务器,到底怎么理解,还得看你的程序的需求。至于最后两个选项,自动化和ACTIVE X,指的是您可以选择从本地计算机找到一些现成的ACTIVE X 控件插入到本工程中去,比如上面的WORD控件和EXCEL空间,当然还有很多,你如果用过VB就会更理解这个概念。
第四步,是比较简单的,就是界面上的一堆工具条怎么设计的问题,docking表示那种可以拖起来自动选择合适位置放下去的工具条;Initial Status Bar表示初始化就有状态条;Print那个表示打印和打印预览;Context那个表示根据环境变化自动提供帮助的功能;3D表示控件外观立体化;MPI表示应用WINDOWS电邮消息机制;SOCKET表示使用WINDOWS socket 2.0 TCP/IP通信。再下面一个选项可以选择外观与IE浏览器是否一致,最后一个选项可以选择菜单中显示最近打开的4个文档或者更多最近打开的文档。在Advanced高级功能中,有一些关于本工程涉及的数据文件的用法,包括文件名后缀,在windows注册表里面登记信息,主窗体边框风格等等
第五步,也算好理解,就是工程风格,是MFC标准(比如WORD)还是Windows Explore,左边带一个目录树,右边是展开选项那种,然后下面四个选项是问是不是文档中自动加注释,以及MFC随工程发布时使用的类型,是动态库还是静态库,其实这个选项意义不大,但是效率上和部署上有些差异。
第六步,也就是最后一步,选择主类的名称、主类文件名、基类、文档类等等。
上述六步,不是那么容易简单理解的,需要做几个类型的应用程序才能彻底吃透,比如WORD类型的、网络服务器类型的、数据库应用类型的、IE类型的等等,一个例子消化不了这么多内容。
‘伍’ 1 在一个单文档应用程序中实现单击鼠标左键在屏幕中显示一个自定义的模态对话框的功能。用MFC的编程题,谢
这些貌似都是一些教程上的案例,应该很多书上都能找到。
第三题:
1、创建一个单文档工程;
2、给View类加一个WM_LBUTTONDOWN的windows message(别告诉我不知道怎么加);
3、在消息响应函数void CMyView::OnLButtonDown(UINT nFlags, CPoint point)中加一个MessageBox("好好学习!");就行了。
第四题:
1、创建一个单文档工程;
2、添加一个对话框insert/Resource/Dialog,New一个就行了;
3、按要求添加控件:三个编辑框、一个button,其实可以再加三个static text,注明加数1、加数2及总和之类的,最好也把ID改了,比如说IDC_EDIT_ADD1、IDC_EDIT_ADD2、IDC_EDIT_SUM之类的,这都是习惯问题;
4、点View/Classwizad,给刚才的对话框添加一个新类,如CAdd;
5、同样在Classwizad中给编辑框添加变量,m_nAdd1\m_nAdd2\m_nSum;
6、给button添加消息响应函数,加入如下代码:
UpdateData(TRUE);
m_nSum=m_nAdd1+m_nAdd2;
UpdateData(FALSE);
7、添加一个调用对话框的消息,这个看你喜欢怎么调用了,菜单命令、工具栏命令,或者鼠标单击也行,以鼠标左键单击为例(为了承接上一题,呵呵),添加鼠标单击消息,添加代码如下:
CAdd dlg;
if(!dlg.DoModal())
{
MessageBox("Create Dialog Error!");
}
对了,记得在你的MyView.h中加这一行代码:#include "Add.h"
完毕!
‘陆’ VC++ 使用MFC可视化编程 创建一个存储和显示学生信息的单文档应用程序
这个简单 根本不需要什么文档,直接 用对话框 就行了,如果想要菜单自己手动添加,创建一个clist的链表,输入一个记录一个,最后显示的时候遍历一下,找出对应的就可以了.
‘柒’ MFC 单文档文件 可视化编程
这个简单
根本不需要什么文档,直接
用对话框
就行了,如果想要菜单自己手动添加,创建一个clist的链表,输入一个记录一个,最后显示的时候遍历一下,找出对应的就可以了.
‘捌’ 深入浅出MFC 基础
1.c++语法要掌握.
2.windows程序设计是必需的,特别是象单文档程序,如果不了解消息处理细节,你直接上mfc的封装类,光一个CFrameWnd就可以让你深陷其中,云里雾里.
一些简单内容,直接跳过去就是了.
3.mfc学习,一本是李久近的,还是有一个国外的<深入解析mfc>.而侯俊杰的就省省吧.
1.c++法法掌握,主要是一本书<深入探索c++对象模型>.看完这本,神马语法都是浮云.
rtti,为类维护一个static类,由于static对于类的多个实例来说仍然只有一个,这样就可以通过static记录类继承信息来判断父子关系.c++编译器自动实现,只要关心相应的函数就行了.
mfc,刚好就是明显提供了这种类似的实现,主要用于消息映射表遍历.
象com类,它是用128位数,也就是uuid用来表达一个类名称,然后通过字符串比较,来判断到底要返回嘛类,这个体会一下.
‘玖’ MFC中单文档的程序执行流程是怎样的
你问的这个问题很复杂 要在这里三言两语说清楚是不可能的了
我只能推荐你看两本书 里面有接受
一是孙鑫的《vc++深入详解》 讲的很基础
再有就是候俊杰的《深入浅出mfc》 这本书深入的挖掘了底层的代码 看懂了你就明白了单文档多文档到底是怎么执行的了 不过很有难度
我有电子书 可以问我要
‘拾’ 如何在MFC单文档里添加按钮
在单文档视图(SDI)结构中,视图一般用来显示数据。但是,有时也希望在视图中显示按钮或其他的控件,以满足用户的需要。VC6.0没有直接给出在视图中添加按钮的向导(或许有,我没找到)。下面我将给出一个手动添加按钮并使按钮具有响应事件 的功能。
第一步:添加一个按钮
1、首先在**View.h中定义一个按钮标识
#define ID_BUTTON 100
2、 其次给C**View类添加一个成员变量
CButton m_myButton; //这条语句写在**View.h的类的定义中,要声明为PUBLIC类型
3、然后创建按钮实例
m_myButton.Create(_T("示例按钮"), //按钮的caption属性,按钮的显示
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON, // 按钮也是一种窗体,同样有窗体风格,这些常量通过或运算使按钮达到一定的效果,这些常量的含义可以参考MSDN。
CRect(20,320,50,340), //这个参数指出按钮在视图中的位置和按钮的大小。
this, //这个指针指向按钮这个窗体的父窗体
ID_BUTTON); //这是刚才为按钮定义的常量,按钮的控制ID
4、然后调用函数m_MyButton.ShowWindow(SW_HIDE)这个函数根据参数的样式显示按钮,此时的参数表示隐藏按钮,如果要显示按钮,可以以SW_SHOW作为参数,这样,就是在想用到按钮的时候调用函数m_MyButton.ShowWindow(SW_SHOW)显示出按钮。
说明:按钮在C**View::OnCreate()函数中初始化。这个函数是当窗体被创建的时候调用的一个初始化函数。像按钮这样的对象在这个时候初始化是比较合适的。
int C**View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
m_MyButton.Create(_T("示例按钮"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_ICON,
CRect(20,320,50,340), this, ID_BUTTON);
m_MyButton.SetIcon(AfxGetApp()->LoadIcon(ICON_SAVE)); //给按钮加载一个图标
m_MyButton.ShowWindow(SW_HIDE);
return 0;
}
第二步:消息函数
此时的按钮是不能响应任何消息的。下面我们手动添加按钮的消息。
1、声明函数原型
在C**View类的声明中声明一个protected类型的函数
//{{AFX_MSG(CSoftView)
afx_msg void OnMyButton();
//}}AFX_MSG
通常的做法,也是VC6.0向导的做法,会将消息处理函数声明在//{{AFX_MSG(CSoftView)~~~ //}}AFX_MSG标记中,当然,在VS.NET 2003中,我们将看不到这个标记。真正起作用的是afx_msg,它表明随后的函数是一个消息处理函数。
2、函数的实现
下面实现函数,显然,这个函数也是C**View类的一个成员函数,所以在**View.cpp中实现
void C**View::OnMyButton()
{
MessageBox("你点击了我");
}
3、如果这个时候你就运行程序的话,按钮依然不会响应任何事件。因为事件的产生的消息是交给视图的,所以我们需要把消息从视图传给按钮,实现起来很简单,在**View.cpp中找到如下的标记:
BEGIN_MESSAGE_MAP(C**View, CView)
END_MESSAGE_MAP()
在这个标记中写入如下代码:ON_BN_CLICKED(ID_BUTTON, OnMybutton)
这句代码是说,让ID_BUTTON所指的对象响应单击(ON_BN_CLICKED)事件,事件的处理函数是OnMybutton。这是MFC的消息映射机制。对于这个机制,在此不多说,待后续。
到此,一个可以响应单击事件的按钮就创建好了。如果要响应其他事件,可以按照这个方式创建,只需要改动这个过程中的第3步,将ON_BN_CLICKED改成希望响应的消息类型就可以了。