描述:
请问
如何在浏览器地址栏里输入网址回车后,打开网页之前,在浏览器中显示一个FLASH?
也就是说状态栏中的由“查找”、“正在打开网页…………”,到“完成”这段时间里。在浏览器里显示一个FLASH,网页加载完成之后则显示网页。
解决方案1:
就是需要IE插件
// IEPlug.cpp : Implementation of DLL Exports.
// Note: Proxy/Stub Information
// To build a separate proxy/stub DLL,
// run nmake -f IEPlugps.mk in the project directory.
#include "stdafx.h"
#include "resource.h"
#include <initguid.h>
#include "IEPlug.h"
#include "IEPlug_i.c"
#include "IEPlugCom.h"
//
#define WAIT_TIME 2000 //启动画面停留的时间
#define PictureH 389 //启动画面的高
#define PictureW 560 //启动画面的宽
static UINT iTimeID=0; //用来控制计时器
static int WINAPI ShowSplash(HINSTANCE hInstance,UINT iBmpHeight,UINT iBmpWidth);
static LRESULT CALLBACK SplashProc(HWND hWnd, UINT uMsg,WPARAM wParam,LPARAM lParam);
//
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_IEPlugCom, CIEPlugCom)
END_OBJECT_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
TCHAR pszLoader[MAX_PATH];
LPSTR pstrFileName=NULL;
if (dwReason == DLL_PROCESS_ATTACH)
{
//得到当前调用者的名称
GetModuleFileName(NULL,pszLoader,MAX_PATH);
pstrFileName=strrchr(pszLoader,'\\');
if(pstrFileName==NULL)
{
return FALSE;
}
pstrFileName++;
//判断是否是IE,是则加载启动画面
if(lstrcmpi(pstrFileName,TEXT("IEXPLORE.EXE"))==NULL)
{
//加载启动画面
ShowSplash(hInstance,PictureH,PictureW);
}
_Module.Init(ObjectMap,hInstance,&LIBID_IEPLUGLib);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}
/////////////////////////////////////////////////////////////////////////////
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}
/////////////////////////////////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
return _Module.RegisterServer(TRUE);
}
/////////////////////////////////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}
int WINAPI ShowSplash(HINSTANCE hInstance,UINT iBmpHeight,UINT iBmpWidth)
{
HWND hSplashWnd=NULL;
MSG stMsg;
WNDCLASSEX stWndClassEx;
TCHAR szClassName[]=TEXT("CIEPlu");
HCURSOR hMouseCursor=NULL;
HBRUSH hBrush=NULL;
HBITMAP hBmp=LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_SPLASH));
if(hBmp==NULL)
{
return 0;
}
hBrush=CreatePatternBrush(hBmp);
if(hBrush==NULL)
{
return 0;
}
hMouseCursor=LoadCursor(NULL,IDC_ARROW);
if(hMouseCursor==NULL)
{
return 0;
}
stWndClassEx.cbSize=sizeof(WNDCLASSEX);
stWndClassEx.style=CS_HREDRAW | CS_VREDRAW;
stWndClassEx.lpfnWndProc=SplashProc;
stWndClassEx.cbClsExtra=NULL;
stWndClassEx.cbWndExtra=NULL;
stWndClassEx.hInstance=hInstance;
stWndClassEx.hbrBackground=hBrush;
stWndClassEx.lpszMenuName=NULL;
stWndClassEx.lpszClassName=szClassName;
stWndClassEx.hIcon=NULL;
stWndClassEx.hIc />
stWndClassEx.hCursor=hMouseCursor;
if(!RegisterClassEx(&stWndClassEx))
{
return 0;
}
//使启动画面加载在屏幕正中
int iWndLeft=(GetSystemMetrics(SM_CXSCREEN)-iBmpWidth)/2;
int iWndTop=(GetSystemMetrics(SM_CYSCREEN)-iBmpHeight)/2;
hSplashWnd=CreateWindowEx(WS_EX_LEFT,szClassName,TEXT("Loading..."),WS_POPUP,iWndLeft,iWndTop,iBmpWidth,iBmpHeight,NULL,NULL,hInstance,NULL);
if(hSplashWnd==NULL)
{