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)  这个函数头就相当于要传入的参数,参数可以自定义

 

 

 

posted @ 2013-07-28 00:45  宝贝,我永远都在  阅读(353)  评论(0)    收藏  举报