前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VC++6.0入门——第三讲 认识MFC框架

VC++6.0入门——第三讲 认识MFC框架

原创
作者头像
Arya
发布2024-11-15 10:51:42
190
发布2024-11-15 10:51:42
举报
文章被收录于专栏:后端开发专栏

文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!

今日推荐:【机器学习】机器学习回归模型全解析:线性回归、多项式回归、过拟合与泛化、向量相关性与岭回归的理论与实践

文章链接:https://cloud.tencent.com/developer/article/2465870

通过这篇文章学习机器学习中的回归任务是指通过训练数据学习一个映射关系,来预测连续值输出。与分类任务不同,回归任务的输出是一个实数值。

引出


VC++6.0入门——认识MFC框架

第三讲 MFC框架

本章将剖析基于MFC的框架程序,探讨MFC框架程序的内部组织结构。MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用。利用这些类,可以有效地帮助程序员完成Windows应用程序的开发。

新建项目

在这个程序中,我们自己没有编写任何代码,就生成了一个带有标题栏,具有最小化框、最大化框,具有系统菜单和一个可调边框的应用程序。这个程序和我们在第1章中所创建的程序类似,但比后者多了菜单栏、工具栏以及状态栏。这一切都是通过MFC AppWizard生成的。

类继承图查看

windows搜索内容

代码语言:c++
复制
class CWnd
{
public:
	BOOL CreateEx(
			DWORD dwExStyle,
			DWORD dwExStyle,      // extended window style
			LPCTSTR lpClassName,  // registered class name
			LPCTSTR lpWindowName, // window name
			DWORD dwStyle,        // window style
			int x,                // horizontal position of window
			int y,                // vertical position of window
			int nWidth,           // window width
			int nHeight,          // window height
			HWND hWndParent,      // handle to parent or owner window
			HMENU hMenu,          // menu handle or child identifier
			HINSTANCE hInstance,  // handle to application instance
			LPVOID lpParam);        // window-creation data
	BOOL ShowWindow(int nCmdShow);
	BOOL UpdateWindow();
public:
	HWND m_hWnd;
};

// 以下是具体的实现
BOOL CWnd::CreateEx(
			DWORD dwExStyle,
			DWORD dwExStyle,      // extended window style
			LPCTSTR lpClassName,  // registered class name
			LPCTSTR lpWindowName, // window name
			DWORD dwStyle,        // window style
			int x,                // horizontal position of window
			int y,                // vertical position of window
			int nWidth,           // window width
			int nHeight,          // window height
			HWND hWndParent,      // handle to parent or owner window
			HMENU hMenu,          // menu handle or child identifier
			HINSTANCE hInstance,  // handle to application instance
			LPVOID lpParam)        // window-creation data
{
	// ::表示调用的是平台全局API函数,
	m_hWnd =::CreateWindowEx(dwExStyle,lpClassName,dwStyle,x,y,nWidth,nHeight,hWndParent,
							hMenu,hInstance,lpParam);
	if(m_hWnd!=NULL)
		return TRUE;
	else
		return FALSE;
}

BOOL CWnd::ShowWindow(int nCmdShow)
{

	return ::ShowWindow(m_hWnd,nCmdShow);
}

BOOL CWnd::UpdateWindow()
{
	return ::UpdateWindow(m_hWnd);
}



// 主程序
int WINAPI WinMain(  
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow)              // show state);
{
	WNDCLASS cls;
	cls.cbClsExtra = 0;
	cls.cbWndExtra = 0;
	.....
	RegisterClass(&cls);

	CWnd wnd;
	wnd.CreateEx(...);
	wnd.ShowWindow(SW_SHOWNORMAL);
	wnd.UpdateWindow();

	HWND hwnd;
	hwnd=CreateWindowEx();
	::ShowWindow(hwnd,SW_SHOWNORMAL);
	::UpdateWindow(hwnd);

	...
}

如何加按钮

编译并运行Tst程序,但发现按钮并没有显示出来。问题的原因有两个:一是这里定义的btn对象是个局部对象,当执行到OnCreate函数的右大括号(})时,该对象的生命周期就结束了,就会发生析构。前面已经讲过,如果一个窗口与一个C++窗口类对象相关联,当这个C++对象生命周期结束时,该对象在析构时通常会把与之相关联的窗口资源进行回收。这就是说,当执行到例3-22所示的OnCreate函数的右大括号时,刚刚创建的btn窗口就被与之相关的C++对象销毁了。因此,不能将这个按钮对象定义为一个局部对象。解决方法是:将其定义为CMainFrame类的一个成员变量,可以将其访问权限定义为private类型以实现信息隐藏。

添加成员变量

添加成功

代码语言:c++
复制
	// 定义一个cbutton
	m_btn.Create("weixin",WS_CHILD | BS_DEFPUSHBUTTON, CRect(0,0,100,100),this,123);
	// 显示
	m_btn.ShowWindow(SW_SHOWNORMAL);

根据运行结果,我们可以看到该按钮显示在工具栏上了,这是因为按钮当前的父窗口是CMainFrame类窗口,即主框架窗口。该窗口中,标题栏和菜单都位于非客户区,而工具栏位于它的客户区(关于窗口的客户区和非客户区的内容将在下一章讲解)。我们程序中的按钮是在主框架窗口的客户区出现的,并且其位置由CRect(0,0,100,100)参数指定,说明其左上角就是其父窗口客户区的(0,0)点,因此,该按钮就在程序的菜单下、工具栏上显示出来了。

添加按钮2

更进一步修改

杂项


总结

VC++6.0入门——认识MFC框架

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引出
  • 第三讲 MFC框架
    • 新建项目
      • 类继承图查看
    • windows搜索内容
      • 如何加按钮
        • 添加成员变量
        • 添加成功
      • 添加按钮2
        • 杂项
        • 总结
        相关产品与服务
        腾讯云 TI 平台
        腾讯云 TI 平台(TencentCloud TI Platform)是基于腾讯先进 AI 能力和多年技术经验,面向开发者、政企提供的全栈式人工智能开发服务平台,致力于打通包含从数据获取、数据处理、算法构建、模型训练、模型评估、模型部署、到 AI 应用开发的产业 + AI 落地全流程链路,帮助用户快速创建和部署 AI 应用,管理全周期 AI 解决方案,从而助力政企单位加速数字化转型并促进 AI 行业生态共建。腾讯云 TI 平台系列产品支持公有云访问、私有化部署以及专属云部署。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档