windows-nt/Source/XPSP1/NT/net/config/shell/lanui/wzcprops.cpp
2020-09-26 16:20:57 +08:00

130 lines
4 KiB
C++

#include "pch.h"
#pragma hdrstop
#include "ncui.h"
#include "lanui.h"
#include "lanhelp.h"
#include "wzcprops.h"
#include "wzcui.h"
////////////////////////////////////////////////////////////////////////
// CWZCConfigProps related stuff
//
//+---------------------------------------------------------------------------
// class constructor
CWZCConfigProps::CWZCConfigProps()
{
ZeroMemory(&m_wzcConfig, sizeof(WZC_WLAN_CONFIG));
m_wzcConfig.Length = sizeof(WZC_WLAN_CONFIG);
m_wzcConfig.InfrastructureMode = Ndis802_11Infrastructure;
}
//+---------------------------------------------------------------------------
// Uploads the configuration into the dialog's internal data
DWORD
CWZCConfigProps::UploadWzcConfig(CWZCConfig *pwzcConfig)
{
CopyMemory(&m_wzcConfig, &(pwzcConfig->m_wzcConfig), sizeof(WZC_WLAN_CONFIG));
return ERROR_SUCCESS;
}
//+---------------------------------------------------------------------------
// INIT_DIALOG handler
LRESULT
CWZCConfigProps::OnInitDialog (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
DWORD dwStyle;
HRESULT hr = S_OK;
// get all the controls handles
m_hwndEdSSID = GetDlgItem(IDC_WZC_EDIT_SSID);
m_hwndChkAdhoc = GetDlgItem(IDC_ADHOC);
m_hwndUsePW = GetDlgItem(IDC_USEPW);
// initialize the SSID field with the SSID, if one is given
if (m_wzcConfig.Ssid.SsidLength != 0)
{
// ugly but this is life. In order to convert the SSID to LPWSTR we need a buffer.
// We know an SSID can't exceed 32 chars (see NDIS_802_11_SSID from ntddndis.h) so
// make room for the null terminator and that's it. We could do mem alloc but I'm
// not sure it worth the effort (at runtime).
WCHAR wszSSID[33];
UINT nLenSSID = 0;
// convert the LPSTR (original SSID format) to LPWSTR (needed in List Ctrl)
nLenSSID = MultiByteToWideChar(
CP_ACP,
0,
(LPCSTR)m_wzcConfig.Ssid.Ssid,
m_wzcConfig.Ssid.SsidLength,
wszSSID,
celems(wszSSID));
if (nLenSSID != 0)
{
wszSSID[nLenSSID] = L'\0';
::SetWindowText(m_hwndEdSSID, wszSSID);
}
}
// Check the "this network is adhoc" box if neccessary.
::SendMessage(m_hwndChkAdhoc, BM_SETCHECK, (m_wzcConfig.InfrastructureMode == Ndis802_11IBSS) ? BST_CHECKED : BST_UNCHECKED, 0);
// the SSID can't be under any circumstances larger than 32 chars
::SendMessage(m_hwndEdSSID, EM_LIMITTEXT, 32, 0);
::SendMessage(m_hwndUsePW, BM_SETCHECK, (m_wzcConfig.Privacy == 1) ? BST_CHECKED : BST_UNCHECKED, 0);
return LresFromHr(hr);
}
//+---------------------------------------------------------------------------
// OK button handler
LRESULT
CWZCConfigProps::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
bHandled = TRUE;
EndDialog(IDOK);
return 0;
}
//+---------------------------------------------------------------------------
// Cancel button handler
LRESULT
CWZCConfigProps::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
// return S_FALSE on cancel
bHandled = TRUE;
EndDialog(IDCANCEL);
return 0;
}
//+---------------------------------------------------------------------------
// Context sensitive help handler
extern const WCHAR c_szNetCfgHelpFile[];
LRESULT
CWZCConfigProps::OnContextMenu(
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
BOOL& fHandled)
{
::WinHelp(m_hWnd,
c_szNetCfgHelpFile,
HELP_CONTEXTMENU,
(ULONG_PTR)g_aHelpIDs_IDC_WZC_DLG_VPROPS);
return 0;
}
LRESULT
CWZCConfigProps::OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
LPHELPINFO lphi = reinterpret_cast<LPHELPINFO>(lParam);
if (HELPINFO_WINDOW == lphi->iContextType)
{
::WinHelp(static_cast<HWND>(lphi->hItemHandle),
c_szNetCfgHelpFile,
HELP_WM_HELP,
(ULONG_PTR)g_aHelpIDs_IDC_WZC_DLG_VPROPS);
}
return 0;
}