首页
社区
课程
招聘
新体验: ATL 方法建造 window 程序
发表于: 2006-1-3 14:23 6395

新体验: ATL 方法建造 window 程序

2006-1-3 14:23
6395
最近在翻资料的时候,尝试了用 ATL (active template library) 的方法,来写 GUI 窗口,是以 C++ 方式控制,但没有 MFC 的负累和慢速  (微软自称ATL 和 MFC 的最大分别,是 ATL 快很多,它是 light weight 的窗口 class 封装)

希望没有试过的兄弟玩玩 (大侠们请略过)

(VC 中建立一般 Win32 SDK 程序,不要选 ATL/COM)
#include <windows.h>
#include <atlbase.h>
extern CComModule _Module;
#include <atlwin.h>

CComModule _Module;

class CMyWindow : public CWindowImpl<CMyWindow> {
   BEGIN_MSG_MAP( CMyWindow )
      MESSAGE_HANDLER( WM_PAINT, OnPaint )
      MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
   END_MSG_MAP()
 
   LRESULT OnPaint( UINT, WPARAM, LPARAM, BOOL& ){
      PAINTSTRUCT ps;
      HDC hDC = GetDC();
      BeginPaint( &ps );
      TextOut( hDC, 0, 0, _T("Hello world"), 11 );
      EndPaint( &ps );
      return 0;
   }
 
   LRESULT OnDestroy( UINT, WPARAM, LPARAM, BOOL& ){
      PostQuitMessage( 0 );
      return 0;
   }
};

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
   _Module.Init( NULL, hInstance );

   CMyWindow wnd;

   wnd.Create( NULL, CWindow::rcDefault, _T("Hello"),
      WS_OVERLAPPEDWINDOW|WS_VISIBLE );

   MSG msg;
   while( GetMessage( &msg, NULL, 0, 0 ) ){
      TranslateMessage( &msg );
      DispatchMessage( &msg );
   }

   _Module.Term();
   return msg.wParam;
}


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvc60/html/atlwindow.asp

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 214
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
直接用WTL岂不是更好。
2006-1-3 15:00
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
3
最初由 ziding 发布
直接用WTL岂不是更好。


当然可以  

上面的 ATL 代码是可以在没有安装 WTL 的情况,用 VC6 成功编译

只是初接触做个小实验
2006-1-3 15:12
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
学习...
2006-1-3 15:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
玩玩....
2006-1-5 13:39
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
不错!可以玩玩。
但与直接使用SDK也没多大区别,至少流程是一样的。
ATL比MFC简单也是有代价的--功能甚少。
2006-1-5 16:57
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
参考原文(关键字:ATL窗口)
http://www.5ivb.net/Info/38/Info6841/
2006-1-5 17:05
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
8
不错,有空试试
2006-1-5 18:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呵呵 WTL 偶的最爱啊

不能直接和SDK比 C++强调的是封装性 利用类库降低复杂性 大量的事情不用你操心 当然就简单了
而ATL/WTL利用现代C++模板技术 大大提高了运行效率

WTL的未来是很有前途的 现在已经支持SDI/MDI 等等 还有大量控件 最重要的是 它是开源di
:D
2006-1-9 11:50
0
雪    币: 202
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
不过现在的WINDOWS应用程序大部分还是用MFC开发,系统软件还是用SDK。
但从Visual Studio 2005的类库源代码来看,ATL可能是MS推荐。以前MFC中的类如 CString 现在是用ATL模板类来实现的:

The topics in this section describe programming using CString, which is the default implementation of the template class CStringT.

===================================================================
This class represents a CStringT object.

template< typename BaseType, class StringTraits >
class CStringT :
public CSimpleStringT<   BaseType,   _CSTRING_IMPL_::_MFCDLLTraitsCheck<      BaseType,      StringTraits   >   ::c_bIsMFCDLLTraits

以上内容摘自MSDN For VS2005。

现在MS力推 .Net,我想MFC可能会淡出历史舞台,你们认为呢?
2006-1-18 19:05
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
11
感觉有点大,编译了有57344bytes
2006-2-7 06:58
0
游客
登录 | 注册 方可回帖
返回
//