www.pudn.com > GGBT.rar > DlgAdvancedPage.cpp
// DlgAdvancedPage.cpp : implementation file
//
#include "stdafx.h"
#include "testbt.h"
#include "DlgAdvancedPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgAdvancedPage dialog
CDlgAdvancedPage::CDlgAdvancedPage(CWnd* pParent /*=NULL*/)
: CPropertyPage(CDlgAdvancedPage::IDD)
{
//{{AFX_DATA_INIT(CDlgAdvancedPage)
m_strSendServerIP = _T("");
m_strBindIP = _T("");
//}}AFX_DATA_INIT
m_lPeersMin = 0;
m_lPeersMax = 0;
m_lDisplayItval = 0;
m_lAllocSpeed = 0;
m_eAllocType = CStorageWrapperEx::eAllocNormal;
m_lFileOpenMax = 0;
m_bSuperSeed = false;
m_pSetupRegister = 0;
}
void CDlgAdvancedPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgAdvancedPage)
DDX_Control(pDX, IDC_BUTTON_RESET, m_btnReset);
DDX_Control(pDX, IDC_GROUP_ADVSETUP, m_gpAdvSetup);
DDX_Control(pDX, IDC_COMBO_FILE_LOCK, m_cbFileLock);
DDX_Control(pDX, IDC_COMBO_EXTRA_CHECK, m_cbExtraCheck);
DDX_Control(pDX, IDC_SPIN_ALLOC_SPEED, m_spinAllocSpeed);
DDX_Control(pDX, IDC_COMBO_SEED_TYPE, m_cbSeedType);
DDX_Control(pDX, IDC_COMBO_FILEOPEN_MAX, m_cbFileOpenMax);
DDX_Control(pDX, IDC_COMBO_ALLOC_TYPE, m_cbAllocType);
DDX_Control(pDX, IDC_SPIN_PEERS_MAX, m_spinPeersMax);
DDX_Control(pDX, IDC_SPIN_DISPLAY_ITVAL, m_spinDisplayItval);
DDX_Control(pDX, IDC_SPIN_PEERS_MIN, m_spinPeersMin);
DDX_Text(pDX, IDC_EDIT_SEND_SERVER_IP, m_strSendServerIP);
DDX_Text(pDX, IDC_EDIT_BIND_IP, m_strBindIP);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgAdvancedPage, CPropertyPage)
//{{AFX_MSG_MAP(CDlgAdvancedPage)
ON_BN_CLICKED(IDC_BUTTON_RESET, OnButtonReset)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgAdvancedPage message handlers
BOOL CDlgAdvancedPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// spins.
m_spinPeersMin.SetBuddy(GetDlgItem(IDC_EDIT_PEERS_MIN));
m_spinPeersMax.SetBuddy(GetDlgItem(IDC_EDIT_PEERS_MAX));
m_spinDisplayItval.SetBuddy(GetDlgItem(IDC_EDIT_DISPLAY_ITVAL));
m_spinAllocSpeed.SetBuddy(GetDlgItem(IDC_EDIT_ALLOC_SPEED));
m_spinPeersMin.SetRange(10, 60);
m_spinPeersMax.SetRange(10, 60);
m_spinDisplayItval.SetRange(100, 10000);
m_spinAllocSpeed.SetRange(1, 10);
// CComboBox
m_cbAllocType.AddString("普通分配");
m_cbAllocType.SetItemData(m_cbAllocType.GetCount()-1, CStorageWrapperEx::eAllocNormal);
m_cbAllocType.AddString("后台分配");
m_cbAllocType.SetItemData(m_cbAllocType.GetCount()-1, CStorageWrapperEx::eAllocBackGound);
m_cbAllocType.AddString("预分配");
m_cbAllocType.SetItemData(m_cbAllocType.GetCount()-1, CStorageWrapperEx::eAllocPreAllocate);
m_cbAllocType.AddString("特殊分配");
m_cbAllocType.SetItemData(m_cbAllocType.GetCount()-1, CStorageWrapperEx::eAllocSparse);
m_cbFileOpenMax.AddString("50");
m_cbFileOpenMax.SetItemData(m_cbFileOpenMax.GetCount()-1, 50);
m_cbFileOpenMax.AddString("100");
m_cbFileOpenMax.SetItemData(m_cbFileOpenMax.GetCount()-1, 100);
m_cbFileOpenMax.AddString("200");
m_cbFileOpenMax.SetItemData(m_cbFileOpenMax.GetCount()-1, 200);
m_cbFileOpenMax.AddString("无限制");
m_cbFileOpenMax.SetItemData(m_cbFileOpenMax.GetCount()-1, 0);
m_cbSeedType.AddString("普通");
m_cbSeedType.SetItemData(m_cbSeedType.GetCount()-1, 0);
m_cbSeedType.AddString("超级种子");
m_cbSeedType.SetItemData(m_cbSeedType.GetCount()-1, 1);
for (int i=0; iGetWindowRect(&rcItem);
ScreenToClient(rcItem);
//if (!m_Tooltip.AddTool(this, "你好", rcItem, IDC_EDIT_SEND_SERVER_IP))
if (!m_Tooltip.AddTool(GetDlgItem(IDC_EDIT_PEERS_MIN), "当达到最小下载者数时,不再试图连接服务器,来获得新的客户端信息"))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_EDIT_PEERS_MAX), "连接客户端数量的最大值,达到这个值后,系统不再新建与其他客户端的连接"))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_COMBO_FILE_LOCK), "文件锁定选项防止数据在下载过程中被破坏."))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_COMBO_EXTRA_CHECK), "该选项设定程序做额外的文件检查以便确定没有被破坏的文件,双倍检查可能耗用cpu资源,完全检查将减慢磁盘读写速度."))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_COMBO_ALLOC_TYPE), "普通分配:将让文件大小随下载过程逐渐增长,这将有利于加快文件检查速度.\r\n\r\n后台分配:将在下载过程中分配空间.\r\n\r\n预分配:在下载前完成分配,这将有助于减少文件碎片.\r\n\r\n特殊分配:将先数据保存到一个地方直到下载完成移动数据"))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_EDIT_ALLOC_SPEED), "安置速度是指在后台分配方式下,后台分配空间的速度"))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_COMBO_FILEOPEN_MAX), "在同一时间打开文件的最大值,零表示无限制.注意这个选项有效时不能保证文件被锁定"))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_COMBO_SEED_TYPE), "超级种子能让你更有效地做一个大文件的种子."))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_EDIT_DISPLAY_ITVAL), "更新显示时间的间隔.单位是千分之一秒,这个值设得太低将会拖慢你的系统和视频播放."))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_EDIT_SEND_SERVER_IP), "报告给服务器的IP."))
{
ASSERT(FALSE);
}
if (!m_Tooltip.AddTool(GetDlgItem(IDC_EDIT_BIND_IP), "客户端绑定的IP,这个选项只有在你可以直接连接到多个IP时才有效,如果你不知道如何设置,请将留空."))
{
ASSERT(FALSE);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
bool CDlgAdvancedPage::Apply()
{
UpdateData();
int lower=0, upper=0;
m_lPeersMin = LOWORD(m_spinPeersMin.GetPos());
m_lPeersMax = LOWORD(m_spinPeersMax.GetPos());
m_lDisplayItval = LOWORD(m_spinDisplayItval.GetPos());
m_lAllocSpeed = LOWORD(m_spinAllocSpeed.GetPos());
m_spinPeersMin.GetRange(lower, upper);
m_lPeersMin = max(lower, m_lPeersMin);
m_lPeersMin = min(upper, m_lPeersMin);
m_spinPeersMax.GetRange(lower, upper);
m_lPeersMax = max(lower, m_lPeersMax);
m_lPeersMax = min(upper, m_lPeersMax);
if (m_lPeersMin >= m_lPeersMax)
{
m_spinPeersMin.GetRange(lower, upper);
m_lPeersMin = lower;
}
m_spinDisplayItval.GetRange(lower, upper);
m_lDisplayItval = max(lower, m_lDisplayItval);
m_lDisplayItval = min(upper, m_lDisplayItval);
m_spinAllocSpeed.GetRange(lower, upper);
m_lAllocSpeed = max(lower, m_lAllocSpeed);
m_lAllocSpeed = min(upper, m_lAllocSpeed);
m_eAllocType = (CStorageWrapperEx::eAllocType)m_cbAllocType.GetItemData(m_cbAllocType.GetCurSel());
m_lFileOpenMax = m_cbFileOpenMax.GetItemData(m_cbFileOpenMax.GetCurSel());
m_bSuperSeed = m_cbSeedType.GetItemData(m_cbSeedType.GetCurSel()) > 0;
return true;
}
void CDlgAdvancedPage::SetData(CSetupRegister *pSetupRegister)
{
m_pSetupRegister = pSetupRegister;
m_lPeersMin = pSetupRegister->m_lPeersMin;
m_lPeersMax = pSetupRegister->m_lPeersMax;
m_lDisplayItval = pSetupRegister->m_lDisplayItval;
m_lAllocSpeed = pSetupRegister->m_lAllocSpeed;
m_eAllocType = pSetupRegister->m_eAllocType;
m_lFileOpenMax = pSetupRegister->m_lFileOpenMax;
m_bSuperSeed = pSetupRegister->m_bSuperSeed;
m_spinPeersMin.SetPos(m_lPeersMin);
m_spinPeersMax.SetPos(m_lPeersMax);
m_spinDisplayItval.SetPos(m_lDisplayItval);
m_spinAllocSpeed.SetPos(m_lAllocSpeed);
m_cbAllocType.SetCurSel(0);
for (int i=0; m_cbAllocType.GetCount(); i++)
{
if (m_cbAllocType.GetItemData(i) == m_eAllocType)
{
m_cbAllocType.SetCurSel(i);
break;
}
}
m_cbFileOpenMax.SetCurSel(0);
for (i=0; m_cbFileOpenMax.GetCount(); i++)
{
if (m_cbFileOpenMax.GetItemData(i) == m_lFileOpenMax)
{
m_cbFileOpenMax.SetCurSel(i);
break;
}
}
m_cbSeedType.SetCurSel(0);
for (i=0; m_cbSeedType.GetCount(); i++)
{
if (m_cbSeedType.GetItemData(i) == (long)m_bSuperSeed)
{
m_cbSeedType.SetCurSel(i);
break;
}
}
m_cbFileLock.SetCurSel(pSetupRegister->m_eFileLock);
m_cbExtraCheck.SetCurSel(pSetupRegister->m_eExtraCheck);
m_strBindIP = m_strSendServerIP = "";
in_addr inaddress;
if (pSetupRegister->m_lBindIP != INADDR_NONE )
{
inaddress.S_un.S_addr = pSetupRegister->m_lBindIP;
m_strBindIP = inet_ntoa(inaddress);
}
if (pSetupRegister->m_lSendServerIP != INADDR_NONE)
{
inaddress.S_un.S_addr = pSetupRegister->m_lSendServerIP;
m_strSendServerIP = inet_ntoa(inaddress);
}
UpdateData(false);
}
void CDlgAdvancedPage::GetData(CSetupRegister *pSetupRegister)
{
pSetupRegister->m_lPeersMin = m_lPeersMin;
pSetupRegister->m_lPeersMax = m_lPeersMax ;
pSetupRegister->m_lDisplayItval = m_lDisplayItval;
pSetupRegister->m_lAllocSpeed = m_lAllocSpeed;
pSetupRegister->m_eAllocType = m_eAllocType;
pSetupRegister->m_lFileOpenMax = m_lFileOpenMax;
pSetupRegister->m_bSuperSeed = m_bSuperSeed;
pSetupRegister->m_eFileLock = (CSetupRegister::eFileLockType)m_cbFileLock.GetCurSel();
pSetupRegister->m_eExtraCheck = (CSetupRegister::eExtraCheck)m_cbExtraCheck.GetCurSel();
pSetupRegister->m_lBindIP = inet_addr(m_strBindIP);
pSetupRegister->m_lSendServerIP = inet_addr(m_strSendServerIP);
}
void CDlgAdvancedPage::OnOK()
{
GetParent()->SendMessage(WM_COMMAND, IDOK, 0);
CPropertyPage::OnOK();
}
void CDlgAdvancedPage::OnCancel()
{
GetParent()->SendMessage(WM_COMMAND, IDCANCEL, 0);
CPropertyPage::OnCancel();
}
void CDlgAdvancedPage::OnButtonReset()
{
/*
if (!m_pSetupRegister)
{
assert(false);
return;
}
m_pSetupRegister->GetDefaultAdvaced();
//*/
CSetupRegister tempSetupRegister;
SetData(&tempSetupRegister);
}
BOOL CDlgAdvancedPage::PreTranslateMessage(MSG* pMsg)
{
ASSERT(m_Tooltip.GetSafeHwnd());
m_Tooltip.RelayEvent(pMsg);
CWnd* pNext = GetNextDlgTabItem(0);
if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&
(pMsg->wParam == VK_TAB || pMsg->wParam == VK_PRIOR || pMsg->wParam == VK_NEXT))
{
}
return CPropertyPage::PreTranslateMessage(pMsg);
}