WTL学习之旅(一) 我的第一个WTL工程
来源:互联网 发布:java 7新特性 编辑:程序博客网 时间:2024/05/02 04:48
转载请标明是引用于 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\""); 这句删除。
WTL向导认为如果是Express版本的VC一定是和psdk2003是的atl配合的,具体和atlthunk相关。如果不删除这句,用向导生成程序是运行不了的
然后在AppWiz\Files\Templates\1033文件夹找到stdafx.h 在32行添加#pragma comment(lib,”atlthunk.lib”)。这样用向导生成的程序就不会有链接错误了。
工程名为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 TermHRESULT 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;}
- WTL学习之旅(一) 我的第一个WTL工程
- WTL学习之WTL窗口的实现
- WTL学习之旅(二) WTL介绍
- SpringBoot学习(一) — 我的第一个SpringBoot工程
- WTL快速之旅
- WTL快速之旅
- WTL(一)
- 第一个WTL可视化开发工具诞生...
- 第一个WTL可视化开发工具诞生...
- 第一个WTL可视化开发工具诞生...
- 第一个WTL可视化开发工具诞生...
- 第一个WTL可视化开发工具诞生...
- 第一个WTL可视化开发工具诞生...
- WTL 学习
- wtl学习
- WTL
- WTL
- WTL
- 第6周实验报告2
- oracle常用命令
- Visual Studio 2008 常用快捷键
- 地图中的偏移问题的解决和源码(C#)
- win7系统远程桌面链接linux系统
- WTL学习之旅(一) 我的第一个WTL工程
- ubuntu apache ww-data权限配置
- Can not issue data manipulation statements with executeQuery()错误解决
- 太牛逼了,找到个.NET(C#)实现的 飞鸽传书 库!
- JavaScript语言精髓与编程实践(第2版)
- Windows_7彻底删除Oracle_11g_R2
- 深入探讨用位掩码代替分支(3):VC6速度测试
- 架设git服务器,和使用ssh连接git服务
- 软件版本后缀含义