www.pudn.com > OPC_VC++.rar > OPCServerDlg.cpp


//************************************************************************** 
//  Description:  Dialog to select OPC server to connect. 
//************************************************************************** 
#include "stdafx.h" 
#include "OPCServerDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// OPCServerDlg dialog 
 
 
OPCServerDlg::OPCServerDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(OPCServerDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(OPCServerDlg) 
	m_Server = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void OPCServerDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(OPCServerDlg) 
	DDX_LBString(pDX, IDC_SERVER_LIST, m_Server); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(OPCServerDlg, CDialog) 
	//{{AFX_MSG_MAP(OPCServerDlg) 
#ifdef REV_12 
	ON_LBN_DBLCLK(IDC_SERVER_LIST, OnDblclkServerList) 
#endif // REV_12 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// OPCServerDlg message handlers 
const int MAX_KEYLEN = 256; 
 
//************************************************************************** 
BOOL OPCServerDlg::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	CListBox* list = (CListBox*)GetDlgItem( IDC_SERVER_LIST ); 
	 
   HKEY hk = HKEY_CLASSES_ROOT; 
   TCHAR key[MAX_KEYLEN]; 
   for( int index=0; RegEnumKey(hk, index, key, MAX_KEYLEN)==ERROR_SUCCESS; index++) 
   { 
      HKEY hProgID; 
      TCHAR dummy[MAX_KEYLEN]; 
      if(RegOpenKey(hk, key, &hProgID )==ERROR_SUCCESS ) 
      { 
         LONG size=MAX_KEYLEN; 
         if(RegQueryValue(hProgID, _T("OPC"), dummy, &size)==ERROR_SUCCESS ) 
         { 
            TCHAR desc[MAX_KEYLEN]; 
            size=MAX_KEYLEN; 
            RegQueryValue(hk, key, desc, &size); 
            list->AddString( key ); 
         } 
         RegCloseKey( hProgID ); 
      } 
   } 
   if( list->GetCount() > 0 ) 
      list->SetCurSel(0); 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
#ifdef REV_12 
//************************************************************************** 
// allow double-click selection on a server 
void OPCServerDlg::OnDblclkServerList()  
{ 
   OnOK(); 
} 
#endif // REV_12