⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netmsgdlg.h

📁 本人买的<<VC++项目开发实例>>源代码配套光盘.
💻 H
字号:
// NetMsgDlg.h : header file
//

#if !defined(AFX_NETMSGDLG_H__FBC71A2A_EB47_459F_97A1_E6696FE67DBA__INCLUDED_)
#define AFX_NETMSGDLG_H__FBC71A2A_EB47_459F_97A1_E6696FE67DBA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//整个系统的主窗口类。
//功能:
//  1. 朋友的维护(增加,删除)
//  2. 广播自身profile报文的服务。
//  3. 广播自己下线的报文。
//  4. 处理朋友的上线信息。
//  5. 处理朋友的下线信息。
//  6. 判断指定NetMsgID的朋友存在性。
//  7. 释放和建立朋友链表。
//  8. 监听朋友上线报文。
//  9. 监听朋友下线报文。
//  10. 建立与朋友聊天的会话。

#include <afxtempl.h>		//for CTypedPtrList

#include <afxmt.h>			//for CCriticalSection

#include "FriendObj.h"
#include "FriendsListBox.h"	//for the Friends ListBox
#include "FormChatHist.h"	//for CFormChatHist class
//整个系统的主窗口类。
//功能:
//  1. 朋友的维护(增加,删除)
//  2. 广播自身profile报文的服务。
//  3. 广播自己下线的报文。
//  4. 处理朋友的上线信息。
//  5. 处理朋友的下线信息。
//  6. 判断指定NetMsgID的朋友存在性。
//  7. 释放和建立朋友链表。
//  8. 监听朋友上线报文。
//  9. 监听朋友下线报文。
//  10. 建立与朋友聊天的会话。
//##ModelId=3E322F9E0323
#define PROFILE_TIMER_ID  101
//系统的主窗口。
//##ModelId=3E322F9E0323
class CNetMsgDlg : public CDialog
{
private:
	//自己的NickName
	//##ModelId=3E3288130144
	CString m_strSelfNickName;

	//自己的NetMsgID
	//##ModelId=3E32884700DB
	DWORD m_dwSelfNetMsgID;

	//临界区对象
	//##ModelId=3E32886C005C
	CCriticalSection m_cs;

// Construction
public:
	//表示报文类型
	//##ModelId=3E328E440035
	enum ACTION_TYPE 
	{
	
		//##ModelId=3E328E5D0262
		ON_LINE,

		//##ModelId=3E328E6301F2
		OFF_LINE
	};


	//上线和下线时候使用的报文。
	//##ModelId=3E328DA001CA
typedef struct
{
	ACTION_TYPE ActionType;
	DWORD NetMsgID;
	char NickName[11];
} DGRAM_FRIEND;


	//广播自己上线的报文
	//##ModelId=3E3288B402FE
	void BroadcastOnlineDGM();

	//广播自己下线的报文。
	//##ModelId=3E3288D60072
	void BroadcastOfflineDGM();

	//处理收到的朋友上线的报文。
	//  1.如果这个朋友不在朋友链表中,那么就加入这个朋友。
	//  2. 同时删除这个动态分配的报文。
	//##ModelId=3E32891002BA
	void HandleOnlineDGM(CFriendObj * obj);

	//处理朋友的下线报文。
	// 1. 删除指定的结点。
	// 2. 如果dlg不为NULL,那么调用
	//    dlg的OnFriendOffline()
	// 3. 删除朋友列表中的Item, 是根据POSITION来找到的。
	// 4. 删除这个动态分配的报文。
	//##ModelId=3E328B5D0181
	void HandleOfflineDGM(CFriendObj * obj);

	//监听朋友的上线和下线报文
	//##ModelId=3E328B9C004B
	static UINT FriendService(LPVOID pNetMsg);

	//建立与指定的朋友的聊天会话。
	//##ModelId=3E328F1D01F9
	void OpenChatDlg(POSITION pos);

