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(,,TEXT("为了部落"));
dc.Ellipse(,,,);//画椭圆,两点锁定矩形内切圆
}

帮助文档:《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=;

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

最新文章

  1. iOS 分享至友盟分享
  2. LINUX磁盘分区、格式化、挂载、卸载全程详解
  3. dstoon系统中学习
  4. 导致VC不能释放的几个原因
  5. RGB to HSI, HSI to RGB Conversion Calculator
  6. 一致性哈希算法以及其PHP实现
  7. ansible 控制windows
  8. IIS7下配置SSAS通过HTTP远程连接
  9. Javascript 的类型转换之减号
  10. 用Spring的mappingDirectoryLocations来配置Hibernate映射文件
  11. Linux free -m 详细说明
  12. Weex 学习教程
  13. poj1159 Palindrome
  14. nmon在线安装及使用
  15. ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释
  16. Android官方技术文档翻译——清单合并
  17. 四:客服端防护HTTP发送请求类
  18. (转)IIS7无法读取配置文件解决办法
  19. iOS边练边学--UITabBarController的简单使用
  20. LintCode-56.两数之和

热门文章

  1. Isx个人第4次作业—Alpha项目测试
  2. 使用Python写的WingPro7 Pyside2 和 PyQt5插件
  3. ValueError: The field admin.LogEntry.user was declared with a lazy reference to &#39;system.sysuser&#39;, bu
  4. Linux 常用工具openssh之ssh-agent
  5. RAID磁盘冗余阵列
  6. python+selenium爬取百度文库不能下载的word文档
  7. 《N诺机试指南》(二)C++自带实用函数
  8. Zabbix:主动模式
  9. MapReduce清洗数据进行可视化
  10. UnityTips:不要在发布版本中实现OnGUI方法