home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 February / CMCD0205.ISO / Software / Shareware / Programare / flashplayer / Samples / MFC / Demo / DemoDlg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2004-10-30  |  11.6 KB  |  373 lines

  1. // DemoDlg.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Demo.h"
  6. #include "DemoDlg.h"
  7.  
  8. //==================================================================================================
  9. // FlashPlayerControl
  10.  
  11. // FlashPlayerControl header
  12. #include "../../../FlashPlayerControl/include/FlashPlayerControl.h"
  13.  
  14. // FlashPlayerControl lib
  15. #pragma comment(lib, "../../../FlashPlayerControl/lib/FlashPlayerControl.lib")
  16.  
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #endif
  20.  
  21. // Load resource helper
  22. void LoadResourceHelper( /* in */ LPCTSTR lpszName, 
  23.                          /* in */ LPCTSTR lpszType, 
  24.                          /* out */ LPVOID& lpData, 
  25.                          /* out */ DWORD& dwSize);
  26.  
  27. // CAboutDlg dialog used for App About
  28.  
  29. class CAboutDlg : public CDialog
  30. {
  31. public:
  32.     CAboutDlg();
  33.  
  34. // Dialog Data
  35.     enum { IDD = IDD_ABOUTBOX };
  36.  
  37.     protected:
  38.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  39.  
  40. // Implementation
  41. protected:
  42.     DECLARE_MESSAGE_MAP()
  43. };
  44.  
  45. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  46. {
  47. }
  48.  
  49. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  50. {
  51.     CDialog::DoDataExchange(pDX);
  52. }
  53.  
  54. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  55. END_MESSAGE_MAP()
  56.  
  57.  
  58. // CDemoDlg dialog
  59.  
  60.  
  61.  
  62. CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/)
  63.     : CDialog(CDemoDlg::IDD, pParent)
  64. {
  65.     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  66. }
  67.  
  68. void CDemoDlg::DoDataExchange(CDataExchange* pDX)
  69. {
  70.     CDialog::DoDataExchange(pDX);
  71. }
  72.  
  73. BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)
  74.     ON_WM_SYSCOMMAND()
  75.     ON_WM_PAINT()
  76.     ON_WM_QUERYDRAGICON()
  77.     //}}AFX_MSG_MAP
  78.     ON_BN_CLICKED(ID_OPEN, OnBnClickedOpen)
  79.     ON_BN_CLICKED(IDC_BUTTON_GO_TO_THE_SITE, OnBnClickedButtonGoToTheSite)
  80. END_MESSAGE_MAP()
  81.  
  82.  
  83. // CDemoDlg message handlers
  84.  
  85. BOOL CDemoDlg::OnInitDialog()
  86. {
  87.     CDialog::OnInitDialog();
  88.  
  89.     // Add "About..." menu item to system menu.
  90.  
  91.     // IDM_ABOUTBOX must be in the system command range.
  92.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  93.     ASSERT(IDM_ABOUTBOX < 0xF000);
  94.  
  95.     CMenu* pSysMenu = GetSystemMenu(FALSE);
  96.     if (pSysMenu != NULL)
  97.     {
  98.         CString strAboutMenu;
  99.         strAboutMenu.LoadString(IDS_ABOUTBOX);
  100.         if (!strAboutMenu.IsEmpty())
  101.         {
  102.             pSysMenu->AppendMenu(MF_SEPARATOR);
  103.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  104.         }
  105.     }
  106.  
  107.     // Set the icon for this dialog.  The framework does this automatically
  108.     //  when the application's main window is not a dialog
  109.     SetIcon(m_hIcon, TRUE);            // Set big icon
  110.     SetIcon(m_hIcon, FALSE);        // Set small icon
  111.  
  112.     // TODO: Add extra initialization here
  113.  
  114.     //
  115.     RECT rc;
  116.     GetDlgItem(IDC_STATIC_FLASH_AREA)->GetWindowRect(&rc);
  117.     ScreenToClient(&rc);
  118.  
  119.     //
  120.     m_hwndFlashPlayerControl = 
  121.         CreateWindow(WC_FLASH, 
  122.                      NULL, 
  123.                      WS_CHILD | WS_VISIBLE, 
  124.                      rc.left, 
  125.                      rc.top, 
  126.                      rc.right - rc.left, 
  127.                      rc.bottom - rc.top, 
  128.                      m_hWnd, 
  129.                      NULL, 
  130.                      AfxGetInstanceHandle(), 
  131.                      NULL);
  132.  
  133.     // Loading movie from the resource
  134.     LPVOID lpMovieData = NULL;
  135.     DWORD dwMovieSize = 0;
  136.  
  137.     LoadResourceHelper(_T("MOVIE1"), _T("MOVIE"), lpMovieData, dwMovieSize);
  138.  
  139.     SFPCPutMovieFromMemory SFPCPutMovieFromMemory = { 0 };
  140.  
  141.     SFPCPutMovieFromMemory.dwSize = dwMovieSize;
  142.     SFPCPutMovieFromMemory.lpData = lpMovieData;
  143.  
  144.     ::SendMessage(m_hwndFlashPlayerControl, FPCM_PUTMOVIEFROMMEMORY, 0, (LPARAM)&SFPCPutMovieFromMemory);
  145.  
  146.     return TRUE;  // return TRUE  unless you set the focus to a control
  147. }
  148.  
  149. void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
  150. {
  151.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  152.     {
  153.         CAboutDlg dlgAbout;
  154.         dlgAbout.DoModal();
  155.     }
  156.     else
  157.     {
  158.         CDialog::OnSysCommand(nID, lParam);
  159.     }
  160. }
  161.  
  162. // If you add a minimize button to your dialog, you will need the code below
  163. //  to draw the icon.  For MFC applications using the document/view model,
  164. //  this is automatically done for you by the framework.
  165.  
  166. void CDemoDlg::OnPaint() 
  167. {
  168.     if (IsIconic())
  169.     {
  170.         CPaintDC dc(this); // device context for painting
  171.  
  172.         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  173.  
  174.         // Center icon in client rectangle
  175.         int cxIcon = GetSystemMetrics(SM_CXICON);
  176.         int cyIcon = GetSystemMetrics(SM_CYICON);
  177.         CRect rect;
  178.         GetClientRect(&rect);
  179.         int x = (rect.Width() - cxIcon + 1) / 2;
  180.         int y = (rect.Height() - cyIcon + 1) / 2;
  181.  
  182.         // Draw the icon
  183.         dc.DrawIcon(x, y, m_hIcon);
  184.     }
  185.     else
  186.     {
  187.         CDialog::OnPaint();
  188.     }
  189. }
  190.  
  191. // The system calls this function to obtain the cursor to display while the user drags
  192. //  the minimized window.
  193. HCURSOR CDemoDlg::OnQueryDragIcon()
  194. {
  195.     return static_cast<HCURSOR>(m_hIcon);
  196. }
  197.  
  198. void CDemoDlg::OnBnClickedOpen()
  199. {
  200.     CFileDialog dlg(TRUE, 
  201.                     _T("swf"), 
  202.                     _T(""), 
  203.                     0, 
  204.                     _T("Flash movie files (*.swf)|*.swf|All Files (*.*)|*.*||"), 
  205.                     this, 
  206.                     0);
  207.  
  208.     if (IDOK == dlg.DoModal())
  209.     {
  210.         //
  211.         CString strFlashMoviePath = dlg.GetPathName();
  212.  
  213.         //
  214.         TCHAR lpszFlashMoviePath[MAX_PATH + 1] = { 0 };
  215.         lstrcpy(lpszFlashMoviePath, strFlashMoviePath);
  216.  
  217.         //
  218.         SFPCPutMovie SFPCPutMovie;
  219.  
  220.         SFPCPutMovie.lpszBuffer = lpszFlashMoviePath;
  221.  
  222.         //
  223.         ::SendMessage(m_hwndFlashPlayerControl, FPCM_PUT_MOVIE, 0, (LPARAM)&SFPCPutMovie);
  224.     }
  225. }
  226.  
  227. LRESULT CDemoDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  228. {
  229.     if (WM_NOTIFY == message)
  230.     {
  231.         LPNMHDR lpNMHDR = (LPNMHDR)lParam;
  232.  
  233.         if (m_hwndFlashPlayerControl == lpNMHDR->hwndFrom)
  234.             switch (lpNMHDR->code)
  235.             {
  236.                 case FPCN_ONPROGRESS:
  237.                 {
  238.                     SFPCOnProgressInfoStruct* pInfo = (SFPCOnProgressInfoStruct*)lParam;
  239.  
  240.                     TRACE(_T("FPCN_ONPROGRESS: percentDone(%d)\n"), pInfo->percentDone);
  241.  
  242.                     return 1;
  243.                 }
  244.  
  245.                 case FPCN_FSCOMMAND:
  246.                 {
  247.                     SFPCFSCommandInfoStruct* pInfo = (SFPCFSCommandInfoStruct*)lParam;
  248.  
  249.                     TRACE(_T("FPCN_FSCOMMAND: command(%s), args(%s)\n"), pInfo->command, pInfo->args);
  250.  
  251.                     return 1;
  252.                 }
  253.  
  254.                 case FPCN_ONREADYSTATECHANGE:
  255.                 {
  256.                     SFPCOnReadyStateChangeInfoStruct* pInfo = (SFPCOnReadyStateChangeInfoStruct*)lParam;
  257.  
  258.                     TRACE(_T("FPCN_ONREADYSTATECHANGE: newState(%d)\n"), pInfo->newState);
  259.  
  260.                     return 1;
  261.                 }
  262.  
  263.                 case FPCN_LOADEXTERNALRESOURCE:
  264.                 {
  265.                     LPVOID lpResourceData = NULL;
  266.                     DWORD dwResourceSize = 0;
  267.  
  268.                     SFPCLoadExternalResource* pInfo = (SFPCLoadExternalResource*)lParam;
  269.  
  270.                     if (0 == lstrcmpi(pInfo->lpszRelativePath, _T("/images/embedded_image1.jpg")))
  271.                     {
  272.                         LoadResourceHelper(_T("IMAGE1"), _T("IMAGE"), lpResourceData, dwResourceSize);
  273.  
  274.                         ULONG ulWritten;
  275.                         pInfo->lpStream->Write(lpResourceData, dwResourceSize, &ulWritten);
  276.                     }
  277.                     else if (0 == lstrcmpi(pInfo->lpszRelativePath, _T("/images/embedded_image2.jpg")))
  278.                     {
  279.                         LoadResourceHelper(_T("IMAGE2"), _T("IMAGE"), lpResourceData, dwResourceSize);
  280.  
  281.                         ULONG ulWritten;
  282.                         pInfo->lpStream->Write(lpResourceData, dwResourceSize, &ulWritten);
  283.                     }
  284.                     else if (0 == lstrcmpi(pInfo->lpszRelativePath, _T("/images/embedded_image3.jpg")))
  285.                     {
  286.                         LoadResourceHelper(_T("IMAGE3"), _T("IMAGE"), lpResourceData, dwResourceSize);
  287.  
  288.                         ULONG ulWritten;
  289.                         pInfo->lpStream->Write(lpResourceData, dwResourceSize, &ulWritten);
  290.                     }
  291.                     else if (0 == lstrcmpi(pInfo->lpszRelativePath, _T("/images/embedded_image4.jpg")))
  292.                     {
  293.                         LoadResourceHelper(_T("IMAGE4"), _T("IMAGE"), lpResourceData, dwResourceSize);
  294.  
  295.                         ULONG ulWritten;
  296.                         pInfo->lpStream->Write(lpResourceData, dwResourceSize, &ulWritten);
  297.                     }
  298.                     else if (0 == lstrcmpi(pInfo->lpszRelativePath, _T("/images/embedded_image5.jpg")))
  299.                     {
  300.                         LoadResourceHelper(_T("IMAGE5"), _T("IMAGE"), lpResourceData, dwResourceSize);
  301.  
  302.                         ULONG ulWritten;
  303.                         pInfo->lpStream->Write(lpResourceData, dwResourceSize, &ulWritten);
  304.                     }
  305.                     else
  306.                     {
  307.                         CFileDialog dlg(TRUE, 
  308.                                         _T("jpg"), 
  309.                                         _T(""), 
  310.                                         0, 
  311.                                         _T("JPEG (*.jpg, *.jpeg)|*.jpg;*.jpeg|All Files (*.*)|*.*||"), 
  312.                                         this, 
  313.                                         0);
  314.  
  315.                         if (IDOK == dlg.DoModal())
  316.                         {
  317.                             HANDLE hFile = 
  318.                                 CreateFile(dlg.GetPathName(), 
  319.                                            GENERIC_READ, 
  320.                                            FILE_SHARE_READ, 
  321.                                            NULL, 
  322.                                            OPEN_EXISTING, 
  323.                                            0, 
  324.                                            NULL);
  325.  
  326.                             if (INVALID_HANDLE_VALUE != hFile)
  327.                             {
  328.                                 HANDLE hFileMapping = 
  329.                                     CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
  330.  
  331.                                 lpResourceData = 
  332.                                     MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
  333.                                 dwResourceSize = 
  334.                                     GetFileSize(hFile, NULL);
  335.  
  336.                                 ULONG ulWritten;
  337.                                 pInfo->lpStream->Write(lpResourceData, dwResourceSize, &ulWritten);
  338.  
  339.                                 UnmapViewOfFile(lpResourceData);
  340.  
  341.                                 CloseHandle(hFileMapping);
  342.                             }
  343.  
  344.                             CloseHandle(hFile);
  345.                         }
  346.                     }
  347.                 }
  348.             }
  349.     }
  350.  
  351.     return CDialog::WindowProc(message, wParam, lParam);
  352. }
  353.  
  354. //==================================================================================================
  355. // Load resource helper
  356. void LoadResourceHelper( /* in */ LPCTSTR lpszName, 
  357.                          /* in */ LPCTSTR lpszType, 
  358.                          /* out */ LPVOID& lpData, 
  359.                          /* out */ DWORD& dwSize)
  360. {
  361.     HMODULE hModule = GetModuleHandle(NULL);
  362.     HRSRC hResInfo = FindResource(hModule, lpszName, lpszType);
  363.     HGLOBAL hResData = LoadResource(hModule, hResInfo);
  364.     lpData = LockResource(hResData);
  365.     dwSize = SizeofResource(hModule, hResInfo);
  366. }
  367. //==================================================================================================
  368.  
  369. void CDemoDlg::OnBnClickedButtonGoToTheSite()
  370. {
  371.     ShellExecute(m_hWnd, NULL, _T("http://www.flashplayercontrol.com/dll/?from_demo_app"), NULL, NULL, SW_SHOW);
  372. }
  373.