www.pudn.com > cjbtaskbarapplet.zip > CPlAppletClient.cpp


/////////////////////////////////////////////////////////////////////////////// 
// 
// File           : $Workfile:   CPlAppletClient.cpp  $ 
// Version        : $Revision:   1.0  $ 
// Function       :  
// 
// Author         : $Author:   Len  $ 
// Date           : $Date:   Dec 28 1997 12:16:00  $ 
// 
// Notes          :  
// 
// Modifications  : 
// 
// $Log:   D:/Documents/Len/Sources/Stuff/TaskBarApplet/PVCS/CPlAppletClient.cpv  $ 
//  
//    Rev 1.0   Dec 28 1997 12:16:00   Len 
// Initial revision. 
//  
/////////////////////////////////////////////////////////////////////////////// 
// 
// Copyright 1997 JetByte Limited. 
// 
// JetByte Limited grants you ("Licensee") a non-exclusive, royalty free,  
// licence to use, modify and redistribute this software in source and binary  
// code form, provided that i) this copyright notice and licence appear on all  
// copies of the software; and ii) Licensee does not utilize the software in a  
// manner which is disparaging to JetByte Limited. 
// 
// This software is provided "AS IS," without a warranty of any kind. ALL 
// EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING  
// ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE  
// OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. JETBYTE LIMITED AND ITS LICENSORS  
// SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF  
// USING, MODIFYING OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO  
// EVENT WILL JETBYTE LIMITED BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,  
// OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE  
// DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING  
// OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF JETBYTE LIMITED  
// HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
// 
// This software is not designed or intended for use in on-line control of 
// aircraft, air traffic, aircraft navigation or aircraft communications; or in 
// the design, construction, operation or maintenance of any nuclear 
// facility. Licensee represents and warrants that it will not use or 
// redistribute the Software for such purposes. 
// 
/////////////////////////////////////////////////////////////////////////////// 
 
/////////////////////////////////////////////////////////////////////////////// 
// Include files 
/////////////////////////////////////////////////////////////////////////////// 
 
#include "CPlAppletClient.hpp" 
 
/////////////////////////////////////////////////////////////////////////////// 
// Namespace: JetByteTools 
/////////////////////////////////////////////////////////////////////////////// 
 
