一般flash截屏都是通过CAxWindow类来装载flash控件的。
第一个要注意的是:
flash是一个activex控件,创建该控件的线程如果没有消息循环机制,那么flash控件将无法正常运作,举个例子,flash响应WM_TIMER消息进行播放,如果没有消息循环机制,将无法响应WM_TIMER消息。因此如果想要通过创建一个线程来执行flash截屏功能,务必注意在线程中增加以下代码:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
另外还有一个地方要注意的,就是调用CoInitializeEx函数时,第二个参数必须是COINIT_APARTMENTTHREADED,否则将会有意想不到的错误发生,我就曾经传错参数,导致调用loadmovie异常崩溃了,当时怎么也没有料到到是CoInitializeEx参数设置错误。
最后一个要注意的是:
我们通过一个子线程来创建flash控件后查询得到IShockwaveFlash接口指针,其它线程不能直接调用该接口指针,必须通过PostThreadMessage函数发送线程消息至该子线程,由该线程的消息循环机制来执行相应操作命令,否则也会产生意向不到的异常错误。