	//初始化功能
	//1.读取自己的profile[profile.xml]
	//2.读取系统的配置系统。[config.xml]
	//##ModelId=3E328F930181
	bool Init();

	//##ModelId=3E322F9E0325
	CNetMsgDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	//{{AFX_DATA(CNetMsgDlg)
	enum { IDD = IDD_NETMSG_DIALOG };
	//上线朋友的ListBox
	//##ModelId=3E32910002D0
	CFriendsListBox	m_listFriends;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CNetMsgDlg)
	protected:
	//##ModelId=3E322F9E032E
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//##ModelId=3E322F9E0341
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CNetMsgDlg)
	//##ModelId=3E322F9E03C3
	virtual BOOL OnInitDialog();
	//##ModelId=3E322F9E03CE
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	//##ModelId=3E322F9E03E1
	afx_msg void OnPaint();
	//##ModelId=3E322F9F0003
	afx_msg HCURSOR OnQueryDragIcon();
	//重载了OnOK,目的是防止Enter键让窗口关闭。
	//##ModelId=3E322F9F000D
	virtual void OnOK();
	//重载了OnCancel,为了防止ESC让窗口关闭。
	//##ModelId=3E322F9F0017
	virtual void OnCancel();
	//##ModelId=3E322F9F0021
	afx_msg void OnAboutbox();
	//##ModelId=3E322F9F002B
	afx_msg void OnMenuExit();
	//##ModelId=3E3295F60037
	afx_msg void OnClose();
	//时钟定时器处理函数。
	//当用户处于上线状态的时候,系统会不断地向整个子网广播自己
	//的Profile报文。
	//##ModelId=3E32B3E00185
	afx_msg void OnTimer(UINT nIDEvent);
	//##ModelId=3E330EFE01CD
	afx_msg void OnDestroy();
	//##ModelId=3E342F6B02B9
	afx_msg void OnDblclkListFriends();
	//##ModelId=3E3573780016
	afx_msg LRESULT OnChatMsg(WPARAM wParam, LPARAM lParam);
	//##ModelId=3E361E2402B8
	afx_msg void OnMenuHistory();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
	//聊天历史窗口
	//##ModelId=3E361E240309
	CFormChatHist * m_pChatHistDlg;
	//朋友功能服务
	//##ModelId=3E338B6A00C7
	CWinThread * m_pThreadFriendService;
	//聊天服务线程
	//##ModelId=3E344617011B
	CWinThread * m_pThreadChatService;
	
	//文件服务线程
	//##ModelId=3E431B0A007A
	CWinThread * m_pThreadFileService;

	//##ModelId=3E32B4F00213
	DGRAM_FRIEND m_profileSelf;

	//存放上线朋友的链表
	//##ModelId=3E32C9FA0060
	static CTypedPtrList<CObList, CFriendObj *> m_queueFriends;

public:
	//##ModelId=3E3971A10142
	const DWORD& get_SelfNetMsgID() const;

	//##ModelId=3E396F3F0177
	const CString& get_SelfNickName() const;

	//关闭聊天窗口。
	//##ModelId=3E34420F00D0
	void CloseChatDlg(POSITION pos);
	//查找指定NetMsgID的朋友,
	//如果能找到就返回CFriendObj*,
	//否则返回为NULL
	//##ModelId=3E32FC9103A1
	CFriendObj * FindFriend(DWORD dwNetMsgID);

	//广播朋友报文。
	//##ModelId=3E32BC280043
	void BroadcastFriendDGM(DGRAM_FRIEND dgm);

	//朋友服务使用的端口。
	//##ModelId=3E32B87101C2
	static short shortFriendPort;

	//撤销定时器
	//##ModelId=3E32B406022A
	virtual ~CNetMsgDlg();

};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_NETMSGDLG_H__FBC71A2A_EB47_459F_97A1_E6696FE67DBA__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -