zoukankan      html  css  js  c++  java
  • MFC/QT 学习笔记(二)——MFC入门

    MFC以C++形式封装了Windows API

    //实践

    编写MFC需要的头文件#include <afxwin.h>

    程序执行流程:

    1.实例化应用程序对象(有且只有一个)

    2.执行程序入口函数 InitInstance

    3.给框架类MyFrame对象动态分配空间(自动调用他的构造函数),在其构造函数内部,通过CWnd::Create 创建窗口

    4.框架类对象显示窗口 CWnd::ShowWindow

    5.框架类对象更新窗口 CWnd::UpdateWindow

    6.保存框架类对象指针 CWinThread::m_pMainWnd

    文件名:mfc.h

    #include <afxwin.h>//mfc头文件
    
    //应用程序类CWinApp,派生类
    Class MyApp: public CWinApp{
        public:
            virtual BOOL InitInstance(); //基类的虚函数,派生类只是重写,MFC程序的入口地址
    };
    
    //框架类CFrameWnd ,派生类MyFrame
    Class MyFrame: public CFrameWnd{
        public:
            MyFrame();//构造函数
            DECLARE_MESSAGE_MAP()//消息映射宏,声明必须用在类声明中,即 .h 文件中
            afx_msg void OnLButtonDown(UINT,CPoint)//鼠标声明,value
            afx_msg void OnChar(UINT,UINT,UINT)//键盘声明
            afx_msg void OnPaint()//绘画
    };

    文件名:mfc.cpp

    #include "mfc.h"//对应类声明的头文件
    
    MyApp app;//有且仅有一个全局的应用程序类对象
    
    BOOL MyApp::InitInstance(){//程序入口地址
        MyFrame *frame=new MyFrame;//1.创建框架类对象
    
        frame->ShowWindow(SW_SHOWNORMAL);//2.显示窗口
        frame->UpdateWindow();//3.更新窗口
    
        m_pMainWnd=frame;//4.保存指向应用程序主窗口的指针,实现自动管理
        return TRUE;//初始化正常则返回true
    }
    
    //分界宏
    BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
        ON_WM_LBUTTONDOWN()//鼠标左键按下 key
        ON_WM_CHAR()//键盘按下
    END_MESSAGE_MAP()
    
    MyFrame::MyFrame(){
        Create(NULL,TEXT("mfc"));//创建窗口
    }
    
    void MyFrame::OnLButtonDwon(UNIT,CPoint point){//鼠标按下
    /*
        TCHAR buf[1024];//TCHAR 是MFC中的字符数组
        wsprintf(buf,TEXT("x=%d,y=%d"),point.x,point.y);//转译
        MessageBox(buf);//区别于底层的MessageBox,MFC中实则是MessageBox method 在MSDN中可查
    */
        //mfc中的字符串 CString
        CString str;
        str.Format(TEXT("x=%d,,,y=%d"),point.x,point.y);//格式化
        MessageBox(str);
    }
    
    void MyFrame::OnChar(UNIT key,UNIT,UNIT){//键盘按下
        CString str;
        str.Format(TEXT("按下了 %c 键"),key);
        MessageBox(str);
    }
    
    void MyFrame::OnPaint(){//绘画
        CPaintDC dc(this);//this指定绘图设备
        //帮助文档,在CDC里找其他能画的图形
        dc.TextOutW(100,100,TEXT("为了部落"));
        dc.Ellipse(10,10,100,100);//画椭圆,两点锁定矩形内切圆
    }

    帮助文档:《VC++之MFC类库中文手册》。最上面是层次结构;最下面是消息映射宏。

    查找Create要搜索 :CFrameWnd::Create

    ps:右键项目->属性->常规->MFC的使用->在共享DLL中使用MFC

    //理论

    • 消息映射机制

    即将消息和成员函数互相关联的表,MFC中没有事件和信号桥的概念,只有每个消息映射一个函数

     ps:消息映射宏查找,在中文手册最下面。

    声明宏:

    DECLARE_MESSAGE_MAP()

    分界宏:

    BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)

    END_MESSAGE_MAP()

    程序执行流程:

      • 声明宏 写到 .h 中
      • 分界宏 写到 .cpp 中
      • 找消息宏 写到 分界宏 中
      • 把函数原型声明 写到 .h 中
      • 函数实现 写到 .cpp 中
    • windows 字符集 

    MessageBox(TEXT(“aaa”));

    TEXT 自适应编码转换(即,定义里可定制多字节和宽字节):

    右键项目->属性->常规->字符集->使用多字节字符集/使用Unicode字符集

    Ps:TCHAR 也有自适应编码转换

      

    “aaa”   多字节:一个字符对应一个字节

    L“aaa” 宽字节:一个字符对应多个字节 Unicode:UTF-8 3个;GBK 2个;

    多字节转为宽字节:MessageBox(L “aaa”);

    //统计字符串长度

    int num=0;
    
    char *p="aaa";
    num=strlen(p);
    
    wchar_t *p2="bbbb";
    num=wcslen(p2);

    //char* 与 CString 之间的转换

    C++ string 与 MFC CString 不可直接转换,要通过 char * .c_str();

    //char*->CString
    char *p3="ccc";
    CString str=CString(p3);
    
    //CString->char*
    CStringA tmp=str;
    char *pp=tmp.GetBuffer();
  • 相关阅读:
    给力牛人
    设计模式
    微软真的要放弃Windows品牌吗?
    SQL2005 Express 自动安装之命令行
    SQL where之 in 在变量
    数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF
    别浪费了你的大内存[转]
    QQ空间免费养5级花和拥有人参果
    asp.net2 统一搜索引擎关键字编码[转]
    把网速提高4倍的方法和动画教程
  • 原文地址:https://www.cnblogs.com/CowryGao/p/12339979.html
Copyright © 2011-2022 走看看