264 lines
6.1 KiB
C++
264 lines
6.1 KiB
C++
// DlgRange.cpp: 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "hgjson.h"
|
|
#include "DlgRange.h"
|
|
#include "afxdialogex.h"
|
|
|
|
#include "resource.h"
|
|
|
|
// CDlgRange 对话框
|
|
|
|
IMPLEMENT_DYNAMIC(CDlgRange, CDialogEx)
|
|
|
|
CDlgRange::CDlgRange(int type, CWnd* pParent /*=nullptr*/)
|
|
: CDialogEx(IDD_RANGE, pParent)
|
|
, type_(type)
|
|
{
|
|
|
|
}
|
|
|
|
CDlgRange::~CDlgRange()
|
|
{
|
|
}
|
|
|
|
std::wstring CDlgRange::get_item_text(UINT id)
|
|
{
|
|
int l = GetDlgItem(id)->GetWindowTextLengthW();
|
|
wchar_t* buf = new wchar_t[l + 4];
|
|
|
|
l = GetDlgItem(id)->GetWindowTextW(buf, l + 2);
|
|
buf[l] = 0;
|
|
|
|
std::wstring ret(buf);
|
|
|
|
delete[] buf;
|
|
|
|
return std::move(ret);
|
|
}
|
|
|
|
void CDlgRange::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialogEx::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_LIST1, list_);
|
|
DDX_Control(pDX, IDC_COMBO_VAL, val_);
|
|
}
|
|
|
|
BOOL CDlgRange::OnInitDialog()
|
|
{
|
|
CDialogEx::OnInitDialog();
|
|
|
|
// Set the icon for this dialog. The framework does this automatically
|
|
// when the application's main window is not a dialog
|
|
list_.SetExtendedStyle(list_.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP);
|
|
list_.InsertColumn(0, TEXT("Value lists"), 0, 177);
|
|
list_.InsertColumn(1, TEXT("Default"), 0, 48);
|
|
|
|
GetDlgItem(IDC_EDIT_VAL)->EnableWindow(type_ == TYPE_LIST);
|
|
list_.EnableWindow(type_ == TYPE_LIST);
|
|
GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(type_ == TYPE_LIST);
|
|
|
|
GetDlgItem(IDC_EDIT_FROM)->EnableWindow(type_ == TYPE_RANGE);
|
|
GetDlgItem(IDC_EDIT_TO)->EnableWindow(type_ == TYPE_RANGE);
|
|
GetDlgItem(IDC_EDIT_STEP)->EnableWindow(type_ == TYPE_RANGE);
|
|
GetDlgItem(IDC_EDIT_INIT2)->EnableWindow(type_ == TYPE_RANGE);
|
|
|
|
GetDlgItem(IDC_COMBO_FIELD)->EnableWindow(type_ == TYPE_FIELDS);
|
|
val_.EnableWindow(type_ == TYPE_FIELDS);
|
|
|
|
if (type_ == TYPE_LIST)
|
|
{
|
|
for (auto& v: vals_)
|
|
{
|
|
int ind = list_.InsertItem(list_.GetItemCount(), v.c_str());
|
|
if (v == init_)
|
|
list_.SetItemText(ind, 1, L"yes");
|
|
}
|
|
}
|
|
else if(type_ == TYPE_RANGE && vals_.size() == 3)
|
|
{
|
|
SetDlgItemTextW(IDC_EDIT_FROM, vals_[0].c_str());
|
|
SetDlgItemTextW(IDC_EDIT_TO, vals_[1].c_str());
|
|
SetDlgItemTextW(IDC_EDIT_STEP, vals_[2].c_str());
|
|
|
|
SetDlgItemTextW(IDC_EDIT_INIT2, init_.c_str());
|
|
}
|
|
else if (type_ == TYPE_FIELDS)
|
|
{
|
|
|
|
}
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CDlgRange, CDialogEx)
|
|
ON_BN_CLICKED(IDC_BUTTON_ADD, &CDlgRange::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDOK, &CDlgRange::OnBnClickedOk)
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CDlgRange::OnNMDblclkList1)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_FIELD, &CDlgRange::OnCbnSelchangeComboField)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CDlgRange 消息处理程序
|
|
|
|
|
|
void CDlgRange::OnBnClickedButton1()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
std::wstring val(get_item_text(IDC_EDIT_VAL));
|
|
int ind = -1;
|
|
|
|
if (val.empty())
|
|
{
|
|
MessageBox(TEXT("NO Input!"));
|
|
return;
|
|
}
|
|
for (int i = 0; i < list_.GetItemCount(); ++i)
|
|
{
|
|
wchar_t buf[25] = { 0 };
|
|
list_.GetItemText(i, 0, buf, _countof(buf) - 1);
|
|
if (val == buf)
|
|
{
|
|
list_.SetItemState(i, LVIS_FOCUSED | LVIS_SELECTED | LVIS_ACTIVATING, LVIS_FOCUSED | LVIS_SELECTED | LVIS_ACTIVATING);
|
|
list_.SetSelectionMark(i);
|
|
ind = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(ind == -1)
|
|
ind = list_.InsertItem(list_.GetItemCount(), val.c_str());
|
|
|
|
list_.SetItemState(ind, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
|
|
list_.SetSelectionMark(ind);
|
|
list_.EnsureVisible(ind, FALSE);
|
|
}
|
|
|
|
|
|
void CDlgRange::OnBnClickedOk()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
vals_.clear();
|
|
if (type_ == TYPE_LIST)
|
|
{
|
|
if (init_.empty())
|
|
{
|
|
MessageBox(TEXT("请确定默认值!双击列表中的某项进行选择。 "), TEXT("No Default"), MB_OK);
|
|
return;
|
|
}
|
|
if(list_.GetItemCount() == 0)
|
|
{
|
|
MessageBox(TEXT("没有输入有效的值列表"), TEXT("No Value"), MB_OK);
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < list_.GetItemCount(); ++i)
|
|
{
|
|
wchar_t buf[256] = { 0 };
|
|
list_.GetItemText(i, 0, buf, _countof(buf) - 1);
|
|
vals_.push_back(buf);
|
|
}
|
|
}
|
|
else if(type_ == TYPE_RANGE)
|
|
{
|
|
std::wstring val(get_item_text(IDC_EDIT_FROM));
|
|
|
|
if (val.empty())
|
|
{
|
|
MessageBox(TEXT("没有输入有效初始值"), TEXT("No Value"), MB_OK);
|
|
GotoDlgCtrl(GetDlgItem(IDC_EDIT_FROM));
|
|
return;
|
|
}
|
|
vals_.push_back(val);
|
|
|
|
val = get_item_text(IDC_EDIT_TO);
|
|
if (val.empty())
|
|
{
|
|
MessageBox(TEXT("没有输入有效终止值"), TEXT("No Value"), MB_OK);
|
|
GotoDlgCtrl(GetDlgItem(IDC_EDIT_TO));
|
|
return;
|
|
}
|
|
vals_.push_back(val);
|
|
|
|
val = get_item_text(IDC_EDIT_STEP);
|
|
if (val.empty())
|
|
{
|
|
MessageBox(TEXT("没有输入有效步长值"), TEXT("No Value"), MB_OK);
|
|
GotoDlgCtrl(GetDlgItem(IDC_EDIT_TO));
|
|
return;
|
|
}
|
|
vals_.push_back(val);
|
|
|
|
init_ = get_item_text(IDC_EDIT_INIT2);
|
|
if (init_.empty())
|
|
{
|
|
MessageBox(TEXT("没有输入有效默认值"), TEXT("No Value"), MB_OK);
|
|
GotoDlgCtrl(GetDlgItem(IDC_EDIT_INIT2));
|
|
return;
|
|
}
|
|
}
|
|
else if (type_ == TYPE_FIELDS)
|
|
{
|
|
std::wstring field(get_item_text(IDC_COMBO_FIELD));
|
|
|
|
vals_.clear();
|
|
vals_.push_back(field);
|
|
|
|
init_ = get_item_text(IDC_COMBO_VAL);
|
|
if (init_.empty())
|
|
{
|
|
MessageBox(TEXT("没有输入有效值"), TEXT("No Value"), MB_OK);
|
|
GotoDlgCtrl(GetDlgItem(IDC_COMBO_VAL));
|
|
return;
|
|
}
|
|
}
|
|
|
|
CDialogEx::OnOK();
|
|
}
|
|
|
|
|
|
void CDlgRange::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
*pResult = 0;
|
|
|
|
|
|
POINT pos = { 0 };
|
|
int item = -1;
|
|
|
|
GetCursorPos(&pos);
|
|
list_.ScreenToClient(&pos);
|
|
item = list_.HitTest(pos);
|
|
if (item != -1)
|
|
{
|
|
wchar_t buf[256] = { 0 };
|
|
int ret = 0;
|
|
|
|
list_.GetItemText(item, 0, buf, _countof(buf) - 1);
|
|
ret = ::MessageBoxW(m_hWnd, L"是否将该项设置为默认值?\r\nYes: 是\r\nNo: 删除该项\r\nCancel: 放弃操作", buf, MB_YESNOCANCEL);
|
|
if (ret == IDYES)
|
|
{
|
|
init_ = buf;
|
|
for (int i = 0; i < list_.GetItemCount(); ++i)
|
|
{
|
|
list_.SetItemText(i, 1, i == item ? L"yes" : L"");
|
|
}
|
|
}
|
|
else if (ret == IDNO)
|
|
{
|
|
list_.DeleteItem(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CDlgRange::OnCbnSelchangeComboField()
|
|
{
|
|
// TODO: 在此添加控件通知处理程序代码
|
|
std::wstring field(get_item_text(IDC_COMBO_FIELD));
|
|
|
|
init_val_api_(field.c_str(), &val_);
|
|
}
|