📄 netmsgdlg.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 + -