WEB开发网
开发学院软件开发VC ATL的GUI程序设计 阅读

ATL的GUI程序设计

 2006-07-22 22:54:31 来源:WEB开发网   
核心提示: extern CComModule _Module;HICON hIcon = ::LoadIcon( _Module.GetResourceInstance(), MAKEINTRESOURCE( IDI_YOURICON ) );好了,那么现在我们可以充分展示一下这个模块类的具体使用了

extern CComModule _Module;
HICON hIcon = ::LoadIcon( _Module.GetResourceInstance(), MAKEINTRESOURCE( IDI_YOURICON ) );

好了,那么现在我们可以充分展示一下这个模块类的具体使用了。在此,我仅仅将我先前的“Hello, World!”作了一番扩展,如下:

//////////////////////////////////////////////////////////////////////////
// ATL的GUI程序设计配套源代码
// 第一章 不能免俗的“Hello, World!”
// 工程名称:HelloWorldEx
// 作者:李马
// http://www.titilima.cn
//////////////////////////////////////////////////////////////////////////
#include <atlbase.h>
CComModule _Module;
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
  _Module.Init( NULL, hInstance );
  _Module.m_hInstResource = LoadLibrary( _T("shell32.dll") );
  MSGBOXPARAMS mbp;
  ZeroMemory( &mbp, sizeof( mbp ) );
  mbp.cbSize    = sizeof( mbp );
  mbp.dwLanguageId = GetSystemDefaultLangID();
  mbp.dwStyle   = MB_USERICON;
  mbp.hInstance  = _Module.GetResourceInstance();
  mbp.lpszCaption = _T("Hello");
  mbp.lpszIcon   = MAKEINTRESOURCE( 44 );
  mbp.lpszText   = _T("Hello, World!");
  MessageBoxIndirect( &mbp );
  FreeLibrary( _Module.m_hInstResource );
  _Module.m_hInstResource = NULL;
  _Module.Term();
  return 0;
}

这个程序运行起来是这个样子:

如你所见,在这里我使用了来自应用程序之外的资源,也就是对CComModule::GetModuleInstance进行了特殊处理。WTL就是对CComModule这个类进行了继承处理而派生出了CAppModule类,使之成为了更适合应用程序使用的模块类。有兴趣的朋友可以参看WTL附带的atlapp.h文件,我这里就不多说了。

“貌合神离”

字典上对这个词的解释是:“表面上很亲密而实际上怀有二心”。在此,我将它用在ATL 3.0与7.0上,用来表示它们俩“用法兼容而实现迥异”的既有事实。不过,对于GUI程序设计而言,你并不需要深入了解这方面的内容。因此我这里列举的,也只是与GUI有关的部分。

  • ATL 3.0之中,CComModule直接继承自_ATL_MODULE;而ATL 7.0之中,CComModule则经历了一串的继承链。
  • 相比之下,ATL 7.0中的CComModule更有COM的味道,譬如它的ModuleInstance、ResourceInstance都可以作为COM组件的property,使用get、put来处理。

当然,ATL毕竟是一个为开发COM组件而构建的Framework,所以ATL 7.0中的atlbase.h之中还包含了更多有关COM开发的工具类。这些内容与本书无关,而且李马也自认现在尚无能力来解说这些内容,所以一并从略了就。

上一页  1 2 3 4 5 6 

Tags:ATL GUI 程序设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接