zoukankan      html  css  js  c++  java
  • C++ MFC学习 (一)

    MFC:微软基础类库,以C++形式封装了WindowsAPI,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

          其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类

    MFC把Windows SDK API函数包装成了几百个类,给WIndows操作系统提供了面向对象的接口,支持可重用性、自包含性以及其他OPP原则。

    头文件

    #pragma once
    #include <afxwin.h>    //导入mfc头文件
    
    class MyApp :public CWinApp   //CWinApp应用程序类
    {
    public:
        //程序入口
        virtual BOOL InitInstance();
    
    };
    
    class MyFrame:public CFrameWnd  //窗口类框架
    {
    public:
        MyFrame();
    };

    源文件

    #include "mfc.h"
    
    MyApp app;  //全局应用程序对象,有且仅有一个
    
    BOOL MyApp::InitInstance() {
        //创建窗口
        MyFrame *frame = new MyFrame;
        frame->ShowWindow(SW_SHOWNORMAL);
        frame->UpdateWindow();
    
        m_pMainWnd = frame;        //m_pMainWnd 保存指向应用程序的主窗口的指针 
        return TRUE;
    }
    
    MyFrame::MyFrame() {
        Create(NULL,TEXT("Windows窗体"));
    }

    注意:对项目进行配置,配置为在共享DLL中使用

    MFC消息映射机制:

    消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程序,然后就调用OnLButtonDown。

       消息映射机制:   需要先声明宏  在.h文件中声明

              需要分界宏     在.cpp中实现

              将消息宏  写到 分界宏 中间      在手册上去找消息对应的消息宏

              声明函数原型   在.h 中

              实现函数   如 鼠标消息,键盘,绘图等

    // 1.声明消息映射机制需要的宏   .h
        DECLARE_MESSAGE_MAP();//声明宏 提供消息映射机制
    
    //2. 在.cpp中  实现  分界宏   用来映射对应的消息
    BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
        ON_WM_LBUTTONDOWN()   //鼠标左键按下
        //ON_WM_KEYDOWN()       //键盘按下
        ON_WM_CHAR()          //键盘字符  按键按下 到松开
        ON_WM_PAINT()          //绘图
    END_MESSAGE_MAP()
    
    //3.声明函数
        afx_msg void OnLButtonDown(UINT, CPoint);   //鼠标按下消息声明
        afx_msg void OnKeyDown(UINT, UINT, UINT);    //键盘按下消息声明
        afx_msg void OnChar(UINT, UINT, UINT);
        afx_msg void OnPaint();                        //绘图消息声明
    
    //4. 实现函数
    void MyFrame::OnLButtonDown(UINT, CPoint point)
    {
        TCHAR buf[1024];
        wsprintf(buf, TEXT("x = %d,y = %d"), point.x, point.y);
    
        //MFC的字符串  CString
    
        MessageBox(buf);
    }
    
    void MyFrame::OnKeyDown(UINT, UINT, UINT)
    {
        MessageBox(TEXT("按下键盘"));
    }
    
    void MyFrame::OnChar(UINT nchar, UINT, UINT)
    {
        CString str;
        str.Format(TEXT("按下了%c键"), nchar);
        MessageBox(str);
    }
  • 相关阅读:
    FortiGate 硬件加速
    RSA modulus too small: 512 < minimum 768 bits
    VMXNET3 vs E1000E and E1000
    BZOJ 1432: [ZJOI2009]Function(新生必做的水题)
    BZOJ 2456: mode(新生必做的水题)
    BZOJ 1968: [Ahoi2005]COMMON 约数研究(新生必做的水题)
    BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
    海量数据处理算法总结【超详解】
    POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
    图的存储结构之邻接表(详解)
  • 原文地址:https://www.cnblogs.com/lg804721251/p/14312101.html
Copyright © 2011-2022 走看看