精华内容
下载资源
问答
  • MFC原理简介,新手看懂MFC代码

    千次阅读 2017-07-23 21:30:20
    简要写了一点MFC的原理,目的是能让初学者看懂IDE自动生成的代码的一篇文章
    • 在编程时程序员会看到一个以工程名为类名的类创建的名为 theAPP 的对象,这个对象就是我们要写的程序。(该类是 CWinApp的派生类)
    • 上面提到的以工程名为类名的类有一个成员函数,其函数原型为

      BOOL InitInstance()

      该函数就是我们写程序体的地方,在这个函数中写一个MessageBox函数,那么你按F5时就会弹出一个消息框

    • 如何让自己写的程序弹出一个对话框呢?

      • 首先,需要添加对话框资源
      • 其次需要在上面提到的InitInstance()函数中写淡出对话框的代码
      • 使用CDialogEx创建一个对话框对象(参数为对话框ID)并调用DoModal成员函数,即可调用对话框

        CDialogEx dlg(对话框ID);
        dlg.DoModal();
      • 使用派生类时不需要传递参数,因为这个派生类的构造函数会自动向基类送参数

        CDialog dlg();        //CDialog是CDialogEx的派生类
        dlg.DoModal();
    • 基于对话框的MFC程序的构架一般是两个类,一个类是上面提到的会生成 theAPP 对象的类,另一个是写主对话框中的内容的类

    • 第二个类中需要编写消息处理函数,所谓消息处理函数举个例子就是,你点一下对话框中的确定按钮,然后程序实现什么功能

      简单来说,一个消息ID对应一个消息处理函数,就像这样:

      ON_BN_CLICKED(IDOK, &CMFC应用Dlg::OnBnClickedOk()

      IDOK这个消息对应OnBnClickedOk()函数

      • 在VS的类向导中可以看到所有以WM_为前缀的消息

      也有些函数没有对应的消息ID,因为与这些函数对应的消息是唯一的,无需使用消息ID来区分

    总结一下

    MFC的组成:
    - 必须有一个CWinApp的派生类;
    - 必须用派生类在全局定义一个对象theApp;
    - 在派生类中必须重写InitInstance虚函数;
    - MFC程序就用CWinApp派生类中的InitInstance虚函数作为主函数;

    MFC对话框程序的消息处理(消息映射机制)
    - 为一个对话框模板建立一个与之关联的CDialog或CDialogEx派生类;
    - 在需要启动对话框用派生类定义一个对象,在用对象调用DoModal成员函数;
    - MFC如果要处理一个消息,只要打开类向导,选择在下拉中这个对话框类;
    - 在消息列表中就可以选择你需要的消息,双击即可建立消息映射函数;
    - 消息映射函数就是:一个消息(和一个窗口)对应一个函数的地址

    参考资料:
    吕鑫MFC教程

    展开全文
  • 可以帮助我们更加清晰的认识MFC程序的构成(之后再分析由VS工具自动生产的MFC代码,发现大体上都是差不多的),保存为Test.cpp,编译后即可运行。 #include class CMyApp:public CWinApp//定义MyApp应用程序类,继承...

    可以帮助我们更加清晰的认识MFC程序的构成(之后再分析由VS工具自动生产的MFC代码,发现大体上都是差不多的),保存为Test.cpp,编译后即可运行。

    #include<afxwin.h>
    class	CMyApp:public CWinApp//定义MyApp应用程序类,继承CWinApp而来
    {
    public:
    	virtual BOOL InitInstance();
    };
    class CMainWindow:public CFrameWnd//定义主窗口类,继承主框架类CFrameWnd
    {
    public:
    	CMainWindow();
    protected:
    	afx_msg void OnPaint();//afx_msg MFC程序标志,表示声明的是一个消息响应函数
    	DECLARE_MESSAGE_MAP()//用来定义消息映射的宏
    };
    CMyApp myApp;
    BOOL CMyApp::InitInstance()//实例初始化
    {
    	m_pMainWnd=new CMainWindow;//定义窗口
    	
    	m_pMainWnd->ShowWindow(m_nCmdShow);//显示窗口
    	m_pMainWnd->UpdateWindow();//更新窗口
    	return TRUE;
    }
    
    BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)//消息映射
    ON_WM_PAINT()
    END_MESSAGE_MAP()
    
    CMainWindow::CMainWindow()//使用默认的构造函数创建窗口
    {
    	Create(NULL,_T("The Window For MFC"));
    }
    
    void CMainWindow::OnPaint()//绘制窗口
    {
    	CPaintDC dc(this);
    	CRect rect;
    	GetClientRect(&rect);//获得客户区矩形区域
    	dc.DrawText(_T("HELLO,MyMFC!!!"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);//在窗口中输出文本
    }


    展开全文
  • MFC代码创建窗口

    千次阅读 2016-11-21 20:04:11
    创建MFC的项目的向导中,选择基于对话框,其他默认即可。 会自动创建3个类:CAboutDlg、CXXXApp和CXXXDlg这3个类,删除CAboutDlg和CXXXDlg类,删除方法:删除CXXXDlg的头文件和cpp文件即可。 3、添加类 通过类向导...

    1、效果图:
    这里写图片描述

    2、创建基于对话框的项目

    1. 创建MFC的项目的向导中,选择基于对话框,其他默认即可。
    2. 会自动创建3个类:CAboutDlg、CXXXApp和CXXXDlg这3个类,删除CAboutDlg和CXXXDlg类,删除方法:删除CXXXDlg的头文件和cpp文件即可。

    3、添加类
    通过类向导添加窗口类,继承与CWnd类

    这里写图片描述

    添加的类CMyWnd继承CWnd类:

    这里写图片描述

    4、在CMyWnd类的构造函数中,利用AfxRegisterWndClass函数注册窗口类,利用CreateEx创建窗口。

    /*
      1、AfxRegisterWndClass函数是注册窗口类,可以设置窗口的颜色((HBRUSH)GetStockObject(GRAY_BRUSH))
      2、CreateEx是创建窗口,参数可以设置窗口的风格
      3、菜单栏需要自己添加,在资源视图中可以添加。
      4、AfxRegisterWndClass最后一个参数是设置窗口的图标,需要自己添加Icon资源.
    */
    CMyWnd::CMyWnd()
    {
          LPCTSTR className = AfxRegisterWndClass( CS_VREDRAW | CS_HREDRAW, ( HCURSOR)0, ( HBRUSH)GetStockObject( GRAY_BRUSH), AfxGetApp()->LoadIcon (IDI_ICON_GLOBE));
          CMenu menu;
         menu.LoadMenuW( IDR_MENU);
         CreateEx( WS_EX_OVERLAPPEDWINDOW, className, _T( "XXX" ), WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , (HMENU )menu, NULL);
    }
    

    5、初始化窗口,在CXXXApp类的InitInstace成员函数实现:
    首先要添加窗口类的头文件;然后删除InitInstace函数内之前的代码,并且return TRUE;添加一下代码:

    BOOL CMyProjectApp::InitInstance()
    {
         m_pMainWnd = new CMyWnd();
         m_pMainWnd->ShowWindow(m_nCmdShow);
         m_pMainWnd->UpdateWindow();
         return TRUE;
    }
    
    展开全文
  • MFC代码修改窗口属性

    千次阅读 2016-06-16 17:50:43
    在创建窗口时属性页中的属性都是可以通过代码来动态设置的 主要用到两个函数 GetWindowLongPtr(__in HWND hWnd,//窗口句柄  __in int nIndex //要获取的类型 ); SetWindowLongPtr(  __in HWND hWnd, //窗口句柄...

    在创建窗口时属性页中的属性都是可以通过代码来动态设置的


    主要用到两个函数

    GetWindowLongPtr(__in HWND hWnd,//窗口句柄
        __in int nIndex //要获取的类型

    );

    SetWindowLongPtr(

        __in HWND hWnd, //窗口句柄
        __in int nIndex, //要设置的类型
        __in LONG dwNewLong//设置的值

    );

    或者

    BOOL ModifyStyle
    (
    DWORD dwRemove,
    DWORD dwAdd,
    UINT nFlags=0
    );

    基本步骤为:

    1.取得窗口当前属性值

    2.修改属性值

    3.设置新的属性值

    或者

    ModifyStyle修改窗口属性

    代码示例:

    //取得窗口当前属性值
    LONG_PTR Style = ::GetWindowLongPtr(pMainDlg->m_hWnd,GWL_STYLE);
    //修改属性值(取消标题栏,取消系统按钮,取消边框)
    Style = Style &~WS_CAPTION &~WS_SYSMENU &~WS_SIZEBOX;
    //设置修改后的属性值
    ::SetWindowLongPtr(pMainDlg->m_hWnd, GWL_STYLE, Style);

    常见窗口属性值:

    /*
     * Window Styles窗口属性
     */
    #define WS_OVERLAPPED       0x00000000L		//重叠
    #define WS_POPUP            0x80000000L		//弹出式
    #define WS_CHILD            0x40000000L		//子类型
    #define WS_MINIMIZE         0x20000000L		//最小化状态
    #define WS_VISIBLE          0x10000000L		//可见
    #define WS_DISABLED         0x08000000L		//可用
    #define WS_CLIPSIBLINGS     0x04000000L		//
    #define WS_CLIPCHILDREN     0x02000000L		//
    #define WS_MAXIMIZE         0x01000000L		//最大化状态
    #define WS_CAPTION          0x00C00000L     /* WS_BORDER | WS_DLGFRAME  */
    #define WS_BORDER           0x00800000L		//边框
    #define WS_DLGFRAME         0x00400000L		//边框类型
    #define WS_VSCROLL          0x00200000L		//垂直滚动条
    #define WS_HSCROLL          0x00100000L		//水平滚动条
    #define WS_SYSMENU          0x00080000L		//系统菜单
    #define WS_THICKFRAME       0x00040000L		//边框类型
    #define WS_GROUP            0x00020000L		//
    #define WS_TABSTOP          0x00010000L		//
    
    #define WS_MINIMIZEBOX      0x00020000L		//最小化按钮
    #define WS_MAXIMIZEBOX      0x00010000L		//最大化按钮
    
    
    #define WS_TILED            WS_OVERLAPPED	/
    #define WS_ICONIC           WS_MINIMIZE		
    #define WS_SIZEBOX          WS_THICKFRAME		
    #define WS_TILEDWINDOW      WS_OVERLAPPEDWINDOW		
    
    /*
     * Common Window Styles	组合窗口属性
     */
    #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED     | \
                                 WS_CAPTION        | \
                                 WS_SYSMENU        | \
                                 WS_THICKFRAME     | \
                                 WS_MINIMIZEBOX    | \
                                 WS_MAXIMIZEBOX)		//重叠窗口
    
    #define WS_POPUPWINDOW      (WS_POPUP          | \
                                 WS_BORDER         | \
                                 WS_SYSMENU)		//弹出式窗口
    
    #define WS_CHILDWINDOW      (WS_CHILD)		//子窗口
    
    /*
     * Extended Window Styles	扩展的窗口属性
     */
    #define WS_EX_DLGMODALFRAME     0x00000001L		//
    #define WS_EX_NOPARENTNOTIFY    0x00000004L		//
    #define WS_EX_TOPMOST           0x00000008L		//
    #define WS_EX_ACCEPTFILES       0x00000010L		//
    #define WS_EX_TRANSPARENT       0x00000020L		//
    #if(WINVER >= 0x0400)
    #define WS_EX_MDICHILD          0x00000040L		//
    #define WS_EX_TOOLWINDOW        0x00000080L		//
    #define WS_EX_WINDOWEDGE        0x00000100L		//
    #define WS_EX_CLIENTEDGE        0x00000200L		//
    #define WS_EX_CONTEXTHELP       0x00000400L		//
    
    #endif /* WINVER >= 0x0400 */
    #if(WINVER >= 0x0400)
    
    #define WS_EX_RIGHT             0x00001000L
    #define WS_EX_LEFT              0x00000000L
    #define WS_EX_RTLREADING        0x00002000L
    #define WS_EX_LTRREADING        0x00000000L
    #define WS_EX_LEFTSCROLLBAR     0x00004000L
    #define WS_EX_RIGHTSCROLLBAR    0x00000000L
    
    #define WS_EX_CONTROLPARENT     0x00010000L
    #define WS_EX_STATICEDGE        0x00020000L
    #define WS_EX_APPWINDOW         0x00040000L
    
    
    #define WS_EX_OVERLAPPEDWINDOW  (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE)
    #define WS_EX_PALETTEWINDOW     (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)






    展开全文
  • 猛犸代码助手 是为了提高... 使用模板插件机制,根据不同的项目模板可以生成ASP、PHP、C#Winform、Silverght、Java Andriod,VC++MFC项目,生成项目完整,代码规范、易读易改, 能够直接运行或者用开发环境编译运行。绿
  • 刚刚开始看深入浅出MFC,碰到一个小程序,就敲了一下,结果40行的代码搞了一上午才调试出来。贴出来大家共享一下:具体注意事项以及说明见代码注释。 //第一个头文件编译出错,需要修改一下编译器设置,具体的是...
  • MFC代码功能直接用--播放flash

    千次阅读 2014-09-28 18:38:34
    如在网页中嵌入flash,可以得到一些意想不到的效果,学习MFC的我们就想,该如何给自己的程序添加Flash文件呢? 编程环境:VC++6.0 + windows7-64bit + 支持activeX控件 具体步骤: 打开VC++6.0,新建MFC工程...
  • 开发人员可以说完全跟多语言翻译解脱开来,而且保证写的代码可读性非常高,不用去定义一堆无意义的ID,想显示 啥就写啥 ,如:SetWindowText(_("标题")); poEdit 的使用网上有介绍,现在关键要注意的是,我们是用...
  • 原来的一个MFC Project,现在想把这个代码集成到C#的项目当中 目前的想法是新建一个VC.NET的类库项目,将原来的MFC项目中的核心代码添加到类库项目当中 然后在新的C#项目中引用类库项目,进而实现集成。 不...
  • 用最短的MFC代码创建一个窗口

    千次阅读 2004-07-01 00:54:00
    代码如下 文件1:stdafx.cpp #include "stdafx.h" 文件2:stdafx.h #include 文件3:minMFCwin.cpp #include "stdafx.h" class CMfcApp : public CWinApp{public: virtual BOOL InitInstance();}; CMfcApp theApp; ...
  • VS2010-MFC VS2010的MFC例子代码

    热门讨论 2010-11-09 23:10:50
    VS2010-MFC VS2010的MFC例子代码
  • 查看MFC代码

    千次阅读 2011-11-14 16:00:20
    在vc6开发界面中,打开文件,然后选择C:/Program Files/Microsoft Visual Studio/VC98/MFC/SRC/MFC.bsc(具体目录还要根据自己VC的安装路径)。 打开文件以后,选择TOOLS ->Source Browser 然后在identifier中输入你...
  • 两种方法查看MFC代码

    千次阅读 2018-11-10 07:39:17
    两种方法查看MFC代码
  • 查看MFC的源代码

    千次阅读 2006-05-21 11:12:00
    查看MFC的源代码MFC的全部源代码都是公开的,看看MFC的源代码对windows编程是很有帮助的如何查看MFC的源代码MFC代码的存放路径在哪里呢如何你在安装的时候选择了安装源代码,那么在VC的安装目录下就可以找到MFC的...
  • MFC获取错误代码

    2018-02-25 20:03:45
    使用下面的函数获取错误代码:GetLastError()但是这个函数只能得到错误代码,并不能得到具体的错误信息,想要得到具体的错误信息,需要这个函数:FormatMessge(),具体这个函数怎么使用,可以去查函数定义或者百度;...
  • c++\MFC测试代码的运行时间

    千次阅读 2017-06-05 10:49:22
    有时候需要测试某段代码的运行时间,在Windows平台下可以尝试以下几种方法: 方法一 利用GetTickCount函数(ms) 代码: CString str;   long t1=GetTickCount();//程序段开始前取得系统运行时间(ms) 。。。。。...
  • 如何在mfc中写代码使相对应的按钮实现代码的功能
  • MFC贪吃蛇+源代码

    千次阅读 2014-03-02 16:20:01
    1、源代码下载地址: 2、游戏开始界面 3、游戏运行界面 4、游戏结束界面   5、不足之处 a、代码写得比较乱,还没理解什么事模块化编程 b、MFC还有待进一步学习,多看优秀源码
  • 《深入解析MFC》源代码

    千次下载 2006-09-04 16:26:24
    《深入解析MFC》源代码
  • 我定义了一个按钮数组 每个成员都有不同的响应函数, 现在想要调用这些函数, 但是下标是变量, 由于函数比较多 所以不想用switch,想通过代码直接触发某个成员的响应函数, 有办法吗?
  • MFC的源代码可以说是微软共享给广大程序员的一笔很宝贵的财富,尤其是调试的时候会调试进去,让我们看到“有代码有真相”。无幻兄弟已经总结过两种方法查看MFC代码。笔者再在此基础上锦上添花。  一:快速实现类...
  • 阅读MFC代码的方法

    千次阅读 2010-06-01 10:26:00
    MFC程序以下几个函数很重要:  CWinApp::InitInstance()、CWinApp::ExitInitInstance()、CView::OnCreate()、CView::OnInitUpdate()、CMainFrame::OnCreate()、CMainFrame::CreateClient()。  ...
  • 关于MFC自动缩放类代码的使用,使用这个代码,头文件需要插入哪个目录,在主程序里怎么调用?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,116
精华内容 65,646
关键字:

mfc代码