MFC自定义消息
第一步:
#define WM_ONLINE WM_USER+1
#define WM_LEAVE WM_USER+2 //定义自定义的消息
BEGIN_MESSAGE_MAP(C你懂的Dlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_MESSAGE(WM_LEAVE,OnWm_leave)//离开消息 ON_MESSAGE(WM_ONLINE,OnWm_online)//鸽子上线信息 ON_WM_SIZE() ON_WM_CLOSE() END_MESSAGE_MAP()
上面是我定义的2个消息函数, WM_LEAVE 表示你的ID,也就是说sendmessage传送的ID,第二个参数为你的函数下面是例子:
PostMessage(this->h,WM_LEAVE,(WPARAM)this->id,0); 第三位和第四位表示参数,系统将自动为我们调用我们的OnWm_online函数,
他就像一个map集合 id表示为消息的ID,而后面的函数则表示value
我们的函数那该怎么写呢??
//OnWM_ONLINE
//肉鸡上线函数
LRESULT C你懂的Dlg::OnWm_online(WPARAM wparam, LPARAM lParam){
CMyscoket* m = (CMyscoket*)wparam;//强制转换成咱们封装的socket对象
MSG_SYSTEM* sys = (MSG_SYSTEM*)m->msgInfo->context;
int i = m_list.GetItemCount();
CString a;
a.Format("我是从服务端传送过来的整型:%d",sys->os);
m_list.InsertItem(i,a.GetBuffer());//插入到最后一行
a.ReleaseBuffer();//释放内存空间
m_list.SetItemText(i,1,m->ip);
m_list.SetItemText(i,2,"操作系统");
m_list.SetItemText(i,3,"代理状态");
m_list.SetItemText(i,4,"计算机名");
m_list.SetItemText(i,5,"CPU");
m_list.SetItemText(i,6,"摄像头");
m_list.SetItemText(i,7,"ping");
count=count+1;
m->id = count;
m_list.SetItemData(i,(DWORD_PTR)m);
ShowOnLine();
return 0;
}
(WPARAM wparam, LPARAM lParam) 这个函数头就相当于要传入的参数,参数可以自定义

浙公网安备 33010602011771号