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 + -
显示快捷键?