WEB开发网
开发学院软件开发VC ATL的GUI程序设计(4)ATL的窗口类 阅读

ATL的GUI程序设计(4)ATL的窗口类

 2006-04-11 22:54:24 来源:WEB开发网   
核心提示: 这里已经为要注册的窗口类设置好了绝大多数的常用属性,当然,ATL的GUI程序设计(4)ATL的窗口类(8),如果你仍然觉得自己需要更改更多的属性的话,可以像CHelloATLWnd的构造函数里那么做,ATL就是借助这样的机制来保证效率的,如果你深入到atlwin.h的源代码之中,特别要指出

这里已经为要注册的窗口类设置好了绝大多数的常用属性,当然,如果你仍然觉得自己需要更改更多的属性的话,可以像CHelloATLWnd的构造函数里那么做。特别要指出的一点是,ATL对窗口类的光标(cursor)属性是进行特殊处理的,对CWndClassInfo::m_wc.hCursor直接赋值是不行的。

编译期的虚函数机制

ATL的效率远远高于MFC,其中一方面的原因就是它把很多的工作都通过模板来交给编译器了,比如我上文提到的编译期的虚函数机制。这个机制可以避免虚函数带来的一切开销而静态实现虚函数的特性。考虑以下代码:

template < typename T >
class Parent
{
public:
  void f()
  {
    cout << "f from Parent." << endl;
  }
  void g()
  {
    T* pT = (T*)this;
    pT->f();
  }
};
class Child1 : public Parent< Child1 >
{
public:
  void f()
  {
    cout << "f from Child1." << endl;
  }
};
class Child2 : public Parent< Child2 >
{
};

然后,这样进行调用:

Child1 c1;
Child2 c2;
c1.g(); // f from Child1.
c2.g(); // f from Parent.

所有的奥秘尽在Parent::g之中,它通过一个类型转换在编译期就决定了调用哪个函数,颇有些多态性的味道。ATL就是借助这样的机制来保证效率的,如果你深入到atlwin.h的源代码之中,肯定会发现更多诸如此类的例子。

上一页  3 4 5 6 7 8 

Tags:ATL GUI 程序设计

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