⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cplapp.cpp

📁 一个windows 文件系统驱动源码
💻 CPP
字号:

 /*                                                                            
  *		Copyright (c) 2001 - 2003 Satish Kumar J (vsat_in@yahoo.com)
  *
  *		Project:		Win2fs
  *                                                                            
  *		Module Name:	\GUI\CPL\CPLApp.cpp
  *                                                                            
  *		Abstract:		A Control panel applet framework.
  *
  *		Environment:	Win32 DLL operating from User space.
  *
  *		Notes:			None  
  *
  *		Revision History:
  *
  *		Date		Version		Author				Change Log
  *		------------------------------------------------------------------------
  *
  *		03-APR-02	0.0.1		Satish Kumar J		Initial Version
  */                          		

 /////////////////////////////////////////////////////////////////////////////

 // Includes.

 #include <windows.h>

 #include "CPLApp.h"

 /////////////////////////////////////////////////////////////////////////////
 
 // Global functions.

 BOOL 
	WINAPI DllMain (
		HINSTANCE hInstance, 
		DWORD dwReason, 
		LPVOID lpvReserved
	)
 {
	if ( DLL_PROCESS_ATTACH == dwReason )	
    {
		CCPLEx::SetInstanceHandle ( hInstance );
	}

	return TRUE;
 }

 // This is the main entry point for the CPL.

 LONG 
	CALLBACK CPlApplet (
		HWND hWnd, 
		UINT uMsg, 
		LONG lParam1, 
		LONG lParam2
	)
 {
	LONG lResult = 0;

	switch ( uMsg )   
	{
		// Applet initialisation. 

		case CPL_INIT:                

			lResult = CCPLEx::Init ( );
		 
			break;

		case CPL_GETCOUNT:       // How many applets in the DLL?          

			lResult = CCPLEx::GetCount ( );

			break;

		case CPL_INQUIRE:		 //  Tell Control Panel about this applet.

			lResult = CCPLEx::Inquire ( lParam1, (LPCPLINFO) lParam2 );
		 
			break;

		case CPL_NEWINQUIRE:	 //  Tell Control Panel about this applet.

			lResult = CCPLEx::NewInquire ( lParam1, (LPNEWCPLINFO) lParam2 );
		 
			break;

		case CPL_DBLCLK:         //  Double click notification.

			lResult = CCPLEx::DoubleClick ( hWnd, lParam1, lParam2 );

			break;

 #if (WINVER >= 0x0400)

		case CPL_STARTWPARMS:   // Started with RUNDLL.       
         
			lResult = CCPLEx::StartWithParams ( hWnd, lParam1, (LPSTR) lParam2 );
		 
			break;
 
 #endif		// WINVER >= 0x4000

		case CPL_STOP:			// Applet shutdown.

			lResult = CCPLEx::Stop ( lParam1, lParam2 );
	     
			break;

		case CPL_EXIT :			// DLL shutdown.

			lResult = CCPLEx::Exit ( );
		 
			break;

		default:
		 
			break;
	}

	return lResult;
 }

 /////////////////////////////////////////////////////////////////////////////

 //	Static members.

 CCPLEx *CCPLEx::s_pListHead = 0;

 HINSTANCE CCPLEx::s_hInstance = (HINSTANCE) INVALID_HANDLE_VALUE;

 VOID 
	CCPLEx::SetInstanceHandle (
		HINSTANCE hInstance
	)
 {
	s_hInstance = hInstance;
 }

 LONG CCPLEx::Init ( )
 {
	BOOL bOk = TRUE;
   
	CCPLEx* pApplet = s_pListHead;

	while ( ( pApplet ) && ( bOk ) )    
	{
		bOk = pApplet->OnInit ( );

		pApplet = pApplet->m_pNext;
	}

	return bOk;
 }

 LONG CCPLEx::GetCount ( )
 {
	LONG numApplets = 0;

	CCPLEx* pApplet = s_pListHead;

	while ( pApplet )   
	{
		numApplets++;
		
		pApplet = pApplet->m_pNext;
	}

	return numApplets;
 }

 CCPLEx*
	CCPLEx::GetAppletByIndex (
		LONG index
	)
 {
	LONG numApplets = 0;

	CCPLEx* pApplet = s_pListHead;

	while ( ( pApplet ) && ( numApplets < index ) )   
	{
		numApplets++;

		pApplet = pApplet->m_pNext;
	}
   
	return pApplet;
 }

 LONG 
	CCPLEx::Inquire (
		LONG appletIndex, 
		LPCPLINFO lpCPlInfo
	)
 {
	LONG lResult = 1;

	CCPLEx* pApplet = GetAppletByIndex ( appletIndex );
   
	if ( ( pApplet ) && pApplet->OnInquire ( lpCPlInfo ) )   
	{
		lResult = 0;
	}

	return lResult;
 }

 LONG 
	CCPLEx::NewInquire (
		LONG appletIndex, 
		LPNEWCPLINFO lpCPlInfo
	)
 {
	LONG lResult = 1;
   
	CCPLEx *pApplet = GetAppletByIndex ( appletIndex );
   
	if ( ( pApplet ) && pApplet->OnNewInquire ( lpCPlInfo ) )
	{
		lResult = 0;
	}

	return lResult;
 }

 LONG 
	CCPLEx::DoubleClick (
		HWND hWnd, 
		LONG appletIndex, 
		LONG appletData
	)
 {
	LONG lResult = 1;
   
	CCPLEx *pApplet = GetAppletByIndex ( appletIndex );
   
	if ( ( pApplet ) && pApplet->OnDoubleClick ( hWnd, appletData ) )   
	{
		lResult = 0;
	}

	return lResult;
 }

 LONG 
	CCPLEx::StartWithParams (
		HWND hWnd, 
		LONG appletIndex, 
		LPSTR params
	)
 {
	LONG lResult = 1;
   
	CCPLEx* pApplet = GetAppletByIndex ( appletIndex );
   
	if ( ( pApplet ) && pApplet->OnStartWithParams ( hWnd, params ) )   
	{
		lResult = 0;
	}

	return lResult;
 }

 LONG 
	CCPLEx::Stop (
		LONG appletIndex, 
		LONG appletData
	)
 {
	LONG lResult = 1;
   
	CCPLEx* pApplet = GetAppletByIndex ( appletIndex );
   
	if ( ( pApplet ) && pApplet->OnStop ( appletData ) )   
	{
		lResult = 0;
	}

	return lResult;
 }

 LONG CCPLEx::Exit ( )
 {
	LONG lResult = 0;
   
	CCPLEx* pApplet = s_pListHead;

	while ( pApplet )   
	{
		if ( ! pApplet->OnExit ( ))      
		{
			lResult = 1;
		}

	    pApplet = pApplet->m_pNext;
	}

	return lResult;
 }

 BOOL CCPLEx::OnInit ( )
 {
	return TRUE;
 }

 BOOL 
	CCPLEx::OnInquire ( 
		LPCPLINFO lpCPlInfo 
	)
 {
	lpCPlInfo->lData = 0;
	lpCPlInfo->idIcon = m_nIconID;
	lpCPlInfo->idName = m_nNameID;
	lpCPlInfo->idInfo = m_nDescID;
   
	return TRUE;
 }

 BOOL 
	CCPLEx::OnNewInquire ( 
		LPNEWCPLINFO lpNewCPlInfo
	)
 {
	BOOL bOk = FALSE;

	if ( sizeof ( NEWCPLINFO ) == lpNewCPlInfo->dwSize )   
	{
		lpNewCPlInfo->dwSize = (DWORD) sizeof(NEWCPLINFO);
		lpNewCPlInfo->dwFlags = 0;
		lpNewCPlInfo->dwHelpContext = 0;
		lpNewCPlInfo->lData = 0;
		lpNewCPlInfo->hIcon = LoadIcon ( s_hInstance, MAKEINTRESOURCE ( m_nIconID ) );
		lpNewCPlInfo->szHelpFile[0] = '\0';
	   
		LoadString ( s_hInstance, m_nNameID, lpNewCPlInfo->szName, 32 );
		LoadString ( s_hInstance, m_nDescID, lpNewCPlInfo->szInfo, 64 );

		bOk = TRUE;
	}

	return bOk;
 }

 BOOL 
	CCPLEx::OnStartWithParams (
		HWND hWnd, 
		LPSTR /* params */
	)
 {
	return OnDoubleClick ( hWnd, 0 );
 }

 BOOL 
	CCPLEx::OnStop (
		LONG /* appletData */
	)
 {
	return TRUE;
 }

 BOOL CCPLEx::OnExit ( )
 {
	return TRUE;
 }

 ////////////////////////////////////////////////////////////////////////////

 // Public functions.

 //	Construction and destruction.

 CCPLEx::CCPLEx (INT nIconID, INT nNameID, INT nDescID): 
				  m_nIconID (nIconID), 
				  m_nNameID (nNameID), 
				  m_nDescID (nDescID)
 {
    m_pNext = s_pListHead;
   
	s_pListHead = this;
 }

 CCPLEx::~CCPLEx()
 {
    // Remove ourselves from the list of all Applet objects.

    CCPLEx *pApplet = s_pListHead;
    CCPLEx *pPrevious = NULL;
   
    // First find ourselves in the list...

	while ( ( pApplet ) && ( this != s_pListHead ) )   
	{
		pPrevious = pApplet;

		pApplet = pApplet->m_pNext;
	}

	// Sanity check...   

	if ( pApplet )      
	{ 
		// Remove ourselves

		if ( pPrevious )      
		{
			pPrevious = pApplet->m_pNext;
		}
		else			      
		{
			s_pListHead = pApplet->m_pNext;
		}
	}

	m_pNext = NULL;   // Clear our link to the next object. 
 }

 /////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -