vs2008,MFC编程
界面控件,list control、edit control、button control、IP control
添加控件后可在属性中更改ID与名称,双击可自动生成控件通知处理程序成员函数。使用时,首先应定义变量,并与控件关联:
CString m_text;
CListCtrl m_list;
CIPAddressCtrl m_IPAddressCtrl;
在DoDataExchange(CDataExchange* pDX)中设置关联
DDX_Text(pDX, IDC_EDITCONTRL, m_text);//当前已打开视频数--m_strnumber
DDX_Control(pDX, IDC_LIST,m_list);//list
DDX_Control(pDX, IDC_IPADDRESS, m_IPAddressCtrl);
然后就可以进行一些操作了
1、edit control
int i=100;
m_text.Format("%d",i);//显示
UpdateData(FALSE);
UpdateData(true); CString s; s=m_text
.GetString();//输入字符串
/**************************/
2、IP control
UpdateData(true);
unsigned char *pIP; DWORD dwIP; m_IPAddressCtrl.GetAddress(dwIP); prIP = (unsigned char*)&dwrIP;
CString IP;
IP.Format("%u.%u.%u.%u",*(pCenterIP+3),*(pCenterIP+2),*(pCenterIP+1),*pCenterIP);
3、list control
//设置list control风格
DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格
//插入表头
m_list.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 70 );//添加列,用于显示序号
m_list.InsertColumn(2,_T("IP"),LVCFMT_LEFT,150);//添加列用于显示IP地址
//插入行—数据项
m_list.InsertItem(i, _T("")); //每一行的开始使用此函数。
m_list.SetItemText(i
,2
, Current
IP);//显示当前“IP地址”
//删除所有数据
m_list.DeleteAllItems();
//利用NM_CUSTOMDRAW还可以对指定行重绘
定义方法:
afx_msg void OnCustomdrawMyList(NMHDR *pNMHDR, LRESULT *pResult);
设置关联(BEGIN_MESSAGE_MAP中):
ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST, &CMyDlg::OnCustomdrawMyList)
实现代码:
void CMyDlg::OnCustomdrawMyList(NMHDR *pNMHDR, LRESULT *pResult)
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
*pResult = CDRF_DODEFAULT;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
if ( repaint )
{
COLORREF crText;
crText = RGB(255,0,0);
pLVCD->clrText = crText;}
*pResult = CDRF_DODEFAULT;
}
}
//然后可以在需要的地方设置标志repaint,并重绘某些行
repaint=true;m_list.RedrawItems(i, i); UpdateWindow();
这样第i行就被重绘成红色。
/*************************************************************************************/
在
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
///
//
//
END_MESSAGE_MAP()
中设置关联控件通知处理函数与控件ID,这样,控件相关状态改变就能出发相应程序,比如:
ON_BN_CLICKED(IDCANCEL, &CMyDlg::OnBnClickedCancel)
当按下ID号为
IDCANCEL的button时,就触发
CMyDlg::OnBnClickedCancel()这个函数。