选择计算机对话框实现指南

在Windows环境中,无论是进行用户管理还是网络配置,经常需要选择计算机。本文将介绍如何实现一个类似于Windows标准对话框的“选择计算机”对话框。这个对话框允许用户在Windows网络环境中选择任意域的计算机(在WNetEnumResource()函数中称为“服务器”)。

以下是实现这个对话框的步骤和代码示例。

为什么需要“选择计算机”对话框?

“选择计算机”对话框非常有用,如果需要类似于在Windows用户管理网络配置工具中看到的“选择计算机/用户/组”对话框。这个对话框允许选择Windows网络环境中任何域的计算机。尝试使这个对话框尽可能接近原始的Microsoft对话框,包括可调整大小、支持多选和单选等特性。

如何使用

要在项目中使用这个对话框,需要添加以下文件:

  • SelectComputerDialog.h
  • SelectComputerDialog.cpp
  • SELECT_COMPUTER_USER.ico
  • SELECT_COMPUTER_USERS.ico
  • SelectComputerDialog.rc
  • SelectComputerResource.h
  • SelectComputerNetwork.h
  • SelectComputerNetwork.cpp
  • Sizer.h
  • Sizer.cpp

将SelectComputerDialog.rc文件包含到项目资源脚本文件中:

#include "SelectComputerDialog.rc"

在文件中包含SelectComputerDialog.h:

#include "SelectComputerDialog.h"

以下是一个CDialogImpl<T>派生类的非静态方法示例(实际上是一个BN_CLICKED通知处理程序):

CSelectComputerDialog dlg; dlg.SingleSelection(IsDlgButtonChecked(IDC_CHECK_ALLOW_MULTIPLY_SELECTION) == BST_UNCHECKED); dlg.NoALLDomain(IsDlgButtonChecked(IDC_CHECK_ALLOW_ALL_DOMAINS) == BST_UNCHECKED); if (dlg.DoModal() == IDOK) { typedef basic_string tstring; tstring str; typedef pair tstringpair; vector::const_iterator ci = dlg.GetComputerNames().begin(); for (; ci != dlg.GetComputerNames().end(); ++ci) { str += (ci->first + _T("\n/ ") + ci->second); str += _T("\n\r\n"); } SetDlgItemText(IDC_EDIT_COMPUTERNAME, str.c_str()); }

以下是一个CDialog派生类的非静态方法示例(实际上是一个BN_CLICKED通知处理程序):

CSelectComputerDialog dlg; dlg.SingleSelection(!m_bAllowMultiplySelection); dlg.NoALLDomain(!m_bAllowAllDomains); m_strComputerName = _T(""); if (dlg.DoModal() == IDOK) { typedef pair CStringPair; vector::const_iterator ci = dlg.GetComputerNames().begin(); for (; ci != dlg.GetComputerNames().end(); ++ci) { m_strComputerName += (ci->first + _T("\n/ ") + ci->second); m_strComputerName += _T("\n\r\n"); } UpdateData(FALSE); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485