初识WTL(上)
2006-07-22 22:03:01 来源:WEB开发网核心提示: Ⅱ:int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT){CMessageLoop theLoop;_Module.AddMessageLoop(&theLoop);CMainFrame wndMain
Ⅱ:
int Run(LPTSTR /*lpstrCmdLine*/ = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
CMessageLoop theLoop;
_Module.AddMessageLoop(&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;
}
该函数创建了一个CMessageLoop实例,该实例包含了这个线程的消息循环。这些消息循环都放在模块的全局消息循环中,通过线程的ID来索引。这样,该线程的其它代码就能访问得到。每一个应用程序维护一个消息循环队列Map,应用程序中的每个线程都通过"_Module.AddMessageLoop(&theLoop)",把该线程的消息循环加入到_Module的消息循环Map中。消息循环对象包含了消息过滤和空闲处理。每个线程都可以加入空闲处理代码和消息过滤。
● 添加代码:
Ⅰ:在stdafx.h中添加:
#include <atlctrls.h>
#include <atlctrlx.h>
#include <atlctrlw.h> //这三个是WTL 中实现常用控件类
#include <atldlgs.h>
#include <atlmisc.h> //WTL 使用类像 CString等
#include <atlddx.h> //WTL 使用像MFC中DDX/DDV 机制
Ⅱ:添加3个图标资源:IDR_DEFAULT, IDR_DATE, IDR_TIME
Ⅲ:在MainFrm.h中添加 CMultiPaneStatusBarCtrl m_Mstatus;
Ⅳ:在MainFrm.cpp中添加
在函数最前面声明两个数组:
static int arrPanes[] = { IDR_DEFAULT, IDR_DATE, IDR_TIME };
static int arrWidths[] = { 450,200, 600 }; //你自己修改一下值看看有什么不同
在OnCreate函数中添加:
CreateSimpleStatusBar();
m_Mstatus.SubclassWindow(m_hWndStatusBar);
m_Mstatus.SetPanes(arrPanes,sizeof(arrPanes)/sizeof(int), false);
m_Mstatus.SetPaneWidth(IDR_DEFAULT,400);
m_Mstatus.SetPaneWidth(IDR_DATE,200);
m_Mstatus.SetPaneWidth(IDR_TIME,900);
m_Mstatus.SetPaneIcon(IDR_DEFAULT,AtlLoadIconImage(IDR_DEFAULT, LR_DEFAULTCOLOR));
m_Mstatus.SetPaneIcon(IDR_DATE, AtlLoadIconImage(IDR_DATE, LR_DEFAULTCOLOR));
m_Mstatus.SetPaneIcon(IDR_TIME, AtlLoadIconImage(IDR_TIME, LR_DEFAULTCOLOR));
m_Mstatus.SetPaneText(IDR_DATE,"WTL is very wonderful!",0);
m_Mstatus.SetPaneText(IDR_TIME,"WWW.VCKBASE.COM",0);
这些代码相信大家一看就会明白!
参考资料:
深入剖析WTL——Win32模型,作者:建新
WTL for MFC Programmers 作者:Michael Dunn
在此深表感谢
更多精彩
赞助商链接