BCG使用经验总结_软件使用经验总结
BCG使用经验总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“软件使用经验总结”。
BCG使用的经验总结
一、怎样生成一个BCG的树形列表
首先,在需要生成BCG树形列表的界面所在的“.H”文件中加入下面这句话:CBCGPGridCtrl * m_zbxn;
其次,在对应的“.CPP”文件中加入下面的这句话:
将m_zbxn = NULL;这是初始化,必须的,防止野指针的出现。
二、将界面嵌入到当前的DLG窗口的方法
三、需要加入“行选择变化消息响应函数”
在对应的“.H”文件中加入下列标黑的代码
在对应的“.CPP”代码中加入下列标黑的代码
其中的BLJD_ZBXN,为create语句中的最后一个参数,必须保持一致,同时要在H或CPP文件中用#define BLJD_ZBXN 1002,定义一下这个宏,这才能保证嵌入的正确性。
/************************************************************************/ /* 菜单调用函数
*/ /************************************************************************/ UINT CPlugBLJD::GetMenu(CMenu * menu, UINT ChildID, char * MenuName){ HMODULE hDLL=GetModuleHandle(_T(PLUG_BLJD_NAME));HINSTANCE hexe=AfxGetResourceHandle();AfxSetResourceHandle((HINSTANCE)hDLL);
UINT uResID = ChildID;menu->LoadMenu(IDR_BLJD);int iMenuCnt = menu->GetMenuItemCount();for(int i=0;i
char str[255]={0};
UINT id = 0;
id = menu->GetMenuItemID(i);
//-
//如果id=0,就判断为分割线
//-
if(id!= 0)
{
if(id>1000000)
{
CMenu * pSubMenu = menu->GetSubMenu(i);
int iSubMenuCnt = pSubMenu->GetMenuItemCount();
for(int n=0;n
{
id = pSubMenu->GetMenuItemID(n);
if(id!=0)
{
pSubMenu->GetMenuString(id, str, 255, MF_BYCOMMAND);
m_uRes = ChildID;
pSubMenu->ModifyMenu(id, MF_BYCOMMAND, uResID, str);
uResID++;
}
}
}
else
{
menu->GetMenuString(id, str, 255, MF_BYCOMMAND);
m_uRes = ChildID;
menu->ModifyMenu(id, MF_BYCOMMAND, uResID, str);
uResID++;
}
} } memcpy(MenuName, “兵力机动(&D)”, 12);AfxSetResourceHandle(hexe);return uResID;} 附录:
需要注意的事情:在COPY代码的时候,一定要注意,最好将原来的代码重新动手打一下。
/************************************************************************/ /* 取下一个装备内码(当期最大的加一)
/************************************************************************/ BOOL CZbxn::GetNextFACode(CString& maxCode){ CADORecordset adoRecordSet(CBLJDProject::m_adoConn);
CString strSQL;COleDateTime currentTime = COleDateTime::GetCurrentTime();strSQL.Format(“select max(ZBNM)as ZBNM from BLJD_JCSJ_ZBXN where ZBNM like 'ZB%d%s'”,currentTime.GetYear(), “%”);
if(!adoRecordSet.Open(strSQL, CADORecordset.openQuery)){
return FALSE;}
CString strMaxCode;adoRecordSet.GetFieldValue(“ZBNM”, strMaxCode);if(strMaxCode.GetLength()){
maxCode.Format(“ZB%d%04d”, currentTime.GetYear(), atoi(strMaxCode.Mid(6))+1);} else {
maxCode.Format(“ZB%d%04d”, currentTime.GetYear(), 1);}
adoRecordSet.Close();return TRUE;
}
/************************************************************************/ /* BCG树形控件初始化,同时加载相应的列值
*/ /************************************************************************/ void CZbxn::ONINT(){ int nIndex = 0;m_zbxn->InsertColumn(nIndex, “名称”, 75);m_zbxn->SetHeaderAlign(nIndex, HDF_CENTER);
nIndex++;m_zbxn->SetHeaderAlign(nIndex, HDF_CENTER);m_zbxn->SetColumnAlign(nIndex, HDF_RIGHT);m_zbxn->SetColumnVisible(nIndex, FALSE);
nIndex++;m_zbxn->InsertColumn(nIndex, “速度”, 75);m_zbxn->SetHeaderAlign(nIndex, HDF_CENTER);m_zbxn->InsertColumn(nIndex, “桥梁最小宽度”, 75);m_zbxn->SetHeaderAlign(nIndex, HDF_CENTER);m_zbxn->SetColumnVisible(nIndex, FALSE);
nIndex++;m_zbxn->InsertColumn(nIndex, “最小转弯半径”, 75);m_zbxn->SetHeaderAlign(nIndex, HDF_CENTER);m_zbxn->SetColumnVisible(nIndex, FALSE);
nIndex++;m_zbxn->InsertColumn(nIndex, “内码”, 75);m_zbxn->SetHeaderAlign(nIndex, HDF_CENTER);m_zbxn->SetColumnVisible(nIndex, FALSE);
nIndex++;m_zbxn->AdjustLayout();
/********************************************************************** /* 调整树形控件的颜色
CBCGPGridColors colors;colors.m_LeftOffsetColors.m_clrBackground = globalData.clrWindow;
m_zbxn->SetColorTheme(colors);}
//从数据库中查询相应的值,并且以无根节点的形式显示,关键代码为标红的部分
CADORecordset * m_adoRS;strSQL.Format(“select MC, XH, ZZXL, XZXL, ZDPD, JDSD, HYL, CD, XDJJ, DLZXKD,QLZDCZ, QLZXKD, ZXZWBJ, HDZDCZ, SDZXKD, SDZDGD, ZBNM from BLJD_JCSJ_ZBXN”);m_adoRS = new CADORecordset(CBLJDProject::m_adoConn);
if(!m_adoRS->Open(strSQL,CADORecordset.openQuery)){
return FALSE;} int nCount = m_adoRS->GetRecordCount();if(!m_adoRS->IsBOF())
{
//将数据库中的装备名称插入到列表中
while(!m_adoRS->IsEOF()){ CBCGPGridRow *pRow = m_zbxn->CreateRow(m_zbxn->GetColumnCount());
ASSERT_VALID(pRow);m_adoRS->GetFieldValue(“MC”,strMC);
//装备名称
m_adoRS->GetFieldValue(“XH”,strXH);
//序号 m_adoRS->GetFieldValue(“ZZXL”, strZZXL);//装载效率 m_adoRS->GetFieldValue(“XZXL”, strXZXL);//卸载效率 m_adoRS->GetFieldValue(“ZDPD”, strZDPD);//最大坡度 m_adoRS->GetFieldValue(“JDSD”, strJDSD);//机动速度 m_adoRS->GetFieldValue(“HYL”, strHYL);//耗油量 m_adoRS->GetFieldValue(“CD”, strCD);//长度 m_adoRS->GetFieldValue(“XDJJ”, strXDJJ);//行动间距
m_adoRS->GetFieldValue(“DLZXKD”, strDLZXKD);//道路最小宽度 m_adoRS->GetFieldValue(“QLZDCZ”, strQLZDCZ);//桥梁最大承重
m_adoRS->GetFieldValue(“QLZXKD”, strQLZXKD);//桥梁最小宽度 m_adoRS->GetFieldValue(“ZXZWBJ”, strZXZWBJ);//最下转弯半径 m_adoRS->GetFieldValue(“HDZDCZ”, strHDZDCZ);//涵洞最大承重 m_adoRS->GetFieldValue(“SDZXKD”, strSDZXKD);//隧道最小宽度 m_adoRS->GetFieldValue(“SDZDGD”, strSDZDGD);//隧道最大高度 m_adoRS->GetFieldValue(“ZBNM”,strZBNM);pRow->GetItem(0)->SetValue((LPCTSTR)strMC);pRow->GetItem(1)->SetValue((LPCTSTR)strXH);pRow->GetItem(2)->SetValue(strZZXL);pRow->GetItem(3)->SetValue(strXZXL);pRow->GetItem(4)->SetValue(strZDPD);pRow->GetItem(5)->SetValue(strJDSD);pRow->GetItem(6)->SetValue(strHYL);pRow->GetItem(7)->SetValue(strCD);pRow->GetItem(8)->SetValue(strXDJJ);pRow->GetItem(9)->SetValue(strDLZXKD);pRow->GetItem(10)->SetValue(strQLZDCZ);pRow->GetItem(11)->SetValue(strQLZXKD);pRow->GetItem(12)->SetValue(strZXZWBJ);pRow->GetItem(13)->SetValue(strHDZDCZ);pRow->GetItem(14)->SetValue(strSDZXKD);pRow->GetItem(15)->SetValue(strSDZDGD);pRow->GetItem(16)->SetValue((LPCTSTR)strZBNM);
pRow->AllowSubItems();m_zbxn->AddRow(pRow,FALSE);
m_adoRS->MoveNext();
} }
将数据从列表树总移除出去的代码如下:
m_zbxn->RemoveRow(row->GetRowId());//将数据从列表树中移除出去
/************************************************************************/ /* 数字类型检查
*/ /************************************************************************/ BOOL CZbxn::IsNumber(LPCTSTR lpsCaption, CEdit* edt){ ASSERT(edt);
CString strData;// 读取控件中的数据
edt->GetWindowText(strData);
// 只允许输数据
int nStringLength = strData.GetLength();int nDotCount = 0;// 点字符不能多于1个
for(int nIndex = 0;nIndex
if(strData.GetAt(nIndex)== '.')
{
nDotCount++;
if(nDotCount > 1)
{
CString csTmp;
csTmp = strData.Left(nIndex);
csTmp += strData.Right(strData.GetLength()1);
edt->SetWindowText(csTmp);
return FALSE;
}
} }
// 不允许输入数字和点以外的字符
for(int nnIndex = 0;nnIndex
if(strData[ nnIndex ]!= '.' &&(strData[ nnIndex ] > '9' || strData[ nnIndex ]
{
strData = strData.Left(nnIndex)+ strData.Right(strData.GetLength()1);
MeageBox(“数据类型不匹配”, lpsCaption, MB_ICONERROR);
edt->SetWindowText(_T(“”));
edt->SetFocus();
return FALSE;
} } return TRUE;}
要使用BCG界面首先要在初始化中加入这样一句话: m_LXPG = new CBCGPGridCtrl();其中m_LXPG 为CBCGPGridCtrl类型的控制型变量