📄 proppageipaccess.cpp
字号:
// PropPageIpAccess.cpp : implementation file//#include "stdafx.h"#include "warmmcsnapin.h"#include "PropPageIpAccess.h"#include "DlgIpAddressWithSubnet.h"#include "WarIpMask.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifusing namespace std;/////////////////////////////////////////////////////////////////////////////// CPropPageIpAccess property pageCImageList *CPropPageIpAccess::mpImageList;IMPLEMENT_DYNCREATE(CPropPageIpAccess, CPropertyPage)CPropPageIpAccess::CPropPageIpAccess(war_if_site_ptr_t& sitePtr) : CPropertyPage(CPropPageIpAccess::IDD),mSitePtr(sitePtr){ m_Mode = 0; m_Explanaition.LoadString(IDS_EXPL_IP_ACCESS_SITE); WarIpAccessList access_list; sitePtr->GetIpAccessList(access_list); war_regstr_t ip_str; access_list.GetStrList(ip_str); mIpList = ip_str.c_str();}CPropPageIpAccess::CPropPageIpAccess() : CPropertyPage(CPropPageIpAccess::IDD){ //{{AFX_DATA_INIT(CPropPageIpAccess) m_Mode = 0; m_Explanaition = _T(""); //}}AFX_DATA_INIT if (!mpImageList) { mpImageList = new CImageList; mpImageList->Create(IDB_COMPUTER, 16, 0, RGB(0, 128, 128)); } m_Explanaition.LoadString(IDS_EXPL_IP_ACCESS_PATH);}CPropPageIpAccess::~CPropPageIpAccess(){}void CPropPageIpAccess::Initialize(){ m_Mode = 0; if (!mpImageList) { mpImageList = new CImageList; mpImageList->Create(IDB_COMPUTER, 16, 0, RGB(0, 128, 128)); }}void CPropPageIpAccess::DoDataExchange(CDataExchange* pDX){ CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPropPageIpAccess) DDX_Control(pDX, IDC_IP_LIST, m_ctlList); DDX_Radio(pDX, IDC_ALLOW, m_Mode); DDX_Text(pDX, IDC_EXPLANATION, m_Explanaition); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CPropPageIpAccess, CPropertyPage) //{{AFX_MSG_MAP(CPropPageIpAccess) ON_NOTIFY(NM_DBLCLK, IDC_IP_LIST, OnDblclkIpList) ON_NOTIFY(NM_RCLICK, IDC_IP_LIST, OnRclickIpList) ON_COMMAND(ID_POPUP_NEW, OnPopupNew) ON_COMMAND(ID_POPUP_PROPERTIES, OnPopupProperties) ON_COMMAND(ID_POPUP_DELETE, OnPopupDelete) ON_BN_CLICKED(IDC_ALLOW, OnChange) ON_BN_CLICKED(IDC_DENY, OnChange) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CPropPageIpAccess message handlersBOOL CPropPageIpAccess::OnInitDialog() { CPropertyPage::OnInitDialog(); m_ctlList.InsertColumn(0, _T("IP address or network mask"), LVCFMT_LEFT, 200, 0); m_ctlList.SetImageList(mpImageList, LVSIL_SMALL); if (!mIpList.IsEmpty()) { LPCTSTR p = mIpList; CString item; int icon = 0; while(true) { if ('/' == *p) { icon = 1; // Subnet item += *p++; } else if (!*p || (';' == *p)) { if (!item.IsEmpty()) m_ctlList.InsertItem(0, item, icon); item = _T(""); icon = 0; if (!*p) break; ++p; } else if (isspace(*p)) { ++p; // Skip } else { item += *p++; } } } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void CPropPageIpAccess::OnDblclkIpList(NMHDR* pNMHDR, LRESULT* pResult) { OnPopupProperties(); *pResult = 0;}void CPropPageIpAccess::OnRclickIpList(NMHDR* pNMHDR, LRESULT* pResult) { CPoint pos, client_pos; GetCursorPos(&pos); client_pos = pos; UINT flags = 0; m_ctlList.ScreenToClient(&client_pos); int targeted_item = m_ctlList.HitTest(client_pos, &flags); CMenu MenuT, *Menu; MenuT.LoadMenu(IDR_POPUP_IP_ACCESSLIST); Menu = MenuT.GetSubMenu(0); if (0 <= targeted_item) { LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_PARAM | LVIF_STATE | LVIF_TEXT | LVIF_IMAGE; i.iItem = targeted_item; m_ctlList.GetItem(&i); if (i.state & LVIS_SELECTED) { } else { // Unselect all and select the item POSITION pos = m_ctlList.GetFirstSelectedItemPosition(); while(pos) { LVITEM ii; memset(&ii, 0, sizeof(ii)); ii.iItem = m_ctlList.GetNextSelectedItem(pos); ii.mask = LVIF_STATE; m_ctlList.GetItem(&ii); ii.state &= ~LVIS_SELECTED; m_ctlList.SetItem(&ii); } i.mask = LVIF_STATE; i.state |= LVIS_SELECTED | LVIS_FOCUSED; m_ctlList.SetItem(&i); } int num_selected = m_ctlList.GetSelectedCount(); // Enable available options Menu->EnableMenuItem(ID_POPUP_DELETE, MF_ENABLED); if (1 == num_selected) Menu->EnableMenuItem(ID_POPUP_PROPERTIES, MF_ENABLED); } Menu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN, pos.x, pos.y, this); Menu->DestroyMenu(); *pResult = 0;}void CPropPageIpAccess::OnPopupNew() { CDlgIpAddressWithSubnet my_dlg; if (my_dlg.DoModal() == IDOK) { CString item; int icon = 0; item = inet_ntoa(my_dlg.mIpAddress); if (0xffffffff != my_dlg.mIpMask.s_addr) { item += _T("/"); item += inet_ntoa(my_dlg.mIpMask); icon = 1; } m_ctlList.InsertItem(0, item, icon); OnChange(); }}void CPropPageIpAccess::OnPopupProperties() { int num_rows = m_ctlList.GetItemCount(); for(int index = 0; index < num_rows; index++) { LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_PARAM | LVIF_STATE; i.stateMask = LVIS_SELECTED; i.iItem = index; m_ctlList.GetItem(&i); if (i.state & LVIS_SELECTED) { Edit(index); break; } } }void CPropPageIpAccess::OnPopupDelete() { for(int index = 0; index < m_ctlList.GetItemCount(); index++) { LVITEM i; memset(&i, 0, sizeof(i)); i.mask = LVIF_PARAM | LVIF_STATE; i.stateMask = LVIS_SELECTED; i.iItem = index; m_ctlList.GetItem(&i); if (i.state & LVIS_SELECTED) { m_ctlList.DeleteItem(index); index--; } } SetModified();}void CPropPageIpAccess::Edit(int itemIndex){ CDlgIpAddressWithSubnet my_dlg; WarIpMask my_mask; my_mask = (LPCTSTR)m_ctlList.GetItemText(itemIndex, 0); my_dlg.mIpAddress.s_addr = my_mask.mIpAddress.s_addr; my_dlg.mIpMask.s_addr = my_mask.mIpMask.s_addr; if (my_dlg.DoModal() == IDOK) { CString item; int icon = 0; item = inet_ntoa(my_dlg.mIpAddress); if (0xffffffff != my_dlg.mIpMask.s_addr) { item += _T("/"); item += inet_ntoa(my_dlg.mIpMask); icon = 1; } m_ctlList.DeleteItem(itemIndex); m_ctlList.InsertItem(0, item, icon); OnChange(); }}BOOL CPropPageIpAccess::OnApply() { UpdateData(); mIpList = _T(""); for(int i = 0; i < m_ctlList.GetItemCount(); i++) { if (!mIpList.IsEmpty()) mIpList += ';'; mIpList += m_ctlList.GetItemText(i, 0); } WarIpAccessList my_access_list; my_access_list.SetValue((WarIpAccessList::ModeE)m_Mode, (LPCTSTR)mIpList); if (mSitePtr) mSitePtr->SetIpAccessList(my_access_list); return CPropertyPage::OnApply();}void CPropPageIpAccess::OnChange() { SetModified();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -