心寄笔端 附庸风雅

甘草的技术博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1. 安装WTL into VS 2008

我是VS2008+SP1

1, 下载WTL80,然后解压缩。

2, 将setup80.js复制为setup90.js,编辑setup90.js,将"8.0"全部替换为"9.0"后保存。

3, 运行,c:\>wscript setup90.js,会看到安装成功的MessageBox。

4, 打末VS2008,选择Tools->Options->Projects and Solutions->VC++ Directories,在include中将c:\wtl80\include加入。

----

现在就可以建立WTL的工程了~

 

2. ATL::CString和WTL::CString的冲突问题

#define _WTL_NO_CSTRING

定义这个宏,可以解决冲突,典型的处理办法,就是在stdafx.h里面定义。

 

3. RegisterWindowMessage(L"TaskbarCreated");

当explorer重启后,托盘区的Tray可以在这个消息响应中Show出来。

 

4. MESSAGE_HANDLER(WM_PAINT, OnPaint)... 和 MSG_WM_PAINT(OnPaint) 没多大区别

记住,它们的参数都是不可用的,要自己创建 CPaintDC dc(*this);


5. WTL中new Window如何delete?

重载OnFinalMessage,在

 

void CXXXWnd::OnFinalMessage(HWND)
{
    delete this;
}

如果是一个FrameWindow,加了OnDestroy消息映射,那么bHandled要设置为TRUE。


 

6. 使用ATL Thunk


typedef void (*PFUNC)(void*);

class MyClass
{
public:
    CStdCallThunk _thunk;
    
const char* _name;

    MyClass(
const char* name) :_name(name) {}
    
~MyClass() {}

    
static void Function(void* pVoid)
    {
        MyClass
* pThis = (MyClass*)pVoid;
        pThis
->Print();
    }

    
void Print()
    {
        cout
<<"Hello Thunk " <<this->_name <<endl;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    MyClass mc1(
"Mike");
    MyClass mc2(
"Lucy");
    mc1._thunk.Init((DWORD_PTR)
&MyClass::Function, &mc1);
    mc2._thunk.Init((DWORD_PTR)
&MyClass::Function, &mc2);
    PFUNC p1 
= (PFUNC)mc1._thunk.GetCodeAddress();
    PFUNC p2 
= (PFUNC)mc2._thunk.GetCodeAddress();
    
    p2((
void*)0); // Ladies first
    p1((void*)0);
    
return 0;
}

CDynamicStdCallThunk是在X86和AMD平台上面的定义,最后被typedef成CStdCallThunk,而最终使用的是_stdcallthunk,而ATL提供了多种平台的_stdcallthunk实现,有MIPS的,有ARM的。。。而且我只看得懂X86的。

VS200*以前的ATL实现,是栈对象实现,现在都是堆对象了。如果你确定你的代码只在X86上面跑,你确实可以直接用_stdcallthunk。

代码这样改改即可:

class MyClass
{
public:
    _stdcallthunk _thunk;
    
const char* _name;
... ...


PFUNC p1 
= (PFUNC)&mc1._thunk;
PFUNC p2 
= (PFUNC)&mc2._thunk;


7. vista系统的毛玻璃效果

 

 

posted on 2010-09-26 23:22  甘草  阅读(616)  评论(0编辑  收藏  举报
Baidu
Google
心寄笔端
TEST
以后我会加上Power By的,先别介意