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);
}

 

posted @ 2021-01-22 10:57  Trying_only  阅读(462)  评论(0编辑  收藏  举报