资源简介

支持透明窗体的FLASH 用了TL的FLASH sorry

资源截图

代码片段和文件信息

/******************************************************************
***
***
*** FREE WINDOWLESS FLASH CONTROL
***
***    by Makarov Igor
***
*** for questions and remarks mailto: mak_july@list.ru
***
***
*******************************************************************/
// flash.cpp : Defines the entry point for the application.
//

/*
 * 该实现很完美,指出了实现像QQ宠物那样效果的本质方法,但唯一不足
 * 就是在16位24位色下处理的不好。如果这样处理肯定不能拿去商用。
 * 下面给出16位和24位色的解决方案。
 * 1、可以先将Flash每一帧的Alpha值预先保存起来,然后
 * 在此根据像素计算设置进去。因为在Draw的过程中,创建
 * 了32位设备无关的位图,所以在FlashPlayer在该DC上绘制
 * 完毕后,可以将DC中的位图数据得到,并将Alpha通过计算填写
 * 进去。仔细观察一下,即便是在16位色模式下,FlashPlayer
 * 并不是一个像素只适用两个字节,而是使用了3个字节,所以
 * 将Alpha填写到第四个字节就能解决问题。但这样做太笨拙了,
 * 预先要截取每一帧的Alpha值,而且又要对每一个像素重新计算,
 * 效率太低。
 *   2、第二种方法一劳永逸啊,那就是欺骗FlashPlayer。通过
 * 钩子技术用自己定义的函数告诉FlashPlayer目前的色位是32
 * 位,而不管实际的色位是多少。GetDevicesCap是获得色位的
 * API,而且发现FlashPlayer.ocx的导入表中确实对该函数进行
 * 了调用,所以Hook它。------------陈建化 2009-5-2
 */


#include “stdafx.h“
#include “resource.h“
#include “FlashWnd.h“

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst; // current instance
TCHAR sztitle[MAX_LOADSTRING] = _T(“test“); // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING] = _T(“WindowlessFlashContainerApp“); // The title bar text

// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE int);
LRESULT CALLBACK WndProc(HWND UINT WPARAM LPARAM);
LRESULT CALLBACK About(HWND UINT WPARAM LPARAM);

HWND g_hWnd = NULL;
HINSTANCE g_hInst = NULL;
CFlashWnd *g_flashWnd = NULL;

HINSTANCE app_instance_;

typedef int (WINAPI *GDC_FUNC)(HDC hdc int nIndex);

GDC_FUNC sys_org_func;
BYTE jmp_cmd[5];
BYTE sys_func_enter[5];

int WINAPI cjh_GetDeviceCaps(HDC hdc int nIndex)
{
int rst = 0;

if (BITSPIXEL == nIndex)
{
rst = 32;
}
else
{
//写回DoDragDrop的前5个字节的指令
memcpy((LPVOID)sys_org_func sys_func_enter 5); 
//刷新指令cache中相关地址指令的内容
FlushInstructionCache(GetCurrentProcess() (LPVOID)sys_org_func 5);

rst = GetDeviceCaps(hdc nIndex);

//写回长跳转指令到DoDragDrop的前5个字节
memcpy((LPVOID)sys_org_func jmp_cmd 5); 
//刷新指令cache中相关地址指令的内容
FlushInstructionCache(GetCurrentProcess() (LPVOID)sys_org_func 5);
}

return rst;
}

int APIENTRY WinMain(HINSTANCE hInstance
                     HINSTANCE hPrevInstance
                     LPSTR     lpCmdLine
                     int       nCmdShow)
{
  // TODO: Place code here.
MSG msg;
HACCEL hAccelTable;

app_instance_ = hInstance;

// Initialize global strings
MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance nCmdShow)) 
{
return FALSE;
}

g_hInst = hInst;

hAccelTable = LoadAccelerators(hInstance (LPCTSTR)IDC_FLASH);

OleInitialize(NULL);

int bitspixel = GetDeviceCaps(0 BITSPIXEL);

///////////////////////////////////////////////

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-07-09 00:18  Flash_TLBB\
     目录           0  2011-07-09 00:19  Flash_TLBB\Debug\
     文件      139264  2011-07-09 00:08  Flash_TLBB\Debug\test.exe
     文件      577282  2010-08-27 12:41  Flash_TLBB\Debug\TEST.swf
     文件        8671  2011-07-09 00:08  Flash_TLBB\flash.cpp
     文件         615  2009-05-02 22:23  Flash_TLBB\flash.h
     文件       28070  2010-12-28 19:36  Flash_TLBB\FlashWnd.cpp
     文件       12069  2011-07-09 00:06  Flash_TLBB\FlashWnd.h
     文件         777  2006-07-03 15:19  Flash_TLBB\resource.h
     文件         292  2009-05-02 22:23  Flash_TLBB\StdAfx.cpp
     文件        2227  2010-12-28 19:28  Flash_TLBB\StdAfx.h
     文件      314368  2011-07-09 00:11  Flash_TLBB\test.ncb
     文件        1782  2009-05-02 22:33  Flash_TLBB\test.rc
     文件         897  2010-12-28 19:28  Flash_TLBB\test.sln
     文件       10240  2011-07-09 00:11  Flash_TLBB\test.suo
     文件        5672  2010-12-28 19:28  Flash_TLBB\test.vcproj

评论

共有 条评论