WTL学习之旅(一) 我的第一个WTL工程

原创 2012年03月27日 15:50:55

转载请标明是引用于 http://blog.csdn.net/chenyujing1234

 相关代码:

http://www.rayfile.com/zh-cn/files/f19ea46e-77e3-11e1-b980-0015c55db73d/

安装WTL请参考

http://blog.csdn.net/chenyujing1234/article/details/7399014

WTL环境优化:

修改AppWiz文件夹下setup90x.js 。把第152行 fileDest.WriteLine("Param=\"VC_EXPRESS = 1\""); 这句删除。

image

 

WTL向导认为如果是Express版本的VC一定是和psdk2003是的atl配合的,具体和atlthunk相关。如果不删除这句,用向导生成程序是运行不了的

然后在AppWiz\Files\Templates\1033文件夹找到stdafx.h 在32行添加#pragma comment(lib,”atlthunk.lib”)。这样用向导生成的程序就不会有链接错误了。

image

 

工程名为WTLTest。

选择Generate .cpp Files是为了产生cpp文件,这样更符合我们的习惯,不然只有.h文件产生.

调试过程后得知,WTL的调用如下:

1、_tWinMain入口

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPTSTR lpstrCmdLine, int nCmdShow) {  HRESULT hRes = ::CoInitialize(NULL); // 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));

 int nRet = Run(lpstrCmdLine, nCmdShow);

 _Module.Term();                        // 结束  ::CoUninitialize();

 return nRet; }

2、采用ATL初始化模块.

CAppModule _Module;

_Module.Init(

// Overrides of CComModule::Init and Term
	HRESULT Init(ATL::_ATL_OBJMAP_ENTRY* pObjMap, HINSTANCE hInstance, const GUID* pLibID = NULL)
	{
		HRESULT hRet = CComModule::Init(pObjMap, hInstance, pLibID);
		if(FAILED(hRet))
			return hRet;

		m_dwMainThreadID = ::GetCurrentThreadId();
		typedef ATL::CSimpleMap<DWORD, CMessageLoop*>   _mapClass;
		m_pMsgLoopMap = NULL;
		ATLTRY(m_pMsgLoopMap = new _mapClass);
		if(m_pMsgLoopMap == NULL)
			return E_OUTOFMEMORY;
		m_pSettingChangeNotify = NULL;

		return hRet;
	}

 

结束时是_Module.Term(); 

	void Term()
	{
		TermSettingChangeNotify();
		delete m_pMsgLoopMap;
		CComModule::Term();
	}



3、创建ATL窗口

int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
	CMessageLoop theLoop;
	_Module.AddMessageLoop(&theLoop);

	CMainDlg dlgMain;

	if(dlgMain.Create(NULL) == NULL)
	{
		ATLTRACE(_T("Main dialog creation failed!\n"));
		return 0;
	}

	dlgMain.ShowWindow(nCmdShow);

	int nRet = theLoop.Run();

	_Module.RemoveMessageLoop();
	return nRet;
}


 

 

 

相关文章推荐

[ATL/WTL]_[初级]_[环境搭建]

场景: 1. Windows界面编程我推荐使用原生的界面库吧,比如WTL或者MFC,由于MFC太庞大,除了集成界面库之外还有其他不必要的库,所以编译出的程序很大, 而且封装层次比较多,不容易看清楚结构...

使用WTL的Wizard直接创建出来的工程修改步骤,使编译通过

使用WTL的Wizard直接生成的工程,一般不能直接编译通过,需要做一些设置,简单j...
  • chiyun1
  • chiyun1
  • 2014年06月06日 14:23
  • 517

vs2005开发的第一个WTL程序

  • 2009年07月02日 11:36
  • 14KB
  • 下载

WTL在对话框工程中更改字体

这个工程的代码在这里呢。http://download.csdn.net/detail/jiangcaiyang123/3936311 一次编程中想更改对话框的字体,于是想想WTL可不可以做到呢...

WTL 学习六 gsoap 调用webservice的过程

本文回顾了用WTL调用Webservice的过程,gsoap 版本为 gsoap_2.8.3 新建一个webservice,返回一个简单的unicode字符串.    内...

WTL学习指南

WTL学习资料非常少,最要命的是WTL没有官方支持,所以记录一下,给WTL学习的同学一点参考,少走弯路. 我的情况: 一个人开发Windows 客户端,除了网络,没有任何技术支持。以前开发过嵌入式L...

WTL在对话框工程中更改字体

  • 2011年12月18日 13:49
  • 24KB
  • 下载

wtl,xml学习ing

原文网址:http://hi.baidu.com/jakisyhzurbvxzq/item/ade6d1f1cc6027a530c19904 1.ccombobox的调用   首先,如果只...

WTL 学习

转载自:http://blog.csdn.net/hsyouxishe/archive/2007/12/26/1968475.aspxWTL 新参考:http://www.cnblogs.com/pr...

wtl学习开篇

安装好vs和wtl开发环境后,就可以进行wtl开发了。wtl提供了windows图形界面开发框架,可以利用wtl开发出想要的windows图形视窗界面程序。首先我们简单的建立一个wtl的程序,看看wt...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WTL学习之旅(一) 我的第一个WTL工程
举报原因:
原因补充:

(最多只允许输入30个字)