dlgsetup.cpp

来自「简单的远程控制工具,分为服务器与客户斋,让你了解socket编程的知识.」· C++ 代码 · 共 211 行

CPP
211
字号
// DlgSetup.cpp : implementation file
//

#include "stdafx.h"
#include "Ctrl_Clnt9.h"
#include "Ctrl_Clnt9Doc.h"
#include "DlgSetup.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgSetup dialog


CDlgSetup::CDlgSetup(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgSetup::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgSetup)
	m_strEdtHandle = _T("");
	m_strEdtServer = _T("");
	m_strEdtPw = _T("");
	m_nEdtPort = 0;
	m_bConnectAuto = FALSE;

	//}}AFX_DATA_INIT
}

CDlgSetup::Create (CCtrl_Clnt9Doc *pDoc)
{
	m_pDoc = pDoc;
}

void CDlgSetup::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgSetup)
	DDX_Control(pDX, IDC_TREE_COMPUTER, m_treeWksta);
	DDX_Text(pDX, IDC_EDIT_HANDLE, m_strEdtHandle);
	DDV_MaxChars(pDX, m_strEdtHandle, 50);
	DDX_Text(pDX, IDC_EDIT_SERVER, m_strEdtServer);
	DDV_MaxChars(pDX, m_strEdtServer, 255);
	DDX_Text(pDX, IDC_EDIT_PASSWORD, m_strEdtPw);
	DDX_Text(pDX, IDC_EDIT_PORT, m_nEdtPort);
	DDX_Check(pDX, IDC_CONNECTAUTO, m_bConnectAuto);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgSetup, CDialog)
	//{{AFX_MSG_MAP(CDlgSetup)
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_COMPUTER, OnSelchangedTreeComputer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgSetup message handlers

BOOL CDlgSetup::OnInitDialog() 
{

	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	char svBuffer[512];
	DWORD dwBufSize;

	dwBufSize = MAX_COMPUTERNAME_LENGTH+1;
	if(GetComputerName(svBuffer, &dwBufSize)) 
	{
		m_strEdtHandle = svBuffer;
//		m_strEdtServer = svBuffer;
	}
	else 
	{
		m_strEdtHandle = _T("");
//		m_strEdtServer = _T("ESW5");
	}

//	InitTree();
//	InitMachines();

	UpdateData (FALSE);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CDlgSetup::InitTree()
{
	CImageList imgList;
	imgList.Create(IDB_BITMAP_WKSTA, 16, 0, COLORREF(RGB(255, 255, 255)));
	m_treeWksta.SetImageList(&imgList, TVSIL_NORMAL);
	imgList.Detach();
}

void CDlgSetup::InitMachines()
{
	m_treeWksta.DeleteAllItems();

	LPENUMIDLIST lpe = NULL;
	LPITEMIDLIST lpi = NULL;
	LPMALLOC lpMalloc = NULL;
	ULONG ulFetched = 0L;
	HRESULT hr = 0;

	HTREEITEM hRoot = NULL;

	CString strItemName;

	LPSHELLFOLDER lpsf; 
	hr = SHGetDesktopFolder(&lpsf);
	if (FAILED (hr))
		return;

	LPITEMIDLIST lpi1;
	hr = SHGetSpecialFolderLocation(m_hWnd, CSIDL_NETWORK, &lpi1);
	if (FAILED (hr))
		return;

	LPSHELLFOLDER lpsfNetworkNeighborhood;
	hr = lpsf->BindToObject(lpi1, NULL, IID_IShellFolder, (LPVOID*)&lpsfNetworkNeighborhood);
	if (FAILED (hr))
		return;

	hr = ::SHGetMalloc (&lpMalloc);
	if (FAILED (hr))
		return;

	if (SUCCEEDED (hr))
	{
		hr = lpsfNetworkNeighborhood->EnumObjects(m_hWnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &lpe);

		if (SUCCEEDED (hr))
		{
			while (S_OK == lpe->Next(1, &lpi, &ulFetched))
			{
				ULONG ulAttrs = SFGAO_HASSUBFOLDER;

				hr = lpsfNetworkNeighborhood->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lpi, &ulAttrs);

				STRRET strretName;
				if (ulAttrs & SFGAO_HASSUBFOLDER)
				{
					strretName.uType = STRRET_CSTR;
					hr = lpsfNetworkNeighborhood->GetDisplayNameOf(lpi, SHGDN_NORMAL, &strretName);

					switch(strretName.uType)
					{
						case STRRET_CSTR:
							strItemName = strretName.cStr;
							break;
						case STRRET_WSTR:
							strItemName = strretName.pOleStr;
							break;
						default:
							break;
					}

					if(strItemName.CompareNoCase(_T("Entire Network")) == 0)
						hRoot = m_treeWksta.InsertItem(strItemName, 0, 0, NULL);
					else
						m_treeWksta.InsertItem(strItemName, 1, 1, hRoot);
				}

				lpMalloc->Free(lpi); 
				lpi = 0;
			}
		}
	}
	else
		return;

	if (lpe)
		lpe->Release ();

	if (lpi && lpMalloc)
		lpMalloc->Free(lpi);

	if (lpMalloc)
		lpMalloc->Release();
}

void CDlgSetup::OnSelchangedTreeComputer(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here

	m_strEdtServer = m_treeWksta.GetItemText (pNMTreeView->itemNew.hItem);
	UpdateData (FALSE);
	
	*pResult = 0;
}



BOOL CDlgSetup::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	m_pDoc->m_strServer = m_strEdtServer;
	m_pDoc->m_nPort = m_nEdtPort;
	m_pDoc->m_strPassword = m_strEdtPw;
	m_pDoc->m_bConnectAuto = m_bConnectAuto;
	
	return CDialog::DestroyWindow();
}

⌨️ 快捷键说明

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