www.pudn.com > MemSwfDemo.rar > MemSwfDemo.cpp


// MemSwfDemo.cpp : Defines the entry point for the application. 
// 
 
#include "stdafx.h" 
#include "resource.h" 
#include    
CComModule   _Module; 
#include       
#include       
#pragma   comment(lib,"atl") 
//你可以将flash.ocx拷贝到项目文件夹 
#import   "flash.ocx" //一般在C:\WINDOWS\system32\Macromed\Flash中 
using   namespace   ShockwaveFlashObjects;  
 
CAxWindow   g_container;  
IShockwaveFlash*   g_pshwaveflash;  
 
#include "MemSwf.h" 
#pragma comment(lib, "MemSwf") 
CMemSwf *g_pMemSwf = NULL; 
PBYTE g_pSwf = NULL; 
HRSRC g_hResInfo; 
HGLOBAL g_hResData; 
 
#define MAX_LOADSTRING 100 
 
// Global Variables: 
HINSTANCE hInst;								// current instance 
TCHAR szTitle[MAX_LOADSTRING];								// The title bar text 
TCHAR szWindowClass[MAX_LOADSTRING];								// 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); 
 
int APIENTRY WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPSTR     lpCmdLine, 
                     int       nCmdShow) 
{ 
 	// TODO: Place code here. 
	MSG msg; 
	HACCEL hAccelTable; 
 
	// Initialize global strings 
	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 
	LoadString(hInstance, IDC_MEMSWFDEMO, szWindowClass, MAX_LOADSTRING); 
	MyRegisterClass(hInstance); 
 
	CoInitialize(NULL);   
	AtlAxWinInit();   
	// Perform application initialization: 
	if (!InitInstance (hInstance, nCmdShow))  
	{ 
		return FALSE; 
	} 
 
	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MEMSWFDEMO); 
 
	// Main message loop: 
	while (GetMessage(&msg, NULL, 0, 0))  
	{ 
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))  
		{ 
			TranslateMessage(&msg); 
			DispatchMessage(&msg); 
		} 
	} 
	CoUninitialize(); 
	return msg.wParam; 
} 
 
 
 
// 
//  FUNCTION: MyRegisterClass() 
// 
//  PURPOSE: Registers the window class. 
// 
//  COMMENTS: 
// 
//    This function and its usage is only necessary if you want this code 
//    to be compatible with Win32 systems prior to the 'RegisterClassEx' 
//    function that was added to Windows 95. It is important to call this function 
//    so that the application will get 'well formed' small icons associated 
//    with it. 
// 
ATOM MyRegisterClass(HINSTANCE hInstance) 
{ 
	WNDCLASSEX wcex; 
 
	wcex.cbSize = sizeof(WNDCLASSEX);  
 
	wcex.style			= CS_HREDRAW | CS_VREDRAW; 
	wcex.lpfnWndProc	= (WNDPROC)WndProc; 
	wcex.cbClsExtra		= 0; 
	wcex.cbWndExtra		= 0; 
	wcex.hInstance		= hInstance; 
	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_MEMSWFDEMO); 
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW); 
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1); 
	wcex.lpszMenuName	= (LPCSTR)IDC_MEMSWFDEMO; 
	wcex.lpszClassName	= szWindowClass; 
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); 
 
	return RegisterClassEx(&wcex); 
} 
 
// 
//   FUNCTION: InitInstance(HANDLE, int) 
// 
//   PURPOSE: Saves instance handle and creates main window 
// 
//   COMMENTS: 
// 
//        In this function, we save the instance handle in a global variable and 
//        create and display the main program window. 
// 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 
{ 
   HWND hWnd; 
 
   hInst = hInstance; // Store instance handle in our global variable 
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 
 
   if (!hWnd) 
   { 
      return FALSE; 
   } 
 
   ShowWindow(hWnd, nCmdShow); 
   UpdateWindow(hWnd); 
 
   return TRUE; 
} 
 
// 
//  FUNCTION: WndProc(HWND, unsigned, WORD, LONG) 
// 
//  PURPOSE:  Processes messages for the main window. 
// 
//  WM_COMMAND	- process the application menu 
//  WM_PAINT	- Paint the main window 
//  WM_DESTROY	- post a quit message and return 
// 
// 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
	int wmId, wmEvent; 
	PAINTSTRUCT ps; 
	HDC hdc; 
	TCHAR szHello[MAX_LOADSTRING]; 
	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); 
 
	switch (message)  
	{ 
		case WM_CREATE: 
			g_hResInfo = FindResource(NULL, MAKEINTRESOURCE(IDR_SWF1), "SWF"); 
			g_hResData = LoadResource(NULL, g_hResInfo); 
			g_pSwf = (LPBYTE)LockResource(g_hResData); 
			g_pMemSwf = (CMemSwf *)new CMemSwf("m:\\pig.swf", g_pSwf, SizeofResource(NULL, g_hResInfo), FILE_ATTRIBUTE_ARCHIVE); 
 
			RECT   rc;  
			GetClientRect(hWnd, &rc);    
			g_container.Create(hWnd, rc, LPCTSTR("ShockwaveFlash.ShockwaveFlash.1"),   WS_CHILD | WS_VISIBLE);//create a browser control    
			g_container.QueryControl(__uuidof(IShockwaveFlash), reinterpret_cast(&g_pshwaveflash));    
			g_pshwaveflash->put_Movie(_bstr_t("m:\\pig.swf"));   //   you   have   to   change   the   path   here    
			//g_pshwaveflash->Play(); 
			break; 
		case WM_COMMAND: 
			wmId    = LOWORD(wParam);  
			wmEvent = HIWORD(wParam);  
			// Parse the menu selections: 
			switch (wmId) 
			{ 
				case IDM_ABOUT: 
				   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); 
				   break; 
				case IDM_EXIT: 
				   DestroyWindow(hWnd); 
				   break; 
				default: 
				   return DefWindowProc(hWnd, message, wParam, lParam); 
			} 
			break; 
		case WM_PAINT: 
			hdc = BeginPaint(hWnd, &ps); 
			// TODO: Add any drawing code here... 
			RECT rt; 
			GetClientRect(hWnd, &rt); 
			DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); 
			EndPaint(hWnd, &ps); 
			break; 
		case WM_DESTROY: 
			g_pshwaveflash->Release(); 
			g_container.DestroyWindow(); 
			PostQuitMessage(0); 
			break; 
		default: 
			return DefWindowProc(hWnd, message, wParam, lParam); 
   } 
   return 0; 
} 
 
// Mesage handler for about box. 
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
	switch (message) 
	{ 
		case WM_INITDIALOG: 
				return TRUE; 
 
		case WM_COMMAND: 
			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)  
			{ 
				EndDialog(hDlg, LOWORD(wParam)); 
				return TRUE; 
			} 
			break; 
	} 
    return FALSE; 
}