资源简介
支持透明窗体的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
- 上一篇:普乐投资项目分析软件
- 下一篇:计算机网络socket编程实验
评论
共有 条评论