📄 testjdlg.cpp
字号:
// TestJDlg.cpp : implementation file
//
#include "stdafx.h"
#include "test.h"
#include "TestJDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// TestJDlg dialog
TestJDlg::TestJDlg(CWnd* pParent /*=NULL*/)
: CDialog(TestJDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(TestJDlg)
m_question = _T("");
m_conclusion = _T("");
//}}AFX_DATA_INIT
m_existConclusion = 0;
}
void TestJDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(TestJDlg)
DDX_Control(pDX, IDC_TREE, m_tree);
DDX_Text(pDX, IDC_QUESTION, m_question);
DDX_Text(pDX, IDC_CONCLUSION, m_conclusion);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(TestJDlg, CDialog)
//{{AFX_MSG_MAP(TestJDlg)
ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext)
ON_BN_CLICKED(IDC_BUTTON_END, OnButtonEnd)
ON_BN_CLICKED(IDC_BUTTON_BEGIN, OnButtonBegin)
ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)
ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// TestJDlg message handlers
BOOL TestJDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
if (m_existConclusion){
GetDlgItem(IDC_TREE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_QUESTION)->ShowWindow(SW_HIDE);
}
else{
GetDlgItem(IDC_TREE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_QUESTION)->ShowWindow(SW_SHOW);
}
GetDlgItem(IDC_BUTTON_BEGIN)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(false);
GetDlgItem(IDC_RADIO_YES)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNKNOW)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_NO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONCLUSION)->ShowWindow(SW_HIDE);
//
CString abb = myExpert.GetAbbreviationMention(0);
if (abb == "HAVE")
m_question = "判断集料碱活性,请选择开始搜索";
else if (abb == "Q0")
m_question = "工程破坏原因诊断,请选择开始搜索";
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void TestJDlg::OnButtonBegin()
{
if (myExpert.LoadFromFile(filename) == false)
return ;
GetDlgItem(IDC_TREE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_QUESTION)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_CONCLUSION)->ShowWindow(SW_HIDE);
myExpert.InitForSearch();
int s;
myExpert.SearchSingle();
s = myExpert.CheckResultState();
if (s == ResultSingleCertitude
|| s == ResultMultiAllOk){
m_existConclusion = true;
MessageBeep(-1);
ShowAnswerTree();
return;
}
//
s = myExpert.SearchBackward();
if (s == ResultSingleCertitude
|| s == ResultMultiAllOk){
m_existConclusion = true;
MessageBeep(-1);
ShowAnswerTree();
return;
}
if (!myExpert.GetIsMultiGoal() &&
myExpert.CheckResultStateIsAnyoneTrue()){
m_existConclusion = true;
MessageBeep(-1);
ShowAnswerTree();
return;
}
AiMt unknowMt;
myExpert.SearchBackwardWithAsk(unknowMt);
SetNextQuestion(unknowMt.GetId());
GetDlgItem(IDC_BUTTON_BEGIN)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(true);
}
void TestJDlg::OnButtonNext()
{
// TODO: Add your control notification handler code here
int w = GetCheckedRadioButton(IDC_RADIO_YES,IDC_RADIO_NO);
switch(w)
{
case IDC_RADIO_YES:
myExpert.SetAskFactTrue(m_presentMtId);
break;
case IDC_RADIO_UNKNOW:
break;
case IDC_RADIO_NO:
myExpert.SetAskFactFalse(m_presentMtId);
break;
}
myExpert.SearchSingle();//进行及时的推理
if (!myExpert.GetIsMultiGoal() &&
myExpert.CheckResultStateIsAnyoneTrue()){
m_existConclusion = true;
MessageBeep(-1);
ShowAnswerTree();
return;
}
//myExpert.SearchBackward();
AiMt unknowMt;
if (myExpert.SearchBackwardWithAsk(unknowMt)){
SetNextQuestion(unknowMt.GetId());
return;
}
else{
int s = myExpert.SearchBackward();
if (s == ResultSingleIncertitude
|| s == ResultMultiAllNotOk){
m_question = "无法推出目标结论";
UpdateData(FALSE);
GetDlgItem(IDC_BUTTON_BEGIN)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(false);
GetDlgItem(IDC_RADIO_YES)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNKNOW)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_NO)->ShowWindow(SW_HIDE);
return;
}
m_existConclusion = true;
MessageBeep(-1);
ShowAnswerTree();
}
}
void TestJDlg::OnButtonEnd()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BUTTON_BEGIN)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(false);
GetDlgItem(IDC_RADIO_YES)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNKNOW)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_NO)->ShowWindow(SW_HIDE);
int s = myExpert.SearchBackward();
if (s == ResultSingleIncertitude
|| s == ResultMultiAllNotOk){
m_question = "无法推出目标结论";
UpdateData(FALSE);
return;
}
m_existConclusion = true;
MessageBeep(-1);
ShowAnswerTree();
return;
}
int TestJDlg::SetNextQuestion(int id)
{
m_presentMtId = id;
m_question = myExpert.GetAssertQuestionMention(id);
UpdateData(false);
GetDlgItem(IDC_RADIO_YES)->ShowWindow(SW_SHOW);
if (myExpert.GetMtCanUnknow(id))
GetDlgItem(IDC_RADIO_UNKNOW)->ShowWindow(SW_SHOW);
else
GetDlgItem(IDC_RADIO_UNKNOW)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_NO)->ShowWindow(SW_SHOW);
CheckRadioButton(IDC_RADIO_YES,IDC_RADIO_NO,IDC_RADIO_YES);
return true;
}
int TestJDlg::ShowAnswerTree()
{
GetDlgItem(IDC_TREE)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_QUESTION)->ShowWindow(SW_HIDE);
CImageList *pImageList;
pImageList=new CImageList();
pImageList->Create(15, 15, TRUE, 6, 4);
CBitmap bitmap;
for(int nID=IDB_BITMAP1;nID<=IDB_BITMAP6;nID++)
{
bitmap.LoadBitmap(nID);
pImageList->Add(&bitmap,(COLORREF)0xFFFFFF);
bitmap.DeleteObject();
}
m_tree.SetImageList(pImageList,TVSIL_NORMAL);
myExpert.SetAnswerTreeCtrl(&m_tree);
myExpert.ShowTreeCtrlAnswer();
//
GetDlgItem(IDC_BUTTON_BEGIN)->EnableWindow(true);
GetDlgItem(IDC_BUTTON_NEXT)->EnableWindow(false);
GetDlgItem(IDC_BUTTON_END)->EnableWindow(false);
GetDlgItem(IDC_RADIO_YES)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_UNKNOW)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_RADIO_NO)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_CONCLUSION)->ShowWindow(SW_SHOW);
m_conclusion = "";
CString abb = myExpert.GetAbbreviationMention(0);
if (abb == "HAVE")
{
if (myExpert.CheckAssertTorF(1))
m_conclusion = "集料具有ASR碱活性,需进行AAR抑制";
else if (myExpert.CheckAssertTorF(2))
m_conclusion = "集料具有ACR碱活性,需进行AAR抑制";
else if (myExpert.CheckAssertTorF(3))
m_conclusion = "集料具有ASR和ACR碱活性,需进行AAR抑制";
else if (!myExpert.CheckAssertTorF(0))
m_conclusion = "集料不具有碱活性,可直接用于混凝土工程";
else if (myExpert.CheckAssertTorF(0))
m_conclusion = "集料具有碱活性,需进行AAR抑制";
}
else if (abb == "Q0")
{
if (myExpert.CheckAssertTorF(0))
m_conclusion = "不是遭受ASR或ACR破坏,请研究其它问题";
else if (myExpert.CheckAssertTorF(1))
m_conclusion = "混凝土遭受ASR破坏";
else if (myExpert.CheckAssertTorF(2))
m_conclusion = "混凝土遭受ACR破坏";
}
UpdateData(false);
return true;
}
void TestJDlg::OnButtonOk()
{
CDialog::OnOK();
}
void TestJDlg::OnButtonCancel()
{
CDialog::OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -