⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proppageipaccess.cpp

📁 ftpserver very good sample
💻 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 + -