mfc的总结

1.项目创建
当用 win32 创建项目时。想用 mfc 的方式。只要改一个地方。


2.更改入口函数(前提是你自己会处理执行在main 函数之前的那些函数)


3.创建 mfc 时一般是基于对话框

4.默认的生成宏说明。

 //这里是生成的类型对应的是IDD_MFCAPPLICATION1_DIALOG资源 id
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(IDD_MFCAPPLICATION1_DIALOG, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

//这个宏表示绑定资源
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
}

//这些宏对应事件 相应事件在这个绑定
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()

//对话框初始化函数在一般在这里做相应的初始化
BOOL CMFCApplication1Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);         // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

5.工具箱

6.查看代码

7.资源视图(查看资源 id 等)

8.视图

9.控件的使用

10.控件的属性

11.控件的响应事件

12.添加到父窗口这里要注意的是目前还没有绑定控件只是添加的事件点击没用

只绑定了事件(如果只想要事件这就可以了)

13.绑定控件

钩控件变量 id 要选对

这里就是真的绑定了同时把控件自动给你初始化(这里可以理解成控件初始化)

 void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_BUTTON1, mybtn);
}


如果要想把控件也生成类也可以 这里右击控件不要用添加类因为继承类不完整

用类向导 不要搞错了是 mfc 类

选择基类 点击一

生成类

这里就有个坑 由于你的父窗口已经添加把这个控件添加成变量了。同时你现在又把控件生成类所以要手动改下

 包含头文件
 改变量名

这里一定要记得是哪个控件生成类因为 mfc 很乱不添加完后不知道是哪个控件添加了类 一般命名来区分 这里就可以自己添加控件的其它方法了

有的控件就不能这样添加只能代码写

像这些就只能自己加了

http://blog.51cto.com/haidragon/2087840
1. 新建
2. 在想要添加这个控件的类里包含对应的控件头文件
3. 声名一个变量
4. 父窗口在初始化函数初始化控件
用 create(this)等
5.同时要加上对应的显示函数 如:toolbar
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);

控件的使用记住:
1.显示不是自己想要的 查看属性改相应的属性
2.不同控件在 mfc 中有固定用法 像radio 就比较low
3.不同控件初始化不同像toolbar 最后还要来一句神一样的操作
4.查看 id 有没有 mfc 非常蛋疼的一个地方是有时没帮你添加id 在资源文件里也没有。
5.查看 id 是不是重复 这不得不说 mfc 神一样的操作。
6.查看 id 是不是默认生成的 id 有可能这个 id 被用了 像图片 id mfc 项目已经有那个 id。但是 mfc 还是默认生成那个 id。
7.检查俩种重要宏
8.不要出现在控件的构造函数里调控件。因为都没有初始化 this 是 null 像 this->...会出错。
9.没有调用控件里自己实现的函数。有可能是控件生成类时没有在父窗口中改过来。而是用的默认的。

原文地址:http://blog.51cto.com/haidragon/2088960

时间: 2024-10-09 03:12:08

mfc的总结的相关文章

《深入浅出MFC》第七章 简单而完整:MFC骨干程序

不二法门:熟记MFC类层次结构.经常使用的主要MFC类:CWinApp, CWnd<-CView, CWnd<-CFrameWnd, CFrameWnd<-CMDIFrameWnd, CFrameWnd<-CMDIChildWnd, CWnd<-CDialog, CWnd<-CControlBar, CControlBar<-CStatusBar, CControlBar<-CToolBar, CCmdTarget<-CDocument, CCmdTa

深入浅出MFC——消息映射与命令传递(六)

1. 消息分类: 2. 万流归宗——Command Target(CCmdTarget): 3. "消息映射"是MFC内建的一个信息分派机制.通过三个宏(DECLARE_MESSAGE_MAP/BEGIN.../ON.../END...)完成消息网的建构. 4. 注意:CWinThread派生自CCmdTarget,但没有DECLARE_/BEGIN_/END_宏组. 5. 消息映射与虚函数: 6.

MFC控件使用技巧:List Control

1)每列内容过长,显示不完整 只有加载数据的情况下,才会出现水平滚动条 解决方案: 可以添加如下一个空的内容项: m_List.InsertItem(0,NULL);//为了显示进度条 2)不允许点击修改第一列(当然最多能够让我们改动的也只有他了) MFC默认情况下可以修改第一列,其他的不允许修改(需要定制DrawItem) 解决方案: Edit Labels 属性设置为 False 3)报表的形式表示 View 属性设置为 Report 4)注意:不要和列表框控件混淆(英文名: List Bo

【mfc】用对话框分页实现用户登录

所谓的对话框分页就是点击完一个对话框的按钮,切换到另一个对话框, 这样的对话框多用于一些需要用户登录才能够进行操作的软件, 下面就用对话框分页来实现用户登录系统 一.基本目标 有如下的程序,输入用户名与密码,如果用户名为admin,密码为123456,那么则成功登录,切换到一个有"欢迎登录"与"关闭"按钮的对话框 如果用户名或者密码输入错误则弹出提示, 点击关闭能够关闭这个程序,不弹出用户登录的对话框. 二.制作过程 1.首先如同之前的<[mfc]对于对话框程

MFC中给控件添加变量,DoDataExchange中

DoDataExchange函数其实是一项数据动态绑定技术.比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的.你要添加新的变量就要用到DoDataExchange函数. 你要在对话框的构造函数里面初始化一个变量,再用DoDataExchange函数将它绑定到你的动态按扭中,比如:DDX_Check(pDX, IDC_CHECK1, m_Lesson1);这就是将m_Lesson1(这是一个外部变量,其定义在对话框的构造函数里)绑定到IDC_CHECK1中

MFC消息映射的原理:笔记

多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里面的每个类有很多成员函数(只说消息反映相关的成员函数啊),而且在派生类中,需要改写的也比较少(我用来做练习的程序就是那么一两个,呵呵).那么用c++的虚函数的实现机制会导致什么问题呢?就是大量虚表的建立使得空间浪费掉很多. 嗯-怎么办呢?于是各大c++名库(比如QT,MFC,VCL-)在消息映射的实

MFC-消息分派

前言 由于工作需要,这几天学了一点MFC,在AFX里看到很多熟悉的东西,如类型信息,序列化,窗口封装和消息分派.几乎每个界面库都必须提供这些基础服务,但提供的手法却千差万别.MFC大量地借用了宏,映射表来实现,而VCL则更多的在语言级别上给与支持.这其实是很容易理解的,因为C++是一个标准,不会因某个应用而随便扩展语言:相反Delphi完全由一个公司掌握,因此每支持一项新技术,变化最大的往往是语言本身. 学习MFC的代码,再对照VCL的实现,这真是一个很有意思的过程,其中可以看到两个框架在一些设

MFC中的DC CDC HDC由来由去理解

MFC中的DC CDC HDC由来由去理解 在此非常感谢博客主的究竟钻研,非常详细的参考资料:http://blog.csdn.net/yam_killer/article/details/7661449

(七):处理MFC

(一):简单介绍 为了可以在一个Winelib应用中使用MFC,你须要首先使用Winelib又一次编译MFC. 在理论上,你应该为Windows的MFC编写一个封装(怎样编写在后面介绍).可是,在实践中,对MFC来说.可能不是一个真正的解决方案: 数量巨大的API使得编写封装的工作量非常大 进一步说.MFC包括大量的API.这些API在制作封装的时候处理起来是非常复杂的. 即使你编写了封装,你也须要去改动MFC的头文件以使编译器不会堵塞他们. 在你应用中的非常大一部分MFC代码是以宏的形式展现的

MFC常用的类详细介绍

常用的MFC类 CRuntimeClass结构 在CRuntimeClass结构中定义了类名.对象所占存储空间的大小.类的版本号等成员变量及动态创建对象.派生关系判断等成员函数.每一个从CObject类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基类的信息. 要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时类型识别的MFC宏. CObject类 MFC的CObject类为程序员提供了对象诊断.运行时类型