📄 editdlg.cpp
字号:
// EditDlg.cpp : implementation file
//
#include "stdafx.h"
#include "test.h"
#include "editdlg.h"
#include "TestDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// EditDlg dialog
EditDlg::EditDlg(CWnd* pParent /*=NULL*/)
: CDialog(EditDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(EditDlg)
m_FMention = _T("");
m_Abbreviation = _T("");
m_TMention = _T("");
m_ExpertName = _T("");
m_RuleWffs = _T("");
m_FactValue = -1;
m_GetVersa = FALSE;
m_NeedAsk = FALSE;
m_mtCanUnknow = FALSE;
m_QMention = _T("");
m_IsMultiGoal = FALSE;
//}}AFX_DATA_INIT
m_RulePre = NULL;
m_ExpertGoal = NULL;
m_pParent = pParent;
}
void EditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(EditDlg)
DDX_Control(pDX, IDC_LIST_GOAL, m_ListGoal);
DDX_Control(pDX, IDC_COMBO_RULE_MT, m_RuleMt);
DDX_Control(pDX, IDC_LIST_RULE, m_ListRule);
DDX_Control(pDX, IDC_LIST_MT, m_ListMt);
DDX_Text(pDX, IDC_EDIT_F_MENTION, m_FMention);
DDX_Text(pDX, IDC_EDIT_ABBREVIATION, m_Abbreviation);
DDX_Text(pDX, IDC_EDIT_T_MENTION, m_TMention);
DDX_Text(pDX, IDC_EXPERT_NAME, m_ExpertName);
DDX_Text(pDX, IDC_EDIT_RULE_PRE, m_RuleWffs);
DDX_Radio(pDX, IDC_RADIO_T, m_FactValue);
DDX_Check(pDX, IDC_CHECK_GET_VERSA, m_GetVersa);
DDX_Check(pDX, IDC_CHECK_NEED_ASK, m_NeedAsk);
DDX_Check(pDX, IDC_CHECK_CAN_UNKNOW, m_mtCanUnknow);
DDX_Text(pDX, IDC_EDIT_Q_MENTION, m_QMention);
DDX_Check(pDX, IDC_CHECK_MULTI_GOAL, m_IsMultiGoal);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(EditDlg, CDialog)
//{{AFX_MSG_MAP(EditDlg)
ON_BN_CLICKED(ID_OK, OnDlgOk)
ON_BN_CLICKED(ID_CANCEL, OnDlgCancel)
ON_BN_CLICKED(IDC_BUTTON_DELETE_LAST_MT, OnButtonDeleteLastMt)
ON_BN_CLICKED(IDC_BUTTON_MT_ADD, OnButtonMtAdd)
ON_BN_CLICKED(IDC_BUTTON_MT_BACK, OnButtonMtBack)
ON_BN_CLICKED(IDC_BUTTON_RULE_ADD, OnButtonRuleAdd)
ON_BN_CLICKED(IDC_BUTTON_RULE_DELETE, OnButtonRuleDelete)
ON_BN_CLICKED(IDC_CHECK_GET_VERSA, OnCheckGetVersa)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_MT, OnDblclkListMt)
ON_BN_CLICKED(IDC_BUTTON_MT_OVERWRITE, OnButtonMtOverwrite)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_MT, OnItemchangedListMt)
ON_EN_CHANGE(IDC_EDIT_ABBREVIATION, OnChangeEditAbbreviation)
ON_EN_CHANGE(IDC_EDIT_F_MENTION, OnChangeEditFMention)
ON_EN_CHANGE(IDC_EDIT_T_MENTION, OnChangeEditTMention)
ON_CBN_DROPDOWN(IDC_COMBO_RULE_MT, OnDropdownComboRuleMt)
ON_BN_CLICKED(IDC_BUTTON_RULE_REFRESH, OnButtonRuleRefresh)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_RULE, OnItemchangedListRule)
ON_CBN_CLOSEUP(IDC_COMBO_RULE_MT, OnCloseupComboRuleMt)
ON_BN_CLICKED(IDC_BUTTON_GOAL_ADD, OnButtonGoalAdd)
ON_LBN_DBLCLK(IDC_LIST_GOAL, OnDblclkListGoal)
ON_BN_CLICKED(IDC_CHECK_NEED_ASK, OnCheckNeedAsk)
ON_BN_CLICKED(IDC_CHECK_CAN_UNKNOW, OnCheckCanUnknow)
ON_BN_CLICKED(IDC_BUTTON_MT_REFRESH, OnButtonMtRefresh)
ON_WM_VSCROLL()
ON_BN_CLICKED(IDC_CHECK_MULTI_GOAL, OnCheckMultiGoal)
ON_BN_CLICKED(IDC_SAVE_TO_FILE, OnSaveToFile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// EditDlg message handlers
BOOL EditDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CString title = " ";
GetWindowText(title);
title+=filename;
SetWindowText(title);
InitDlgData();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void EditDlg::OnCancel()
{
}
void EditDlg::OnOK()
{
}
void EditDlg::OnDlgOk()
{
UpdateData(true);
myExpert->SetESName(m_ExpertName);
//
myExpert->SetIsMultiGoal(m_IsMultiGoal);
myExpert->StoreToFile(filename);
DestroyWindow();
}
void EditDlg::OnDlgCancel()
{
DestroyWindow();
}
void EditDlg::InitDlgData()
{
//myExpert->LoadFromFile(filename);
m_ExpertName = myExpert->GetESName();
m_ExpertGoal = myExpert->GetExpertGoalObList();
m_SelectedMtId = 0;
m_SelectedRuleIndex = 0;
InitListMt();
InitListRule();
InitListGoal();
m_IsMultiGoal = myExpert->GetIsMultiGoal();
m_NeedAsk = 1;
m_mtCanUnknow = 1;
//?
UpdateData(false);
GetDlgItem(IDC_BUTTON_MT_ADD)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_MT_BACK)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_MT_OVERWRITE)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_RULE_ADD)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_RULE_DELETE)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_DELETE_LAST_MT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_GOAL_ADD)->EnableWindow(false);
GetDlgItem(IDC_SCROLLBAR_RULE_MOVE)->EnableWindow(false);
CheckRadioButton(IDC_RADIO_T,IDC_RADIO_U,IDC_RADIO_U);
}
void EditDlg::OnButtonMtAdd()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int value = GetCheckedRadioButton(IDC_RADIO_T,IDC_RADIO_U);
AiAssert T(m_TMention,m_FMention);
int id = myExpert->GetNumAssert() -1;
myExpert->SetAbbreviationMention(id,m_Abbreviation);
myExpert->SetAssertQuestionMention(id,m_QMention);
switch(value)
{
case IDC_RADIO_T:
myExpert->SetFactTrue(id);
break;
case IDC_RADIO_F:
myExpert->SetFactFalse(id);
break;
case IDC_RADIO_U:
break;
default:
ASSERT(0);
}
if (m_NeedAsk)
myExpert->SetMtNeedAsk(id);
else
myExpert->SetMtNeedNotAsk(id);
if (m_mtCanUnknow)
myExpert->SetMtCanUnknow(id);
else
myExpert->SetMtCannotUnknow(id);
AddListMtItem(id,id);
//reset
CheckRadioButton(IDC_RADIO_T,IDC_RADIO_U,IDC_RADIO_U);
m_Abbreviation = "";
m_TMention = "";
m_FMention = "";
m_QMention = "";
m_NeedAsk = true;
m_mtCanUnknow = true;
UpdateData(false);
GetDlgItem(IDC_BUTTON_MT_ADD)->EnableWindow(false);
}
void EditDlg::InitListMt()
{
CStringArray fields;
fields.SetSize(7,-1);
fields.SetAt(0,"编号");
fields.SetAt(1,"缩写");
fields.SetAt(2,"说明(T)");
fields.SetAt(3,"说明(F)");
fields.SetAt(4,"值");
fields.SetAt(5,"询问");
fields.SetAt(6,"¤");
LV_COLUMN icolum;
icolum.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
icolum.fmt=LVCFMT_LEFT;
icolum.iSubItem=0;
icolum.pszText=(LPSTR)LPCTSTR(fields[0]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+13;
m_ListMt.InsertColumn(0,&icolum);
icolum.iSubItem=1;
icolum.pszText=(LPSTR)LPCTSTR(fields[1]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+20;
m_ListMt.InsertColumn(1,&icolum);
icolum.iSubItem=2;
icolum.pszText=(LPSTR)LPCTSTR(fields[2]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+100;
m_ListMt.InsertColumn(2,&icolum);
icolum.iSubItem=3;
icolum.pszText=(LPSTR)LPCTSTR(fields[3]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+100;
m_ListMt.InsertColumn(3,&icolum);
icolum.iSubItem=4;
icolum.pszText=(LPSTR)LPCTSTR(fields[4]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+15;
m_ListMt.InsertColumn(4,&icolum);
icolum.iSubItem=5;
icolum.pszText=(LPSTR)LPCTSTR(fields[5]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+20;
m_ListMt.InsertColumn(5,&icolum);
icolum.iSubItem=6;
icolum.pszText=(LPSTR)LPCTSTR(fields[6]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+20;
m_ListMt.InsertColumn(6,&icolum);
//
LV_ITEM lv_Item;
lv_Item.mask=LVIF_TEXT;
int iNum=0;
for(iNum=0;iNum<myExpert->GetNumAssert();iNum++)
{
AddListMtItem(iNum,iNum);
}
}
void EditDlg::InitListRule()
{
CStringArray fields;
fields.SetSize(2,-1);
fields.SetAt(0,"序号");
fields.SetAt(1,"规则");
//fields.SetAt(2,"可信度");
LV_COLUMN icolum;
icolum.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
icolum.fmt=LVCFMT_LEFT;
icolum.iSubItem=0;
icolum.pszText=(LPSTR)LPCTSTR(fields[0]);
icolum.cx=m_ListMt.GetStringWidth(icolum.pszText)+14;
m_ListRule.InsertColumn(0,&icolum);
icolum.iSubItem=1;
icolum.pszText=(LPSTR)LPCTSTR(fields[1]);
icolum.cx=m_ListRule.GetStringWidth(icolum.pszText)+170;
m_ListRule.InsertColumn(1,&icolum);
LV_ITEM lv_Item;
lv_Item.mask=LVIF_TEXT;
int iNum=0;
CString str;
for(iNum=0;iNum<myExpert->GetNumRule();iNum++)
{
str = myExpert->GetRuleString(iNum);
AddListRuleItem(iNum,str);
}
}
void EditDlg::AddListMtItem(int pos,int id)
{
LV_ITEM lv_Item;
lv_Item.mask=LVIF_TEXT;
lv_Item.iItem=pos;
lv_Item.iSubItem=0;
char temp[4];
itoa(id,temp,10);
CString baseString = temp;
lv_Item.pszText=(LPSTR)LPCTSTR(baseString);
int index=m_ListMt.InsertItem(&lv_Item);
lv_Item.iItem=pos;
lv_Item.iSubItem=1;
CString firstString = myExpert->GetAbbreviationMention(id);
lv_Item.pszText=(LPSTR)LPCTSTR(firstString);
m_ListMt.SetItem(&lv_Item);
lv_Item.iItem=index;
lv_Item.iSubItem=2;
CString secondString = myExpert->GetAssertMention(id,NeedNotVersa);
lv_Item.pszText=(LPSTR)LPCTSTR(secondString);
m_ListMt.SetItem(&lv_Item);
lv_Item.iItem=index;
lv_Item.iSubItem=3;
CString thirdString = myExpert->GetAssertMention(id,NeedVersa);
lv_Item.pszText=(LPSTR)LPCTSTR(thirdString);
m_ListMt.SetItem(&lv_Item);
lv_Item.iItem=index;
lv_Item.iSubItem=4;
CString forthString;
int value = myExpert->GetIdFact(id);
if (value == FactTrue)
forthString = "√";
else if (value == FactFalse)
forthString = "×";
else {
ASSERT(value == FactUnknow);
forthString = "⊙";
}
lv_Item.pszText=(LPSTR)LPCTSTR(forthString);
m_ListMt.SetItem(&lv_Item);
lv_Item.iItem=index;
lv_Item.iSubItem=5;
CString fifthString;
value = myExpert->GetMtNeedNotAsk(id);
if (value)
fifthString = "⊙";
else
fifthString = " ";
lv_Item.pszText=(LPSTR)LPCTSTR(fifthString);
m_ListMt.SetItem(&lv_Item);
lv_Item.iItem=index;
lv_Item.iSubItem=6;
CString sixthString;
value = myExpert->GetMtCanUnknow(id);
if (value)
sixthString = " ";
else
sixthString = "¤";
lv_Item.pszText=(LPSTR)LPCTSTR(sixthString);
m_ListMt.SetItem(&lv_Item);
}
void EditDlg::OnButtonMtOverwrite()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int id = m_SelectedMtId;
myExpert->SetMention(id,m_TMention,m_FMention);
myExpert->SetAbbreviationMention(id,m_Abbreviation);
myExpert->SetAssertQuestionMention(id,m_QMention);
int value = GetCheckedRadioButton(IDC_RADIO_T,IDC_RADIO_U);
switch(value)
{
case IDC_RADIO_T:
myExpert->SetFactTrue(id);
break;
case IDC_RADIO_F:
myExpert->SetFactFalse(id);
break;
case IDC_RADIO_U:
myExpert->SetFactUnknow(id);
break;
default:
ASSERT(0);
}
if (m_NeedAsk)
myExpert->SetMtNeedAsk(id);
else
myExpert->SetMtNeedNotAsk(id);
if (m_mtCanUnknow)
myExpert->SetMtCanUnknow(id);
else
myExpert->SetMtCannotUnknow(id);
RewriteListMtItem(id,id);
GetDlgItem(IDC_BUTTON_MT_BACK)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_MT_OVERWRITE)->EnableWindow(false);
}
void EditDlg::OnItemchangedListMt(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_SelectedMtId = pNMListView->iItem;
GetDlgItem(IDC_BUTTON_MT_BACK)->EnableWindow(true);
*pResult = 0;
}
void EditDlg::OnButtonMtBack()
{
// TODO: Add your control notification handler code here
int id = m_SelectedMtId;
m_Abbreviation = myExpert->GetAbbreviationMention(id);
m_TMention = myExpert->GetAssertMention(id,NeedNotVersa);
m_FMention = myExpert->GetAssertMention(id,NeedVersa);
m_QMention = myExpert->GetAssertQuestionMention(id);
int value = myExpert->GetIdFact(id);
if (myExpert->GetMtNeedNotAsk(id))
m_NeedAsk = 0;
else
m_NeedAsk = 1;
if (myExpert->GetMtCanUnknow(id))
m_mtCanUnknow = 1;
else
m_mtCanUnknow = 0;
UpdateData(false);
switch(value)
{
case FactTrue:
CheckRadioButton(IDC_RADIO_T,IDC_RADIO_U,IDC_RADIO_T);
break;
case FactFalse:
CheckRadioButton(IDC_RADIO_T,IDC_RADIO_U,IDC_RADIO_F);
break;
case FactUnknow:
CheckRadioButton(IDC_RADIO_T,IDC_RADIO_U,IDC_RADIO_U);
break;
default:
ASSERT(0);
}
GetDlgItem(IDC_BUTTON_MT_BACK)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_MT_OVERWRITE)->EnableWindow(true);
}
void EditDlg::CheckButtonMtAddReady()
{
UpdateData(true);
if (!m_Abbreviation.IsEmpty()
&& !m_TMention.IsEmpty()
&& !m_FMention.IsEmpty()
&& !m_QMention.IsEmpty()
)
GetDlgItem(IDC_BUTTON_MT_ADD)->EnableWindow(true);
else
GetDlgItem(IDC_BUTTON_MT_ADD)->EnableWindow(false);
}
void EditDlg::OnChangeEditAbbreviation()
{
CheckButtonMtAddReady();
}
void EditDlg::OnChangeEditFMention()
{
CheckButtonMtAddReady();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -