博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WTL--SDI框架分析
阅读量:5304 次
发布时间:2019-06-14

本文共 1884 字,大约阅读时间需要 6 分钟。

创建SDI产生的基本类:CMainFrame,CAboutDlg和CWTLView(WTL为项目名)。

由此可见,不同于MFC,WTL少了文档类,它的结构就只有简单的窗口类和视图类,而至于串行化(MFC文档类的主要功能)则可以添加在窗口类或者视图类中,也可以自己编写一个文档类(按个人需求而定)。

SDI应用程序的入口和MFC的入口同名----_tWinMain,以下是源码及注释(被注释的代码是添加和销毁rich edit control的代码):

// 初始化COM环境,公用控件和_Module,调用全局函数Run()int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow){	HRESULT hRes = ::CoInitialize(NULL);	// 初始化COM环境// If you are running on NT 4.0 or higher you can use the following call instead to // make the EXE free threaded. This means that calls come in on a random RPC thread.//	HRESULT hRes = ::CoInitializeEx(NULL, COINIT_MULTITHREADED);	ATLASSERT(SUCCEEDED(hRes));	// this resolves ATL window thunking problem when Microsoft Layer for Unicode (MSLU) is used	::DefWindowProc(NULL, 0, 0, 0L);		// ?	AtlInitCommonControls(ICC_BAR_CLASSES);	// add flags to support other controls	hRes = _Module.Init(NULL, hInstance);	// 应用程序初始化	ATLASSERT(SUCCEEDED(hRes));	// 添加rich edit control	//HINSTANCE hInstRich = ::LoadLibrary(CRichEditCtrl::GetLibraryName());		//ATLASSERT(hInstRich != NULL);	//AtlAxWinInit();	int nRet = Run(lpstrCmdLine, nCmdShow);		//::FreeLibrary(hInstRich);	_Module.Term();							// 销毁应用程序	::CoUninitialize();						// COM环境销毁	return nRet;}

_tWinMain的主要功能就是初始化一些环境并调用run函数,那么我们就来看下run函数都执行了哪些动作:

// Run函数的主要作用是创建主框架窗口,进入消息循环int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT){	CMessageLoop theLoop;					// 消息循环类	_Module.AddMessageLoop(&theLoop);		// 保存全局应用theLoop	CMainFrame wndMain;	if(wndMain.CreateEx() == NULL)	{		ATLTRACE(_T("Main window creation failed!\n"));		return 0;	}	wndMain.ShowWindow(nCmdShow);	int nRet = theLoop.Run();				// 不断的从消息队列里取消息,然后分发给对应的窗口	_Module.RemoveMessageLoop();	return nRet;}

run函数的主要功能: 

1.创建并初始化一个框架对象CMainFrame wndMain;

2.建立消息的循环。

这样,一个窗口的框架就建立完毕了。

 

未完待续

转载于:https://www.cnblogs.com/shaellancelot/p/4358892.html

你可能感兴趣的文章
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>