// SettingDlg.cpp : 实现文件 // #include "stdafx.h" #include "2015Remote.h" #include "SettingDlg.h" #include "afxdialogex.h" #include "client/CursorInfo.h" #include "common/location.h" // CSettingDlg 对话框 IMPLEMENT_DYNAMIC(CSettingDlg, CDialog) CSettingDlg::CSettingDlg(CWnd* pParent) : CDialog(CSettingDlg::IDD, pParent) , m_nListenPort("6543") , m_nMax_Connect(0) , m_sScreenCapture(_T("GDI")) , m_sScreenCompress(_T("屏幕差异算法")) , m_nReportInterval(5) , m_sSoftwareDetect(_T("摄像头")) , m_sPublicIP(_T("")) , m_sUdpOption(_T("")) , m_nFrpPort(7000) , m_sFrpToken(_T("")) { } CSettingDlg::~CSettingDlg() { } void CSettingDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_PORT, m_nListenPort); DDV_MaxChars(pDX, m_nListenPort, 32); DDX_Text(pDX, IDC_EDIT_MAX, m_nMax_Connect); DDX_Control(pDX, IDC_BUTTON_SETTINGAPPLY, m_ApplyButton); DDX_Control(pDX, IDC_COMBO_SCREEN_CAPTURE, m_ComboScreenCapture); DDX_CBString(pDX, IDC_COMBO_SCREEN_CAPTURE, m_sScreenCapture); DDV_MaxChars(pDX, m_sScreenCapture, 32); DDX_Control(pDX, IDC_COMBO_SCREEN_COMPRESS, m_ComboScreenCompress); DDX_CBString(pDX, IDC_COMBO_SCREEN_COMPRESS, m_sScreenCompress); DDX_Control(pDX, IDC_EDIT_REPORTINTERVAL, m_EditReportInterval); DDX_Text(pDX, IDC_EDIT_REPORTINTERVAL, m_nReportInterval); DDV_MinMaxInt(pDX, m_nReportInterval, 0, 3600); DDX_Control(pDX, IDC_COMBO_SOFTWAREDETECT, m_ComboSoftwareDetect); DDX_CBString(pDX, IDC_COMBO_SOFTWAREDETECT, m_sSoftwareDetect); DDV_MaxChars(pDX, m_sSoftwareDetect, 256); DDX_Control(pDX, IDC_EDIT_PUBLIC_IP, m_EditPublicIP); DDX_Text(pDX, IDC_EDIT_PUBLIC_IP, m_sPublicIP); DDV_MaxChars(pDX, m_sPublicIP, 100); DDX_Control(pDX, IDC_EDIT_UDP_OPTION, m_EditUdpOption); DDX_Text(pDX, IDC_EDIT_UDP_OPTION, m_sUdpOption); DDV_MaxChars(pDX, m_sUdpOption, 24); DDX_Control(pDX, IDC_EDIT_FRP_PORT, m_EditFrpPort); DDX_Text(pDX, IDC_EDIT_FRP_PORT, m_nFrpPort); DDV_MinMaxInt(pDX, m_nFrpPort, 1, 65535); DDX_Control(pDX, IDC_EDIT_FRP_TOKEN, m_EditFrpToken); DDX_Text(pDX, IDC_EDIT_FRP_TOKEN, m_sFrpToken); DDV_MaxChars(pDX, m_sFrpToken, 24); DDX_Control(pDX, IDC_COMBO_VIDEO_WALL, m_ComboVideoWall); } BEGIN_MESSAGE_MAP(CSettingDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON_SETTINGAPPLY, &CSettingDlg::OnBnClickedButtonSettingapply) ON_EN_CHANGE(IDC_EDIT_PORT, &CSettingDlg::OnEnChangeEditPort) ON_EN_CHANGE(IDC_EDIT_MAX, &CSettingDlg::OnEnChangeEditMax) ON_BN_CLICKED(IDC_RADIO_ALL_SCREEN, &CSettingDlg::OnBnClickedRadioAllScreen) ON_BN_CLICKED(IDC_RADIO_MAIN_SCREEN, &CSettingDlg::OnBnClickedRadioMainScreen) ON_BN_CLICKED(IDC_RADIO_FRP_OFF, &CSettingDlg::OnBnClickedRadioFrpOff) ON_BN_CLICKED(IDC_RADIO_FRP_ON, &CSettingDlg::OnBnClickedRadioFrpOn) END_MESSAGE_MAP() // CSettingDlg 消息处理程序 BOOL CSettingDlg::OnInitDialog() { CDialog::OnInitDialog(); IPConverter cvt; m_sPublicIP = THIS_CFG.GetStr("settings", "master", "").c_str(); m_sPublicIP = m_sPublicIP.IsEmpty() ? cvt.getPublicIP().c_str() : m_sPublicIP; std::string nPort = THIS_CFG.GetStr("settings", "ghost", "6543"); m_sUdpOption = THIS_CFG.GetStr("settings", "UDPOption", "0").c_str(); int DXGI = THIS_CFG.GetInt("settings", "DXGI"); CString algo = THIS_CFG.GetStr("settings", "ScreenCompress", "").c_str(); m_nListenPort = nPort.c_str(); int n = algo.IsEmpty() ? ALGORITHM_DIFF : atoi(algo.GetString()); switch (n) { case ALGORITHM_GRAY: m_sScreenCompress = "灰度图像传输"; break; case ALGORITHM_DIFF: m_sScreenCompress = "屏幕差异算法"; break; case ALGORITHM_H264: m_sScreenCompress = "H264压缩算法"; break; default: break; } m_ComboScreenCompress.InsertString(ALGORITHM_GRAY, "灰度图像传输"); m_ComboScreenCompress.InsertString(ALGORITHM_DIFF, "屏幕差异算法"); m_ComboScreenCompress.InsertString(ALGORITHM_H264, "H264压缩算法"); m_ComboScreenCapture.InsertString(0, "GDI"); m_ComboScreenCapture.InsertString(1, "DXGI"); m_ComboScreenCapture.InsertString(2, "VIRTUAL"); m_sScreenCapture = DXGI==1 ? "DXGI" : (DXGI == 2 ? "VIRTUAL" : "GDI"); m_ComboSoftwareDetect.InsertString(SOFTWARE_CAMERA, "摄像头"); m_ComboSoftwareDetect.InsertString(SOFTWARE_TELEGRAM, "电报"); auto str = THIS_CFG.GetStr("settings", "ReportInterval", "5"); m_nReportInterval = atoi(str.c_str()); n = THIS_CFG.GetInt("settings", "SoftwareDetect"); switch (n) { case SOFTWARE_CAMERA: m_sSoftwareDetect = "摄像头"; break; case SOFTWARE_TELEGRAM: m_sSoftwareDetect = "电报"; break; default: m_sSoftwareDetect = "摄像头"; break; } BOOL all = THIS_CFG.GetInt("settings", "MultiScreen"); ((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->SetCheck(!all); ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->SetCheck(all); BOOL frp = THIS_CFG.GetInt("frp", "UseFrp"); ((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->SetCheck(!frp); ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->SetCheck(frp); m_nFrpPort = THIS_CFG.GetInt("frp", "server_port", 7000); m_sFrpToken = THIS_CFG.GetStr("frp", "token").c_str(); int size = THIS_CFG.GetInt("settings", "VideoWallSize"); m_ComboVideoWall.InsertString(0, "无"); m_ComboVideoWall.InsertString(1, "2 x 2"); m_ComboVideoWall.InsertString(2, "3 x 3"); m_ComboVideoWall.InsertString(3, "4 x 4"); m_ComboVideoWall.InsertString(4, "5 x 5"); if (size < 1 || size > 5) size = 1; m_ComboVideoWall.SetCurSel(size-1); UpdateData(FALSE); return TRUE; } void CSettingDlg::OnBnClickedButtonSettingapply() { UpdateData(TRUE); THIS_CFG.SetStr("settings", "master", m_sPublicIP.GetBuffer()); THIS_CFG.SetStr("settings", "ghost", m_nListenPort.GetString()); THIS_CFG.SetStr("settings", "UDPOption", m_sUdpOption.GetString()); int n = m_ComboScreenCapture.GetCurSel(); THIS_CFG.SetInt("settings", "DXGI", n); n = m_ComboScreenCompress.GetCurSel(); THIS_CFG.SetInt("settings", "ScreenCompress", n); THIS_CFG.SetInt("settings", "ReportInterval", m_nReportInterval); n = m_ComboSoftwareDetect.GetCurSel(); THIS_CFG.SetInt("settings", "SoftwareDetect", n); BOOL all = ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->GetCheck(); THIS_CFG.SetInt("settings", "MultiScreen", all); BOOL frp = ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->GetCheck(); THIS_CFG.SetInt("frp", "UseFrp", frp); THIS_CFG.SetInt("frp", "server_port", m_nFrpPort); THIS_CFG.SetStr("frp", "token", m_sFrpToken.GetString()); THIS_CFG.SetInt("settings", "VideoWallSize", m_ComboVideoWall.GetCurSel()+1); m_ApplyButton.EnableWindow(FALSE); m_ApplyButton.ShowWindow(SW_HIDE); } void CSettingDlg::OnEnChangeEditPort() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialog::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 // 给Button添加变量 m_ApplyButton.ShowWindow(SW_NORMAL); m_ApplyButton.EnableWindow(TRUE); } void CSettingDlg::OnEnChangeEditMax() { // TODO: 如果该控件是 RICHEDIT 控件,它将不 // 发送此通知,除非重写 CDialog::OnInitDialog() // 函数并调用 CRichEditCtrl().SetEventMask(), // 同时将 ENM_CHANGE 标志“或”运算到掩码中。 // TODO: 在此添加控件通知处理程序代码 HWND hApplyButton = ::GetDlgItem(m_hWnd,IDC_BUTTON_SETTINGAPPLY); ::ShowWindow(hApplyButton,SW_NORMAL); ::EnableWindow(hApplyButton,TRUE); } void CSettingDlg::OnOK() { OnBnClickedButtonSettingapply(); CDialog::OnOK(); } void CSettingDlg::OnBnClickedRadioAllScreen() { BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->GetCheck(); ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->SetCheck(!b); } void CSettingDlg::OnBnClickedRadioMainScreen() { BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_MAIN_SCREEN))->GetCheck(); ((CButton*)GetDlgItem(IDC_RADIO_ALL_SCREEN))->SetCheck(!b); } void CSettingDlg::OnBnClickedRadioFrpOff() { BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->GetCheck(); ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->SetCheck(!b); } void CSettingDlg::OnBnClickedRadioFrpOn() { BOOL b = ((CButton*)GetDlgItem(IDC_RADIO_FRP_ON))->GetCheck(); ((CButton*)GetDlgItem(IDC_RADIO_FRP_OFF))->SetCheck(!b); }