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

📄 0516004.htm

📁 VC知识库5_chm_decompile_20040520_210715
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title></title>
<link rel="stylesheet" type="text/css" href="../../vckbase.css">
</head>

<body>

<div align="justify">
  <table border="0" width="100%" class="font" height="57">
    <tr>
      <td width="27%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">VC知识库(五)</font>
      </td>
      <td width="73%" height="6" class="bigfont" bgcolor="#B8CFE7" align="center" bordercolor="#800080">
      <font color="#800080">www.vckbase.com</font>
      </td>
    </tr>
    <tr>
      <td width="100%" height="4" class="header" valign="top" align="center" colspan="2">
      <hr>
      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="header" valign="top" align="center" colspan="2">



<p align="center"><big><strong>不可重复执行程序的实现</strong></big></p>



      </td>
    </tr>
    <tr>
      <td width="100%" height="17" class="info" align="center" colspan="2">
      <strong><big>闻怡洋 <a href="http://www.vchelp.com/">http://www.vchelp.com/</a>  
 
&nbsp; <a href="mailto:wyy_cq@188.net">wyy_cq@188.net</a></big></strong>
      </td>  
    </tr>  
    <tr> 
      <td width="100%" height="22" class="font" colspan="2">
        <hr>
      </td>  
    </tr> 
    <tr> 
      <td width="100%" height="5" class="font" colspan="2"> 



<p>在网上很多朋友都有这方面的问题,根据以前的方法是使用FindWindow但是使用MFC后开发者无法指定Window  
 
Class Name,特别是在Win32环境下,有更多更好的方法可以实现这一要求。如使用File  
 
Map,有名互斥量,有名事件量等都可以做到。</p> 
 
 
 
<p>下面介绍使用有名互斥量的用法:</p> 
 
 
 
<pre>class CSingleInstance

{

public:

	CSingleInstance();

	~CSingleInstance();



	BOOL	Create(LPCSTR pszClass);

	CString	GetClassName( void ) const;



protected:

	HANDLE	m_hMutex;

	CString	m_strClassName;

};



CSingleInstance::CSingleInstance()

{

	// Set our default values

	m_hMutex = NULL;

}



CSingleInstance::~CSingleInstance()

{

	if ( m_hMutex != NULL ) {

		ReleaseMutex( m_hMutex );

	}

}



BOOL CSingleInstance::Create(LPCSTR pszClassName)

{

	// Add the word 'Class' to the end

	m_strClassName = pszClassName;



	// Create the mutex

	m_hMutex = CreateMutex( NULL, FALSE, m_strClassName );

	// Check for errors

	if ( GetLastError() == ERROR_ALREADY_EXISTS ) {

		// Reset our mutext handle (just in case)

		m_hMutex = NULL;

		// The mutex already exists, which means an instance is already

		// running. Find the app and pop it up

		HWND hWnd = FindWindowEx( NULL, NULL, m_strClassName, NULL );

		if ( hWnd != NULL ) {

			ShowWindow(hWnd,SW_SHOW);

			ShowWindow( hWnd, SW_RESTORE );

			BringWindowToTop( hWnd );

			SetForegroundWindow( hWnd );

		}

		// Return failure

		return FALSE;

	}

	// Return success

	return TRUE;

}



CString CSingleInstance::GetClassName( void ) const

{

	return m_strClassName;

}

</pre> 
 
 
 
<p>在Create中我使用了FindWindow来找出已经存在的窗口句柄,当然这不是必要的。你可以根据自己的需要去掉这写代码。</p> 
 
 
 
<p>使用说明:</p> 
 
 
 
<pre>BOOL CXXXApp::InitInstance(....)

{//m_ss 为成员变量

    if(!m_ss.Create(&quot;my class name&quot;))

   &nbsp;&nbsp;&nbsp; return FALSE;

........</pre> 
 
 
 
<pre>}</pre> 
 
 
 
      </td>     
    </tr>    
    <tr> 
      <td width="100%" height="12" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr> 
      <td width="100%" height="6" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr> 
      <td width="100%" height="8" class="font" colspan="2">  
      </td>     
    </tr> 
    <tr>    
      <td width="100%" height="17" class="font" colspan="2"></td>     
    </tr>    
  </table>     
</div>     
     
</body>     
     
</html>     

⌨️ 快捷键说明

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