网管控制台学习笔记

来源:互联网 发布:虚拟试衣间淘宝店铺 编辑:程序博客网 时间:2024/06/05 04:52

1.

注意include路径设置,由于代码里面是#include <snmp_pp/vb.h>

所以只需要包含到G:/svn/winutils/library/snmp/include

而不要到G:/svn/winutils/library/snmp/include/snmp_pp,这样就错了

 

2.

保存LIST CONTROL里面的内容部被刷新掉

由于本程序在ChangeView时,是新new了一个新对象createNewView(new CDlgSysSetting(this));而在createNewView中

 

void CtrapReceiverView::createNewView(CDialog *pDlg){

if (m_pDlg){

m_pDlg->SendMessage(WM_CLOSE);

delete m_pDlg;

}

m_pDlg = pDlg;

}

是delete掉了原对象,所以在切换视图的时候LIST CONTROL里面的内容没法保存,因为对象已经销毁了

此时,可以用ShowWindow(SW_HIDE)来解决,只是隐藏,而不销毁。

 

 

void CtrapReceiverView::createNewView(CDialog *pDlg){

if (m_pDlg){

m_pDlg->SendMessage(WM_CLOSE);

if(m_pDlg!=s_pDlg)

delete m_pDlg;

else

m_pDlg->ShowWindow(SW_HIDE);

}

 

m_pDlg = pDlg;

}

 

 

3.

改变LIST CONTROL里面每行的颜色。

添加OnCustomDraw消息响应函数

 

void CSortListCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)

{

LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;

*pResult = 0;

 

switch(lplvcd->nmcd.dwDrawStage) 

{

case CDDS_PREPAINT :

*pResult = CDRF_NOTIFYITEMDRAW;

break;

case CDDS_ITEMPREPAINT:

*pResult =  CDRF_NOTIFYSUBITEMDRAW;

break;

case CDDS_SUBITEM | CDDS_ITEMPREPAINT:

if(GetItemCount() >= 1)

{

 CString sText = GetItemText(lplvcd->nmcd.dwItemSpec,3);

 if (sText=="错误"){

 lplvcd->clrTextBk = RGB(255,0,0);

 }

else if (sText=="警告")

{

lplvcd->clrTextBk = RGB(255,255,0);

}

CString sText2 = GetItemText(lplvcd->nmcd.dwItemSpec,0);

if (sText2=="已确认")

{

lplvcd->clrTextBk = RGB(255,255,255);

}

/*if(lplvcd->nmcd.dwItemSpec % 2)

{

lplvcd->clrTextBk = RGB(255,255,255);

}

else

{

lplvcd->clrTextBk = RGB(255,255,200);

}*/

*pResult = CDRF_NEWFONT;

}

break;

}

}

 

 

4.

当LIST CONTROL前面有复选框时,如果选择复选框就做响应动作

取消选择也做响应动作。

一个是用CListControl中的HitTest函数,注意的是CPoint要用ScreenToClient调整一下才行。

 

CPoint pt;

GetCursorPos(&pt);

m_list.ScreenToClient(&pt);

int nRow, nCol;

nRow=m_list.HitTest(pt);

m_list.SetItemText(nRow,COL_SURE,_T("已确认"));

for (int i=0; i<m_list.GetItemCount(); ++i){

if(m_list.GetItemText(i,COL_SURE)==_T("未确认"))

{

*pResult = 0;

return;

}

}

 

 

另一个是用CListControl中的GetCheck函数,不过要遍历LIST CONTROL的所有项,貌似没有上面的好

 

for(int i=0;i<m_list.GetItemCount();++i)

{

 if(m_list.GetCheck(i)==BST_CHECKED)

  m_list.SetItemText(i,COL_SURE,_T("已确认"));

}

4.

关于CDlgSysSetting。系统设置界面。

是点保存的时候,读取整个界面信息,然后写到配置文件里面。而非选择复选框时响应消息,这样太复杂。所以本软件如果只是选取复选框而不点保存,则无效,返回此界面时候仍然为默认值。

然后当初始化时候都是读取配置文件设置复选框的默认值。

在确定是否trap转发的时候也是读取配置文件。

 

原创粉丝点击