123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605 |
- / / GlobalValue.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "VisionPlus.h"
- #include "GlobalValue.h"
- #include "afxdialogex.h"
- #include "GlobalSetting.h"
- // CGlobalValue 对话框
- IMPLEMENT_DYNAMIC(CGlobalValue, CBCGPDialog)
- CGlobalValue::CGlobalValue(CWnd* pParent /*=NULL*/)
- : CBCGPDialog(IDD_GLOBALVALUE, pParent)
- {
- EnableVisualManagerStyle(TRUE, TRUE);
- m_nRow = 0;
- m_nCol = 0;
- m_pDllPtr = NULL;
- }
- CGlobalValue::~CGlobalValue()
- {
- if (m_pDllPtr)
- {
- delete m_pDllPtr;
- m_pDllPtr = NULL;
- }
- }
- void CGlobalValue::DoDataExchange(CDataExchange* pDX)
- {
- CBCGPDialog::DoDataExchange(pDX);
- DDX_Control(pDX, IDC_GLOBLE_VAR, m_wndGlobleVar);
- DDX_Control(pDX, IDC_GV_ANNOTATION, m_wndEdit);
- }
- BEGIN_MESSAGE_MAP(CGlobalValue, CBCGPDialog)
- ON_BN_CLICKED(IDC_GV_ADD_INT, &CGlobalValue::OnBnClickedGvAddInt)
- ON_BN_CLICKED(IDC_GV_ADD_STR, &CGlobalValue::OnBnClickedGvAddStr)
- ON_BN_CLICKED(IDC_GV_ADD_BOOL, &CGlobalValue::OnBnClickedGvAddBool)
- ON_BN_CLICKED(IDC_GV_DELETE, &CGlobalValue::OnBnClickedGvDelete)
- ON_EN_KILLFOCUS(IDC_GV_ANNOTATION, &CGlobalValue::OnEnKillfocusGvAnnotation)
- ON_WM_SHOWWINDOW()
- ON_BN_CLICKED(IDC_GV_ADD_FLOAT, &CGlobalValue::OnBnClickedGvAddFloat)
- ON_NOTIFY(NM_DBLCLK, IDC_GLOBLE_VAR, &CGlobalValue::OnNMDblclkGlobleVar)
- END_MESSAGE_MAP()
- // CGlobalValue 消息处理程序
- // 清空所有控件
- void CGlobalValue::Clear()
- {
- m_GV_Tools.Interfaces.clear();
- m_wndGlobleVar.DeleteAllItems();
- for (int i = 0; i < 999; i++)
- {
- m_bool_VarLink[i] = false;
- m_int_VarLink[i] = 0;
- m_string_VarLink[i].Empty();
- }
- }
- BOOL CGlobalValue::OnInitDialog()
- {
- CBCGPDialog::OnInitDialog();
- // TODO: 在此添加额外的初始化
- m_wndGlobleVar.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
- m_wndGlobleVar.DeleteAllItems();
- // 添加控件内容
- m_wndGlobleVar.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 50);
- m_wndGlobleVar.InsertColumn(1, _T("变量类型"), LVCFMT_LEFT, 70);
- m_wndGlobleVar.InsertColumn(2, _T("变量名称"), LVCFMT_LEFT, 150);
- m_wndGlobleVar.InsertColumn(3, _T("变量数值"), LVCFMT_LEFT, 150);
- m_wndGlobleVar.InsertColumn(4, _T("变量注释"), LVCFMT_LEFT, 150);
- for (int i = 0; i < 999; i++)
- {
- m_bool_VarLink[i] = false;
- m_int_VarLink[i] = 0;
- m_string_VarLink[i].Empty();
- }
- //////////////////////////////////////////////////////////////////////////
- m_pDllPtr = new CDllTool();
- m_GV_Tools.strName = _T("GlobalValue");
- m_GV_Tools.strShowName = _T("GlobalValue");
- m_GV_Tools.strDll = _T("GlobalValue");
- m_GV_Tools.nUseCount = 1;
- m_GV_Tools.nToolID = TASK_SYSTEM_GV;
- m_GV_Tools.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- m_GV_Tools.pDllPtr = m_pDllPtr;
- return TRUE; // return TRUE unless you set the focus to a control
- // 异常: OCX 属性页应返回 FALSE
- }
- // 执行序列化
- BOOL CGlobalValue::DoSerialize(CArchive& ar)
- {
- // 序列化
- if (ar.IsStoring())
- {
- return DoSerializeOut(ar);
- }
- else
- {
- if (g_nDocVersion > 102)
- {
- theApp.UpdateSplash(_T("CGlobalValue::DoSerialize()"));
- return DoSerializeIn(ar);
- }
- return TRUE;
- }
- return TRUE;
- }
- ///////////////////////////////////////////////////
- // 保存控件信息到文件中
- BOOL CGlobalValue::DoSerializeOut(CArchive& ar)
- {
- // 写入总数量
- int nParanum = 2;
- ar << nParanum;
- //具体参数
- ar << (int)1 << (UINT)m_GV_Tools.Interfaces.size();
- ar << (int)2 << (UINT)m_GV_Tools.Interfaces.size();
- nParanum = 7;//以下参数的数量
- ar << nParanum;//先保存参数数量
- ar << (UINT)m_GV_Tools.Interfaces.size();
- for (UINT i = 0; i < m_GV_Tools.Interfaces.size(); i++)
- {
- TOOL_INTERFACE inf = m_GV_Tools.Interfaces[i];
- ar << (int)1 << inf.nIndex;
- ar << (int)2 << inf.InfDirection;
- ar << (int)3 << inf.strName;
- ar << (int)4 << (int)inf.VarType;
- ar << (int)5 << inf.strInfo;
- ar << (int)6 << inf.strParentName;
- ar << (int)7 << inf.strParentName;
- }
- for (int i = 0; i < 999; i++)
- {
- ar << m_int_VarLink[i];
- }
- for (int i = 0; i < 999; i++)
- {
- ar << m_flot_VarLink[i];
- }
- for (int i = 0; i < 999; i++)
- {
- ar << m_string_VarLink[i];
- }
- for (int i = 0; i < 999; i++)
- {
- ar << m_bool_VarLink[i];
- }
- return TRUE;
- }
- ///////////////////////////////////////////////////
- // 从文件中加载控件信息
- BOOL CGlobalValue::DoSerializeIn(CArchive& ar)
- {
- // 参数数量
- int nParanum = 0;
- int nSize = 0;
- int nPpara = 0;
- ar >> nParanum;//读取参数数量
- for (int i = 0; i < nParanum; i++)
- {
- ar >> nPpara;
- switch (nPpara)
- {
- case 1: ar >> (UINT&)nSize; break;
- case 2: ar >> (UINT&)nSize; break;
- default:
- CString strMsg;
- strMsg.Format(_T("加载失败! 配置文档错误! "));
- USES_CONVERSION;
- char * s_str = T2A(strMsg);
- g_Logger.Error(0, __FILE__, __LINE__, s_str);
- return FALSE;
- }
- }
- ar >> nParanum;//读取参数数量
- ar >> nSize;
- if (g_nDocVersion > 105)
- {
- for (int i = 0; i < nSize; i++)
- {
- TOOL_INTERFACE inf;
- for (int j = 0; j < nParanum; j++)
- {
- ar >> nPpara;
- switch (nPpara)
- {
- case 1: ar >> inf.nIndex; break;//
- case 2: ar >> (int&)inf.InfDirection; break;//
- case 3: ar >> inf.strName; break;//
- case 4: ar >> (int&)inf.VarType; break;//
- case 5: ar >> inf.strInfo; break;//
- case 6: ar >> inf.strParentName; break;//
- case 7: ar >> inf.strParentName; break;//
- default:
- CString strMsg;
- strMsg.Format(_T("加载失败! 配置文档错误! "));
- USES_CONVERSION;
- char * s_str = T2A(strMsg);
- g_Logger.Error(0, __FILE__, __LINE__, s_str);
- return FALSE; break;
- }
- }
- if (inf.VarType == VAR_TYPE::Bool_Var)
- {
- inf.pValue = (LPVOID*)&m_bool_VarLink[m_GV_Tools.Interfaces.size()];
- }
- else if (inf.VarType == VAR_TYPE::Int_Var)
- {
- inf.pValue = (LPVOID*)&m_int_VarLink[m_GV_Tools.Interfaces.size()];
- }
- else if (inf.VarType == VAR_TYPE::CString_Var)
- {
- inf.pValue = (LPVOID*)&m_string_VarLink[m_GV_Tools.Interfaces.size()];
- }
- else if (inf.VarType == VAR_TYPE::float_Var)
- {
- inf.pValue = (LPVOID*)&m_flot_VarLink[m_GV_Tools.Interfaces.size()];
- }
- else
- {
- CString strMsg;
- strMsg.Format(_T("%s 数据类型暂时不支持"), inf.VarType);
- USES_CONVERSION;
- char * s_str = T2A(strMsg);
- g_Logger.Error(0, __FILE__, __LINE__, s_str);
- return FALSE;
- }
- m_GV_Tools.Interfaces.push_back(inf);
- }
- }
- if (g_nDocVersion > 107)
- {
- for (int i = 0; i < 999; i++)
- {
- ar >> m_int_VarLink[i];
- }
- for (int i = 0; i < 999; i++)
- {
- ar >> m_flot_VarLink[i];
- }
- for (int i = 0; i < 999; i++)
- {
- ar >> m_string_VarLink[i];
- }
- for (int i = 0; i < 999; i++)
- {
- ar >> m_bool_VarLink[i];
- }
- }
- UpdateUI();
- return TRUE;
- }
- void CGlobalValue::OnBnClickedGvAddInt()
- {
- // TODO: 在此添加控件通知处理程序代码
- TOOL_INTERFACE inf;
- CString strName;
- strName.Format(_T("GlobleVar[%d].int"), m_GV_Tools.Interfaces.size());
- inf.strParentName = SYSTEM_ROOT;
- inf.nIndex = (int)m_GV_Tools.Interfaces.size() + 1;
- inf.InfDirection = INF_OUT;
- inf.InfType = INF_TYPE::INF_VALUE_1;
- inf.strName = strName;
- inf.VarType = VAR_TYPE::Int_Var;
- inf.strInfo = _T("添加了一个 int 型变量");
- inf.pValue = (LPVOID*)&m_int_VarLink[m_GV_Tools.Interfaces.size()];
- m_GV_Tools.Interfaces.push_back(inf);
- UpdateUI();
- }
- void CGlobalValue::OnBnClickedGvAddStr()
- {
- // TODO: 在此添加控件通知处理程序代码
- TOOL_INTERFACE inf;
- CString strName;
- strName.Format(_T("GlobleVar[%d].CString"), m_GV_Tools.Interfaces.size());
- inf.strParentName = SYSTEM_ROOT;
- inf.nIndex = (int)m_GV_Tools.Interfaces.size() + 1;
- inf.InfDirection = INF_OUT;
- inf.InfType = INF_TYPE::INF_VALUE_1;
- inf.strName = strName;
- inf.VarType = VAR_TYPE::CString_Var;
- inf.strInfo = _T("添加了一个 string 型变量");
- inf.pValue = (LPVOID*)&m_string_VarLink[m_GV_Tools.Interfaces.size()];
- m_GV_Tools.Interfaces.push_back(inf);
- UpdateUI();
- }
- void CGlobalValue::OnBnClickedGvAddBool()
- {
- // TODO: 在此添加控件通知处理程序代码
- TOOL_INTERFACE inf;
- CString strName;
- strName.Format(_T("GlobleVar[%d].bool"), m_GV_Tools.Interfaces.size());
- inf.strParentName = SYSTEM_ROOT;
- inf.nIndex = (int)m_GV_Tools.Interfaces.size() + 1;
- inf.InfDirection = INF_OUT;
- inf.InfType = INF_TYPE::INF_VALUE_1;
- inf.strName = strName;
- inf.VarType = VAR_TYPE::Bool_Var;
- inf.strInfo = _T("添加了一个 bool 型变量");
- inf.pValue = (LPVOID*)&m_bool_VarLink[m_GV_Tools.Interfaces.size()];
- m_GV_Tools.Interfaces.push_back(inf);
- UpdateUI();
- }
- void CGlobalValue::OnBnClickedGvAddFloat()
- {
- // TODO: 在此添加控件通知处理程序代码
- TOOL_INTERFACE inf;
- CString strName;
- strName.Format(_T("GlobleVar[%d].float"), m_GV_Tools.Interfaces.size());
- inf.strParentName = SYSTEM_ROOT;
- inf.nIndex = (int)m_GV_Tools.Interfaces.size() + 1;
- inf.InfDirection = INF_OUT;
- inf.InfType = INF_TYPE::INF_VALUE_1;
- inf.strName = strName;
- inf.VarType = VAR_TYPE::float_Var;
- inf.strInfo = _T("添加了一个 float 型变量");
- inf.pValue = (LPVOID*)&m_flot_VarLink[m_GV_Tools.Interfaces.size()];
- m_GV_Tools.Interfaces.push_back(inf);
- UpdateUI();
- }
- void CGlobalValue::OnBnClickedGvDelete()
- {
- // TODO: 在此添加控件通知处理程序代码
- // if (m_GV_Tools.Interfaces.size()>0)
- // {
- // m_GV_Tools.Interfaces.pop_back();
- // UpdateUI();
- // }
- }
- void CGlobalValue::UpdateUI()
- {
- m_GV_Tools.pDllPtr->InterfaceClear();
- m_wndGlobleVar.DeleteAllItems();
- CString strNoble;
- // 遍历所有类别
- for (unsigned int i = 0; i < m_GV_Tools.Interfaces.size(); i++)
- {
- TOOL_INTERFACE inf = m_GV_Tools.Interfaces[i];
- strNoble.Format(_T("%d"), i + 1);
- m_wndGlobleVar.InsertItem(i, strNoble);// 序号
- CString strVar;
- if (inf.VarType == VAR_TYPE::Bool_Var)
- {
- m_bool_VarLink[i] ? strVar.Format(_T("TRUE")) : strVar.Format(_T("FALSE"));
- }
- else if (inf.VarType == VAR_TYPE::Int_Var)
- {
- strVar.Format(_T("%d"), m_int_VarLink[i]);
- }
- else if (inf.VarType == VAR_TYPE::CString_Var)
- {
- strVar.Format(_T("%s"), m_string_VarLink[i]);
- }
- else if (inf.VarType == VAR_TYPE::float_Var)
- {
- strVar.Format(_T("%.5f"), m_flot_VarLink[i]);
- }
- CString str;
- str.Format(_T("%s"), g_VatTypeMap.GetVarTypeName(inf.VarType));
- m_wndGlobleVar.SetItemText(i, 1, str);//类型 需要修改为显示数据类型
- m_wndGlobleVar.SetItemText(i, 2, inf.strName);//变量名称
- m_wndGlobleVar.SetItemText(i, 3, strVar);//变量数据
- m_wndGlobleVar.SetItemText(i, 4, inf.strInfo);//变量注释
- DLL_INF Dllinf;
- Dllinf.strName = inf.strName;
- Dllinf.InfDirection = INF_DIRECTION::INF_INOUT;
- Dllinf.InfWay = inf.InfWay;
- Dllinf.pValue = inf.pValue;
- m_GV_Tools.pDllPtr->AddInterface(Dllinf);
- }
- }
- void CGlobalValue::OnOK()
- {
- // TODO: 在此添加专用代码和/或调用基类
- //CBCGPDialog::OnOK();
- }
- void CGlobalValue::OnShowWindow(BOOL bShow, UINT nStatus)
- {
- CBCGPDialog::OnShowWindow(bShow, nStatus);
- // TODO: 在此处添加消息处理程序代码
- if (bShow)
- {
- UpdateUI();
- }
- }
- ///////////////////////////////////////////////////////////////
- // 根据Interface获取Interface
- TOOL_INTERFACE* CGlobalValue::GetInterfaceByInterface(TOOL_INTERFACE& inf)
- {
- for (unsigned int n = 0; n < m_GV_Tools.Interfaces.size(); n++)
- {
- TOOL_INTERFACE& infSearch = m_GV_Tools.Interfaces[n];
- if (IsSameInterface(inf, infSearch))
- {
- return &infSearch;
- }
- }
- return NULL;
- }
- ////////////////////////////////////////////////////////////////////
- // 判断是否是同一个接口
- bool CGlobalValue::IsSameInterface(const TOOL_INTERFACE& source, const TOOL_INTERFACE& dest)
- {
- return source.strParentName == dest.strParentName
- && source.strName == dest.strName
- && source.InfDirection == dest.InfDirection
- && source.InfWay == dest.InfWay;
- }
- void CGlobalValue::OnNMDblclkGlobleVar(NMHDR *pNMHDR, LRESULT *pResult)
- {
- LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
- // TODO: 在此添加控件通知处理程序代码
- *pResult = 0;
- CString strTemp;
- NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
- m_nRow = pNMListView->iItem;
- m_nCol = pNMListView->iSubItem;
- DWORD dwPos = GetMessagePos();
- CPoint point(LOWORD(dwPos), HIWORD(dwPos));
- m_wndGlobleVar.ScreenToClient(&point);
- LVHITTESTINFO lvinfo;
- lvinfo.pt = point;
- lvinfo.flags = LVHT_ABOVE;
- int nItem = m_wndGlobleVar.SubItemHitTest(&lvinfo);
- if (m_nCol == 4 || m_nCol == 3)
- {
- CRect rect;
- m_wndGlobleVar.GetSubItemRect(m_nRow, m_nCol, LVIR_LABEL, rect);
- m_wndEdit.SetParent(&m_wndGlobleVar);
- m_wndEdit.MoveWindow(rect);
- m_wndEdit.SetWindowText(m_wndGlobleVar.GetItemText(m_nRow, m_nCol));
- m_wndEdit.ShowWindow(SW_SHOW);
- m_wndEdit.SetFocus();
- m_wndEdit.ShowCaret();
- m_wndEdit.SetSel(-1);
- }
- UpdateUI();
- }
- void CGlobalValue::OnEnKillfocusGvAnnotation()
- {
- // TODO: 在此添加控件通知处理程序代码
- CString str;
- m_wndEdit.GetWindowText(str);
- m_wndGlobleVar.SetItemText(m_nRow, m_nCol, str);
- m_wndEdit.ShowWindow(SW_HIDE);
- if (str.IsEmpty())
- {
- return;
- }
- if (m_GV_Tools.Interfaces.size() > m_nRow)
- {
- TOOL_INTERFACE inf = m_GV_Tools.Interfaces[m_nRow];
- if (m_nCol == 4)
- {
- m_wndGlobleVar.SetItemText(m_nRow, 4, str); //设置编辑框的新内容
- TOOL_INTERFACE& inf = m_GV_Tools.Interfaces[m_nRow];
- inf.strInfo = str;
-
- }
- else
- {
- m_wndGlobleVar.SetItemText(m_nRow, 3, str); //设置编辑框的新内容
- TOOL_INTERFACE& inf = m_GV_Tools.Interfaces[m_nRow];
- //inf.strInfo = tem;
- if (inf.VarType == VAR_TYPE::Bool_Var)
- {
- int b = _wtoi(str);
- b == (int)1 ? m_bool_VarLink[m_nRow] = true : m_bool_VarLink[m_nRow] = false;
- m_GV_Tools.Interfaces[m_nRow].pValue = (LPVOID*)&m_bool_VarLink[m_nRow];
- }
- else if (inf.VarType == VAR_TYPE::Int_Var)
- {
- int b = _wtoi(str);
- m_int_VarLink[m_nRow] = b;
- m_GV_Tools.Interfaces[m_nRow].pValue = (LPVOID*)&m_int_VarLink[m_nRow];
- }
- else if (inf.VarType == VAR_TYPE::CString_Var)
- {
- m_string_VarLink[m_nRow] = str;
- m_GV_Tools.Interfaces[m_nRow].pValue = (LPVOID*)&m_string_VarLink[m_nRow];
- }
- else if (inf.VarType == VAR_TYPE::float_Var)
- {
- double b = _wtof(str);
- m_flot_VarLink[m_nRow] = (float)b;
- m_GV_Tools.Interfaces[m_nRow].pValue = (LPVOID*)&m_flot_VarLink[m_nRow];
- }
-
- }
- UpdateUI();
- }
- }
|