namespace JetByteTools { 
 
/////////////////////////////////////////////////////////////////////////////// 
// CPlAppletClient 
/////////////////////////////////////////////////////////////////////////////// 
 
/////////////////////////////////////////////////////////////////////////////// 
// Construction and destruction 
/////////////////////////////////////////////////////////////////////////////// 
 
CPlAppletClient::CPlAppletClient( 
   const char *szCPlAppletName,  
   const int nAppIndex /*= 0*/) 
   :  m_hLibInstance(0),  
      m_szCPlAppletName(szCPlAppletName), 
      m_nAppIndex(nAppIndex), 
      m_hIcon(0), 
      m_pAppletProc(0) 
{ 
   // All work done in initialiser list 
} 
 
 
CPlAppletClient::~CPlAppletClient() 
{ 
   if (m_hLibInstance) 
   { 
      UnloadApplet(0); 
   } 
} 
 
/////////////////////////////////////////////////////////////////////////////// 
// Applet manipulation 
/////////////////////////////////////////////////////////////////////////////// 
 
bool CPlAppletClient::LoadApplet(HWND hWnd) 
{ 
   bool ok = false; 
 
   m_hLibInstance = LoadLibrary(m_szCPlAppletName); 
 
   if (m_hLibInstance) 
   { 
      m_pAppletProc = (APPLET_PROC)GetProcAddress(m_hLibInstance, "CPlApplet"); 
 
      if (m_pAppletProc) 
      { 
         if (0 != m_pAppletProc(hWnd, CPL_INIT, 0, 0)) 
         { 
            long numApps = m_pAppletProc(hWnd, CPL_GETCOUNT, 0, 0); 
 
            if (m_nAppIndex <= numApps) 
            { 
               ok = GetCPlInfo(hWnd); 
            } 
            else 
            { 
               ok = false; 
            } 
         } 
         else 
         { 
            MessageBox(hWnd, "Call to CPL_INIT failed", "Error", MB_ICONSTOP); 
         } 
      } 
      else 
      { 
         MessageBox(hWnd, "Failed to locate CPlApplet entry point", "Error", MB_ICONSTOP); 
      } 
   } 
 
   return ok; 
} 
 
bool CPlAppletClient::RunApplet(HWND hWnd) 
{ 
   return (0 == m_pAppletProc(hWnd, CPL_DBLCLK, m_nAppIndex, (LPARAM)m_lData)); 
} 
 
bool CPlAppletClient::UnloadApplet(HWND hWnd) 
{ 
   if (0 != m_pAppletProc(hWnd, CPL_STOP, m_nAppIndex, (LPARAM)m_lData)) 
   { 
      MessageBox(hWnd, "Call to CPL_STOP failed", "Error", MB_ICONSTOP); 
   } 
 
   if (0 != m_pAppletProc(hWnd, CPL_EXIT, 0, 0)) 
   { 
      MessageBox(hWnd, "Call to CPL_EXIT failed", "Error", MB_ICONSTOP); 
   } 
 
   m_pAppletProc = 0; 
 
   bool ok = (0 != FreeLibrary(m_hLibInstance)); 
 
   m_hLibInstance = 0; 
 
   return ok; 
} 
 
HICON CPlAppletClient::GetIcon() 
{ 
   return m_hIcon; 
} 
 
char *CPlAppletClient::GetAppName() 
{ 
   return m_szAppName; 
} 
 
char *CPlAppletClient::GetInfo() 
{ 
   return m_szAppInfo; 
} 
 
/////////////////////////////////////////////////////////////////////////////// 
// Private member functions 
/////////////////////////////////////////////////////////////////////////////// 
 
bool CPlAppletClient::GetCPlInfo(HWND hWnd) 
{ 
   bool ok = false; 
 
   memset(&m_CplInfo, 0, sizeof(CPLINFO)); 
 
   if (0 == m_pAppletProc(hWnd, CPL_INQUIRE, m_nAppIndex, (LPARAM)&m_CplInfo)) 
   { 
      m_bNewCpl = false; 
      m_lData = m_CplInfo.lData; 
      m_hIcon = LoadIcon(m_hLibInstance, MAKEINTRESOURCE(m_CplInfo.idIcon)); 
 
      int numBytes = LoadString(m_hLibInstance, m_CplInfo.idName, m_szAppName, sizeof(m_szAppName)); 
 
      assert(numBytes < sizeof(m_szAppName)); 
 
      if (0 != numBytes) 
      { 
         ok = true; 
      } 
 
      numBytes = LoadString(m_hLibInstance, m_CplInfo.idInfo, m_szAppInfo, sizeof(m_szAppInfo)); 
 
      assert(numBytes < sizeof(m_szAppInfo)); 
 
      if (0 != numBytes) 
      { 
         ok = true; 
      } 
   } 
   else 
   { 
      memset(&m_NewCplInfo, 0, sizeof(NEWCPLINFO)); 
 
      m_NewCplInfo.dwSize = sizeof(NEWCPLINFO); 
       
      if (0 == m_pAppletProc(hWnd, CPL_NEWINQUIRE, m_nAppIndex, (LPARAM)&m_NewCplInfo)) 
      { 
         ok = true; 
         m_bNewCpl = true; 
         m_lData = m_NewCplInfo.lData; 
         m_hIcon = m_NewCplInfo.hIcon;     
 
         memcpy(m_szAppName, m_NewCplInfo.szName, sizeof(m_szAppName)); 
         memcpy(m_szAppInfo, m_NewCplInfo.szInfo, sizeof(m_szAppInfo)); 
      } 
   } 
 
   return ok; 
} 
 
/////////////////////////////////////////////////////////////////////////////// 
// Namespace: JetByteTools 
/////////////////////////////////////////////////////////////////////////////// 
 
} // End of namespace JetByteTools  
 
/////////////////////////////////////////////////////////////////////////////// 
// End of file 
///////////////////////////////////////////////////////////////////////////////