?? cfgcanview.cpp
字號:
// CfgCANView.cpp : implementation file
//
#include "stdafx.h"
#include "VCStyle.h"
#include "CfgCANView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "ModelDlg.h"
#include "data.h"
/////////////////////////////////////////////////////////////////////////////
// CCfgCANView
IMPLEMENT_DYNCREATE(CCfgCANView, CFormView)
CCfgCANView::CCfgCANView()
: CFormView(CCfgCANView::IDD)
{
//{{AFX_DATA_INIT(CCfgCANView)
m_baud = -1;
//}}AFX_DATA_INIT
}
CCfgCANView::~CCfgCANView()
{
}
void CCfgCANView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCfgCANView)
DDX_Control(pDX, IDC_BUTTON_SAVE, m_btnsave);
DDX_Control(pDX, IDC_BUTTON_MODIFY, m_btnmodify);
DDX_Control(pDX, IDC_BUTTON_DEL, m_btndel);
DDX_Control(pDX, IDC_BUTTON_ADD, m_btnadd);
DDX_Control(pDX, IDC_LIST_MODELS, m_MdList);
DDX_CBIndex(pDX, IDC_COMBO_BAUD, m_baud);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCfgCANView, CFormView)
//{{AFX_MSG_MAP(CCfgCANView)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnAddModel)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnModifyModel)
ON_BN_CLICKED(IDC_BUTTON_DEL, OnDelModel)
ON_BN_CLICKED(IDC_BUTTON_SAVE, OnSaveCfg)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCfgCANView diagnostics
#ifdef _DEBUG
void CCfgCANView::AssertValid() const
{
CFormView::AssertValid();
}
void CCfgCANView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CCfgCANDoc *CCfgCANView::GetDocument () // non-debug version is inline
{
ASSERT (m_pDocument->IsKindOf (RUNTIME_CLASS (CCfgCANDoc)));
return (CCfgCANDoc *) m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCfgCANView message handlers
void CCfgCANView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_bkbrush.CreateSolidBrush(RGB(240,250,245));
// TODO: Add your specialized code here and/or call the base class
//建立列表
m_MdList.InsertColumn(0,"名稱",LVCFMT_LEFT,100);
m_MdList.InsertColumn(1,"類型",LVCFMT_LEFT,100);
m_MdList.InsertColumn(2,"地址",LVCFMT_LEFT,50);
m_MdList.SetExtendedStyle(
m_MdList.GetExtendedStyle()|
LVS_EX_FULLROWSELECT|
LVS_EX_GRIDLINES);
m_MdList.SetBkColor(RGB(240,255,245));
// 添加數據到m_MdList
int nItem = 0;
for(int i=0;i<MAX_MODELS;i++){
//獲取數據
BYTE addr = i;
BYTE type = ModelTableBk[i].type;
char sname[MAX_MD_NAME];
strcpy(sname,ModelTableBk[i].name);
CString saddr;
saddr.Format("%d",addr);
CString stype;
switch(type){//判斷是否為有效模塊,如果是,則加入到列表中
case T_AD_7703:
m_MdList.InsertItem(nItem,sname);
m_MdList.SetItem(nItem,1,LVIF_TEXT,"T_AD_7703",0,0,0,0);
m_MdList.SetItem(nItem,2,LVIF_TEXT,saddr,0,0,0,0);
nItem++;
break;
case T_AD_7703_2:
m_MdList.InsertItem(nItem,sname);
m_MdList.SetItem(nItem,1,LVIF_TEXT,"T_AD_7703_2",0,0,0,0);
m_MdList.SetItem(nItem,2,LVIF_TEXT,saddr,0,0,0,0);
nItem++;
break;
case T_AD_7710:
m_MdList.InsertItem(nItem,sname);
m_MdList.SetItem(nItem,1,LVIF_TEXT,"T_AD_7710",0,0,0,0);
m_MdList.SetItem(nItem,2,LVIF_TEXT,saddr,0,0,0,0);
nItem++;
break;
case T_QD:
m_MdList.InsertItem(nItem,sname);
m_MdList.SetItem(nItem,1,LVIF_TEXT,"T_QD",0,0,0,0);
m_MdList.SetItem(nItem,2,LVIF_TEXT,saddr,0,0,0,0);
nItem++;
break;
default:
break;
}
}
//
switch(baud){
case 0xC3:
m_baud = 0;
break;
case 0xC9:
m_baud = 1;
break;
case 0xD3:
m_baud = 2;
break;
case 0xE7:
m_baud = 3;
break;
default:
break;
}
UpdateData(FALSE);
}
void CCfgCANView::OnAddModel()
{
CModelDlg dlg;
int nItem = m_MdList.GetItemCount();
UINT type;
UINT addr;
CString stype;
CString saddr;
CString sname;
if(dlg.DoModal() == IDOK){
type = dlg.GetSelType();
switch(type){
case T_NULL:
stype = "T_NULL";
break;
case T_AD_7703:
stype = "T_AD_7703";
break;
case T_AD_7703_2:
stype = "T_AD_7703_2";
break;
case T_AD_7710:
stype = "T_AD_7710";
break;
case T_QD:
stype = "T_QD";
break;
default:
stype = "未知類型";
break;
}
saddr.Format("%d",dlg.m_addr);
addr = dlg.m_addr;
sname = dlg.m_name;
//有效性檢查
if(addr>=MAX_MODELS || sname.GetLength()>=MAX_MD_NAME)
{
AfxMessageBox("模塊參數不正確!");
return;
}
//放到列表中
m_MdList.InsertItem(nItem,sname);
m_MdList.SetItem(nItem,1,LVIF_TEXT,stype,0,0,0,0);
m_MdList.SetItem(nItem,2,LVIF_TEXT,saddr,0,0,0,0);
//改變全局變量ModelTableBk
ModelTableBk[addr].type = type;
strcpy(ModelTableBk[addr].name,sname);
delete ModelTableBk[addr].detail;
ModelTableBk[addr].detail = NULL;
}
}
void CCfgCANView::OnModifyModel()
{
//get type and address currently selected.
POSITION pos = m_MdList.GetFirstSelectedItemPosition();
if (pos == NULL){
TRACE0("No items were selected!\n");
return;
}
int nItem = m_MdList.GetNextSelectedItem(pos);
CString sname = m_MdList.GetItemText(nItem,0);
CString stype = m_MdList.GetItemText(nItem,1);
CString saddr = m_MdList.GetItemText(nItem,2);
UINT type;
if(stype == "T_AD_7703")
type = T_AD_7703;
else if(stype == "T_AD_7703_2")
type = T_AD_7703_2;
else if(stype == "T_AD_7710")
type = T_AD_7710;
else if(stype == "T_QD")//"T_QD"
type = T_QD;
else
type = T_NULL;
UINT addr;
sscanf(saddr,"%d",&addr);
// CModelDlg dlg(type,addr);
CModelDlg dlg;
dlg.m_addr = addr;
dlg.SetSel(type);
dlg.m_name = sname;
if(dlg.DoModal() == IDCANCEL) return;
type = dlg.GetSelType();
switch(type){
case T_NULL:
stype = "T_NULL";
break;
case T_AD_7703:
stype = "T_AD_7703";
break;
case T_AD_7703_2:
stype = "T_AD_7703_2";
break;
case T_AD_7710:
stype = "T_AD_7710";
break;
case T_QD:
stype = "T_QD";
break;
default:
stype = "未知類型";
break;
}
saddr.Format("%d",dlg.m_addr);
addr = dlg.m_addr;
sname = dlg.m_name;
//有效性檢查
if(addr>=MAX_MODELS || sname.GetLength()>=MAX_MD_NAME)
{
AfxMessageBox("模塊參數不正確!");
return;
}
//修改列表
m_MdList.SetItem(nItem,0,LVIF_TEXT,sname,0,0,0,0);
m_MdList.SetItem(nItem,1,LVIF_TEXT,stype,0,0,0,0);
m_MdList.SetItem(nItem,2,LVIF_TEXT,saddr,0,0,0,0);
//改變全局變量ModelTableBk
ModelTableBk[addr].type = type;
strcpy(ModelTableBk[addr].name,sname);
delete ModelTableBk[addr].detail;
ModelTableBk[addr].detail = NULL;
}
void CCfgCANView::OnDelModel()
{
//get type and address currently selected.
POSITION pos = m_MdList.GetFirstSelectedItemPosition();
if (pos == NULL){
TRACE0("No items were selected!\n");
return;
}
int nItem = m_MdList.GetNextSelectedItem(pos);
//從ModelTableBk中刪除
CString saddr = m_MdList.GetItemText(nItem,2);
BYTE addr;
sscanf(saddr,"%d",&addr);
ModelTableBk[addr].type = T_NULL;
delete ModelTableBk[addr].detail;
ModelTableBk[addr].detail = NULL;
//從列表中刪除
m_MdList.DeleteItem(nItem);
}
void CCfgCANView::OnSaveCfg()
{
//confirm
if(AfxMessageBox("原先的配置文件將被覆蓋。真的要繼續嗎?",
MB_ICONQUESTION|MB_YESNO)
== IDNO)
return;
UpdateData();
switch(m_baud){
case 0:
baud = 0xc3;
break;
case 1:
baud = 0xc9;
break;
case 2:
baud = 0xd3;
break;
default:
baud = 0xe7;
break;
}
//write
write_cfg_file();
AfxMessageBox("配置被修改,需要重新運行程序。");
}
HBRUSH CCfgCANView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
return m_bkbrush;
// TODO: Return a different brush if the default is not desired
// return hbr;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -