MFC主窗口ShangweijiDlg有个列表控件,还有个添加删除房间按钮,按钮消息响应函数如下:
点击该按钮,弹出新窗口CTianJia_Delet TianjiaDelet_room添加删除房间窗口,该窗口上有个IP地址控件,该程序目的将将IP地址控件里面的IP转化成字符串显示在特定位置列表里,但不知道为什么错了void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
{
CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口
DWORD tianjiadeletip;//添加或删除的房间的IP地址
CString strip;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
BYTE IP0,IP1,IP2,IP3;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(&IP0,&IP1,&IP2,&IP3);
strip.Format("%d.%d.%d.%d",IP0,IP1,IP2,IP3);
if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
{
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
//这里是将第1行第二列的值设置为所添加或删除房间的IP地址
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip);
}
}
点击该按钮,弹出新窗口CTianJia_Delet TianjiaDelet_room添加删除房间窗口,该窗口上有个IP地址控件,该程序目的将将IP地址控件里面的IP转化成字符串显示在特定位置列表里,但不知道为什么错了void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
{
CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口
DWORD tianjiadeletip;//添加或删除的房间的IP地址
CString strip;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
BYTE IP0,IP1,IP2,IP3;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(&IP0,&IP1,&IP2,&IP3);
strip.Format("%d.%d.%d.%d",IP0,IP1,IP2,IP3);
if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
{
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
//这里是将第1行第二列的值设置为所添加或删除房间的IP地址
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip);
}
}
其中我的IP控件关联变量m_tianjiadeletip
BYTE& nField0,
BYTE& nField1,
BYTE& nField2,
BYTE& nField3
);
参数传的都是引用,不是地址,这样就可以了
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(IP0,IP1,IP2,IP3);
int GetAddress(
BYTE& nField0,
BYTE& nField1,
BYTE& nField2,
BYTE& nField3
);加在void CShangweijiDlg::OnTianjia_Dele_Room(){}这个大函数里面,编译通过,但运行时点击按钮会出错???????
m_ip.GetAddress(ip0, ip1, ip2, ip3);
CString strMsg;
strMsg.Format(_T("%d.%d.%d.%d"), ip0, ip1, ip2, ip3);
MessageBox(strMsg);我的代码,验证过OK,你调试一下,看哪句报错了
int GetAddress(
BYTE& nField0,
BYTE& nField1,
BYTE& nField2,
BYTE& nField3
);这函数你是加在哪里?
{
CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口
DWORD tianjiadeletip;//添加或删除的房间的IP地址
CString strip;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
(TianjiaDelet_room.m_tianjiadeletip).GetWindowText(strip);
if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
{
//第一列用InSertItem(),插入所添加或删除的房间号
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
//这里是将第1行第二列的值设置为所添加或删除房间的IP地址
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip);
}
}兄弟,还是没报错,就是会跳出终止,重试,忽略的对话框
CIPAddressCtrl* pIPCtrl = (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
if ( pIPCtrl != NULL )
{
pIPCtrl->SetAddress(10, 12, 1, 106);
ULONG nIp;
pIPCtrl->GetAddress(nIp);
char szBufIP[32];
sprintf(szBufIP, "%d.%d.%d.%d", (nIp&0x000000ff) >> 0, (nIp&0x0000ff00) >> 8, (nIp&0x00ff0000) >> 16, (nIp&0xff000000) >> 24 );
}
我给你发的是GetAddress函数申明的原型,不是代码,你的代码这样改改就可以了
void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
{
CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口
DWORD tianjiadeletip;//添加或删除的房间的IP地址
CString strip;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
BYTE IP0,IP1,IP2,IP3;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(IP0,IP1,IP2,IP3); //这个地方是引用,不是代码
strip.Format("%d.%d.%d.%d",IP0,IP1,IP2,IP3);
if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
{
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
//这里是将第1行第二列的值设置为所添加或删除房间的IP地址
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip);
}
}
注释起来,就不会出错,但是结果将无法更新,我的QQ234856395
你都没有创建就调用其控件?
你还是先做点简单例子熟悉一下具体操作吧
CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口
这样不算是创建吗?
((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);我把TianjiaDelet_room对话框里的一个编辑框里的值传递过去式可以实现的;
不好意思哦,新手,因为任务紧急所以就边做边学哦
你的这个变量都没见你初始化,你去取值,当然就会崩溃.
真的很感谢你们的热心,只是我基础太差了,看来我要好好从基础学起,只是TianjiaDelet_room.DoModal()不就是调用对话框?if(IDOK==TianjiaDelet_room.DoModal())
TianjiaDelet_room是一个对话框类,如何初始化?是TianjiaDelet_room.DoModal()吗?
不过其上的控件只有在对话框显示的时候才有效
调用之前和销毁之后都不能被访问