MFC(Visual Studio)

来源:互联网 发布:那个软件有手机型号 编辑:程序博客网 时间:2024/05/19 23:56

MFC简介

MFC应用程序

MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

API

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。这在某种程度上很像Windows的天然代码。而其他的语言只是提供一种能自动而且更容易的访问API的方法。凡是在 Windows工作环境底下执行的应用程序,都可以调用Windows API。

stdafx.h

stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展)。所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
所有的MFC实现文件第一条语句都是:#include “stdafx.h”。在它前面的所有代码将被忽略,所以其他的头文件应该在这一行后面被包含。否则,你将会得到“No such file or directory”的错误提示。
你编写的任何.cpp文件都必须首先包含stdafx.h。如果你有工程文件里的大多数.cpp文件需要.h文件,顺便将它们加在stdafx.h(后部)上,然后预编译stdafx.cpp。

MFC消息分类

1、窗口消息:对窗口操作有关,创建、绘制、移动、销毁窗口等,包括使用鼠标、键盘等与操作窗口有关的动作,一般以 WM_ 开头
2、命令消息:处理或执行用户请求,通过选择选择菜单项、单击工具栏按钮和按加速键(热键、快捷键)等产生
3、控件消息:移动鼠标、单击等,由按钮、编辑框、下拉列表框、组合框等控件产生。其消息映射宏是在消息前加上 ON_

类和对象

类是具有相同属性和相同方法的对象的集合
如:动物是一个类(父类),哺乳动物是动物类的一个对象,哺乳动物类下面还有长颈鹿这个对象。。。呼吸是所有动物所公有的特性,适用于动物类下的所有对象,但是不同的动物还有自己所私有的特性
现实生活中,每一个实体事物都可以作为一个对象,将着相似地方的对象归为一类(class)。
类的声明:
class 类名
{
private:
私有的数据成员和函数;
public:
公有的数据成员和函数;
protected:
受保护的数据成员和函数;
};
在类外进行定义:函数类型 类名::函数名(函数参数)
char animal::breath(int frequency)
{
…;
return …;
}
关键字private、public和protected称为成员访问限定符。用这些访问限定符来声明各成员的访问属性。
private:只能在本类中访问,在类外不能访问。
public:既能在本类中访问,又能在类外通过该类的对象进行访问。
protected:与private类似,不能被类外访问,但能被派生类的成员函数访问。
说明:如果在类的声明中没有使用关键字,则系统将数据成员和函数默认为是私有的。
对象的3种声明方法:
1、 先声明类类型,后定义对象
类名 对象名; (多个对象用逗号隔开)
animal mammals;
2、 在声明类的同时声明对象
class 类名
{
……
}对象名; (多个对象用逗号隔开)
3、不出现类名,直接声明对象
class
{
……
}对象名; (多个对象用逗号隔开)
在声明对象之后,可以调用类中的方法:类名 对象名;
C++中两个特殊函数:构造函数和析构函数
构造函数:
当声明一个类的属性时,可以不进行初始化,因为在C++中有专门的初始化函数对该属性进行初始化。处理对象的初始化的函数就是构造函数。作用是在完成对象的初始化的同时,将对象的属性初始化。在创建对象时,由系统自动调用。
析构函数:
当一个对象的生命周期结束时,应当去释放该对象所占用的内存空间。这时,系统会自动调用析构函数来进行一些清理工作
类的继承和派生
类的继承是指新的类从已有类中获得已有的特性,例如,数据成员、成员函数等。而从已有类产生新类的过程就称为派生。其中,已有类称为基类或父类,新的类称为派生类或子类。
派生类的声明:
class 派生类名:继承方式 基类名
{
派生类新添加的成员
}
派生类的继承方式:一个类中,其成员的访问权限有public、private和protected之分。而类的继承方式也有三种:公有继承、私有继承和受保护继承
1.公有继承:声明一个派生类时,将继承方式设为public,称为公有继承。公有继承方式派生出来的类称为公有派生类,其基类称为公有基类。
采用公有方式继承时,基类的公有成员和受保护的成员在派生类中是可以引用的,而其私有成员则不能在派生类中引用
2.私有继承:声明一个派生类时,将继承方式设为private,该种继承方式称为私有继承。私有继承方式派生出来的类称为私有派生类,其基类称为私有基类。
采用私有方式继承时,基类的公有成员和受保护的成员在派生类中相当于是私有成员。而其私有成员不能在派生类中引用。
3.受保护继承:声明一个派生类时,继承方式设为protected,该种继承方式称为受保护继承。受保护继承方式派生出来的类称为受保护派生类,其基类称为受保护基类。
采用受保护方式继承时,基类的公有成员和受保护成员在派生类中相当于是受保护成员。而其私有成员不能在派生类中引用。
单一继承:一个子类只继承一个父类
多重继承:一个类同时继承多个父类,用逗号分割不同继承方式和父类
class 派生类名:继承方式 基类名, 继承方式 基类名……
{
派生类新添加的成员
}

对话框程序

UpdateData

UpdateData(1)//更新对话框中获取的数据UpdateData(0)//程序中的数据改变更新(回显)到对话框中

点击按钮出现文件浏览选择

添加按钮以后添加事件处理程序

void C经纬点重心识别Dlg::OnBnClickedButton1()//加载图像按钮{    // TODO:  在此添加控件通知处理程序代码    //打开文件 定义四种格式的文件bmp gif jpg tiff    CString filter;    filter = "所有文件(*.bmp,*.jpg,*.gif,*tiff, *.png)|*.bmp;*.jpg;*.gif;*.tiff;*.png| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tiff)|*.tiff|PNG(*.png)|*.png||";    CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter, NULL);    //按下确定按钮 dlg.DoModal() 函数显示对话框    if (dlg.DoModal() == IDOK)    {        //打开对话框获取图像信息        CString BmpName = dlg.GetPathName();     //获取文件路径名   如D:\pic\abc.bmp        //CString EntName = dlg.GetFileExt();      //获取文件扩展名        //EntName.MakeLower();                     //将文件扩展名转换为一个小写字符        if (BmpName)        {            CString csrcimgname = BmpName;            string srcimgname = csrcimgname;            //freopen("help.txt", "w", stdout); cout << srcimgname << endl;//输出获取到的图像路径到help.txt            IplImage* src = cvLoadImage(srcimgname.c_str(), CV_LOAD_IMAGE_GRAYSCALE);            cvShowImage("zxsb", src);   waitKey(0);        }    }}

未完待续ing。。。

0 0
原创粉丝点击