使用soui开发的mbc,只支持windows版本
w1146869587
2022-01-24 0408576e9da10015ffa9da0079b8c985113ce4b3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
// MainDlg.h : interface of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "imre\SImRichedit.h"
#include "helper\SMenuEx.h"
#include "../controls.extend/SListboxex.h"
#include "control\SDropDown.h"
#include <wtypes.h>
#include <vector>
#include <shellapi.h>
#include "imre\ClipboardConverter.h"
#include "MessengerPro.h"
#include "SChatEditLog.h"
#include "SChatEditMsg.h"
#include "MBGroupChatData.h"
#include "MBFileTransItem.h"
#include "MBEmotionsWnd.h"
#include "IFontAdapterCallback.h"
#include "FontAdapter.h"
#include "CrowdDataMgr.h"
#include "MBAMChatDef.h"
#include "MBGroupUserTileAdapter.h"
#include "MBGroupUserinfoWnd.h"
#include "MBGroupFileSMCAdapter.h"
 
class CMBAMWnd;
 
class AFX_EXT_CLASS CMBGroupChatFrame : public TAutoEventMapReg<CMBGroupChatFrame>     , public IFontAdapterCallback, public CMBEmotionsWnd::IListener
{
public:
 
    CMBGroupChatFrame();
    ~CMBGroupChatFrame();
private: // 组件
    SOUI::SWindow        *m_pPageRoot;
    HWND                m_hWnd;
    SHostWnd            *m_pHostWnd;     
    bool                m_bLayoutInited;        // 是否初始化
    SChatEditLog *      m_pMsgRichEdit;
    SChatEditMsg *      m_pInputRichEdit;
    time_t              m_lastWhellTime;
    int                 m_totalWhellDelta;
 //   int                 m_nSendType;          // 输入enter发送或者enter+ctrl发送
    //BOOL                m_bCaptureHideWnd;
 
    CMBEmotionsWnd        *m_pWndEmotions;  // 弹出窗 
    CMBGroupUserinfoWnd        *m_pGroupUserInfoWnd;  // 弹出窗 
public: //  服务
    CMBServerMgr                *m_pServerMgr;
    CMBOrgWebCMgr                *m_pOrgWebCMgr;
    CMBFileMD5GenMgr            *m_pFileMD5GenMgr;
    CMBUserLogin                *m_pUserLogin;  
    CMessengerPro                *m_pAMMessengerPro;
    CMBAMWnd                    *m_pMBAMWnd;
    CFontAdapter*                m_pFontFaceAdapter;
    CFontAdapter*                m_pFontSizeAdapter;
 
    STileViewEx                    *m_pTileVUserItem;
    CMBGroupUserTileAdapter     *m_pAdapterUserItemTile;    
        // 共享文件列表
    CMBGroupFileSMCAdapter      *m_pShareFileLstMCAdapter; 
    CMBMcListViewEx                *m_pMCLvShareFileLst;
 
    CMBGroupChatData            *m_pAMChatData;
    CMapStringGroupChatData        m_mapCrowdChatData;
    
    CObList                        m_lstStkMsg;
    CArraySTKUploadMgr            m_arUploadMgr;
    CArraySTKUploadMgr            m_arUploadFileMgr;
    CMapSTKUploadFile            m_mapSTKUploadFile;
    CMapSTKUploadFile            m_mapSTKUploadFileMD5;    
    CMapSTKUploadFile            m_mapUploadFolder;
    CMapSTKUploadFile            m_mapUploadFolderZip;    
    CMapLongToString            m_mapFolderZip;    
    CMapStringToString            m_mapZipToFolder;
    CMapSendMsgInfo                m_mapSendMsg;
    CMapStringToLong            m_mapUploadingImage;
    CMapSTKUploadFile            m_mapUploadingFile;
    
    CCheckTransferOutTimeMgr    m_mgrCheckTransferOutTime;
    BOOL                        m_bCloseDlg;
    
    CArray<stAttachInfo, stAttachInfo&> m_arMBDownloadFile;
    CMapSTKImageInfo        m_mapImageFile;
    CMapAttachInfo            m_mapDwonloadFile;
    CMapAttachInfo            m_mapDwonloadFolderZip;
    CArray<stAMDeleteFileInfo, stAMDeleteFileInfo&> m_arMBDeleteFile;
    long                    m_nSelBegin;
    long                    m_nSelEnd;
    CString                    m_strFileSFlag;
    int                        m_nFolderCompressLevel;
    HANDLE                    m_hUploadFileThread;
    HANDLE                    m_hDownloadFileThread;
    CMapStringToString        m_mapOpenFile;
 
    CMBImageViewWnd         *m_pImageViewWnd; // 图片浏览的窗口 
    CChatShortcutTermArray    *m_parCommIDI;    
public:
    bool    RegisterNotifyCenter();
    bool    UnRegisterNotifyCenter();
public:
    void    OnInit(SWindow *pRoot);
    void    SetServerMgrPtr( CMBServerMgr *pMBServerMgr ); 
    void    SetAMWndPtr( CMBAMWnd *pMBAMWnd ); 
    void    SetCrowdChat( CCrowdItem *pCrowdItem); 
    void    RemoveCrowd( CString strID); 
    void    DoMessageLoop();
    void    OnTimer(UINT_PTR idEvent);
    void    OnClose();
    CMBGroupChatData *GetCurChatData();
 
    void    SendMsgSuccess(long nTrID, CString strMsgID );
    void    RecSendMsgBack( CCrowdMsgItem *pMsg, long nErrorCode);
    void    SendChatData(CCrowdMsgItem *pMsg, bool bRefrush);
    void    SendMsgFailed(long nTrID, long nErrCode );
    void    RecSendMsgTime(CCrowdMsgItem *pItem, CString strErrorInfo);
    void    SetMsgData( CCrowdMsgItem *pMsg,bool    bRefrush );
    //File
    bool    ResponseFileClientReceive( REQLOADSERVER_ITEM & reqLoadServerItem,COISysMsg *pSMsg,CString &strErrInfo ); 
    bool    ResponseFileClientError(REQLOADSERVER_ITEM & reqLoadServerItem,CString strParam,CString &strErrInfo);
    bool    ResponseFileMD5Finish( CString  strFilePath,CString strFileMD5 );
    bool    ResponseFileMD5Error( CString  strFilePath);
 
    void        MsgFileResUploadFinish( long nTrID, CString strConnectType, CString strBody );
    void        MsgFileResDownloadFinish( long nTrID, CString strConnectType, CString strBody );
    bool        IsThisWndAcceptDropFile( SWND ptWnd );                     // 是否该窗口接收拖拽文件
    BOOL        OnDropFile( IDataObject* pDataObject ); //接受拖拽文件
    void        SendAMFile();
    void        DealNeedUploadFolders();
    void        DealNeedUploadFiles();
    void        CompressUploadFolder();
    BOOL        CheckCrowdChat(CString strID);
    void        UpdateCrowdUser(CString strCrowdID);
    void        UpdateCrowdInfo(CString strCrowdID);
    void        UpdateFileList(CString strCrowdID);
    void        ShareFileSuccess(CString strCrowdID,CString strShareID, CString strParam);
    void        ShareFileFailed(CString strCrowdID,CString strSendFlag);
    void        DeleteShareFile(CString strCrowdID,CString strShareID);
    void        CancelShareFileTransfer(CString strCrowdID,CString strShareID, bool bSend = true);
    void        DeleteShareFileRes(CString strCrowdID,CString strShareID,CString strFileSFlag,CString strFileID);
    void        DownloadShareFileBeginRes(CString strCrowdID,CString strShareID,CString strFileSFlag,CString strFileID,CString strFilePath);
    void        DownloadShareFileEndRes(CString strCrowdID,CString strShareID);
    void        AddSendFileLst( CStringArray &arFileLst );
    void        LoadChatWndNewMsg(CString strCrowdID);
public:
    //virtual void OnClickFontFaceItem(int nIndex,CString strText);    
    //virtual void OnClickFontSizeItem(int nIndex,CString strText);    
    virtual void OnClickFontItem(int nIndex,int nFontType,CString strText);    
    virtual void EmotionTileViewItemClick(int nIndex);
public:
    static unsigned int _stdcall ThreadFunctionCompressFile(void *pV);
    static unsigned int _stdcall ThreadFunctionDecompressFile(void *pV);
private:
    void OnInitFont();
    CMBGroupChatData *GetAMChatData(CString strCrowdID);
    CMBGroupChatData *AddAMChatData( CCrowdItem *pCrowdItem);
    void ClearAMChatData();
    void GetUserInfo(CChatUserInfo& info,SStringW strUser,SStringW strName);
    BOOL SendMsg();
    BOOL ResendMsg(SStringT strSendFlag,SStringT strSOUIContent);
    BOOL SendCaptureImage(CString strImage);
    BOOL CheckMsgHasImage(CString strStkMsg);
    void SendImageFile();
    CString    SendImageFile(CString strStkMsg, CString strSendFlag );
    BOOL SendingMsg();
    
    long AMUploadFile(CString strReceiver, CString strFileName ,CString strFileMD5= _T(""), DWORD dwOption = OPTION_TRANOPTION_REPORT );
    long AMUploadImageFile(CString strReceiver, CString strFileName);
    long AMDownloadFile(CString strFlag,CString strUser, CString strFileID, CString strFilePath, DWORD dwOption = OPTION_TRANOPTION_REPORT );
    long AMDownloadImageFile(CString strFlag,CString strUser, CString strFileID, CString strFilePath);
    bool AMDeleteFile(CString strFlag,CString strFileID,CString &strErrInfo);
    bool AMCancelCmder(CString strFlag,long nTrID);
    //BOOL GetAttitudeValue( UINT nAttitudeID, CString &strLeftButton, CString &strRightButton );
    void ShowChatTip(SStringW strMessage,SStringW strReiver/* = L""*/,eTipsType nTipsType = e_TipsType_Info);
    void ShowChatRecordData(CMBGroupChatData *pAMChatData );
    CString        GetGroupFilePath( CString strGroupID, CString strShareID  );
    void        UpdateGroupFileInfo( CString strGroupID, CString strShareID, CString strFilePath, CString strFileName = _T(""), __int64 nFileSize = 0);
    POSITION    FindStkMsg(long nTrID);    
    void        CleanStkMsgLst( );
    CString        SendImageFileMsg(CMBCrowdMsg *pItemStrMsg, CString strStkMsg);
    void        DownloadMsgImage(CString strCrowdID, CString strStkMsg,CString strMsgID );
    void        DownLoadAMFile( );
    void        DeleteAMFile();
    void        DecompressDownloadFolder();
    void        DealDownloadFoldersZip( );
    
    void        AddDownloadFileInfo(stAttachInfo &infoAttach);
    bool        GetDownloadFileInfo(stAttachInfo &infoAttach);
 
    void        AddDeleteFileInfo(CString strFileSFlag,CString strFileID,CString strCrowdID);
    bool        GetDeleteFileInfo(CString &strFileSFlag,CString &strFileID,CString &strCrowdID);
 
    void        InputRichSelEndChanged();
    void        RetransferFileItem(CMBFileTransItem& item);
    CMBUserPro*    GetUserPro( );
    void        GetDownloadDir( CString &strDir );
    void        SaveAsImage(SStringT strImagePath);
    void        RemoveUploadFile(CString strFile);
    BOOL        UploadFiles( CStringArray &arFile);
    void        DirectSendMsg(CString strText);
protected:
 
    
  
    void FillRClickAvatarMenu(MenuWrapper& menu, RichEditContent* pContent);
    void FillRClickImageMenu(MenuWrapper& menu, RichEditContent* pContent);
    void FillRClickFileMenu(MenuWrapper& menu, RichEditContent* pContent);
    void FillRClickSelRegionMenu(MenuWrapper& menu, RichEditContent* pContent);
    void FillRClickBubbleMenu(MenuWrapper& menu, RichEditContent* pContent);
    void FillRClickNothingMenu(MenuWrapper& menu);
    void DragDropFiles(RichFormatConv::DropFiles& files);
 
protected:
 
    void OnSend();
    void OnSendPicture();
    void OnShowSendTypeMenu();
    void OnFont();
//    void OnFontName();
    //void OnFontSize();
    void OnFontBold();
    void OnFontItalic();
    void OnFontUnderline();
    void OnFontColor();
    void OnEmotion();
    void OnCutScreen();
    void OnCutScreenArrow();
    void OnCommTerms();
    void OnMsgRecord();
    void OnShowCrowdInfo();
    void OnExitCrowd();
    void OnChatLogCopy();
    void OnChatLogSaveAs();
    void OnGetShareFileLst();
    void OnUploadFiles();
 
    void OnDropFiles(HDROP hDropInfo);
    bool OnEditorAcceptData(SOUI::EventArgs *pEvt);
    bool OnShowInputRichEditMenu(SOUI::EventArgs *pEvt);
    bool OnShowMessageRichEditMenu(SOUI::EventArgs *pEvt);
    bool OnInputEditorChange(SOUI::EventArgs *pEvt);
    bool OnInputRichObjEvent(SOUI::EventArgs *pEvt);
    bool OnInputRichKeyDownEvent(SOUI::EventArgs *pEvt);
    bool OnMsgRichObjEvent(SOUI::EventArgs *pEvt);
    bool OnMsgRichScrollEvent(SOUI::EventArgs *pEvt);
    bool OnEventGroupChatDataQueryFinish(EventArgs *e);
    bool OnEventGroupCompressFolderFinish(EventArgs *e);
    bool OnEventGroupDecompressFolderZipFinish(EventArgs *e);
    bool OnInputRichLButtonDownEvent(EventArgs *pEvt);      // 
    bool OnInputRichMouseHoverEvent(EventArgs *pEvt);      // 
    bool OnEventGroupFileClick(EventArgs *pEvt);      // 
protected:
    //soui消息
    EVENT_MAP_BEGIN() 
        EVENT_CHECK_SENDER_ROOT(m_pPageRoot)  
        EVENT_ID_COMMAND_RANGE(34000, 34005, OnTabPageRadioSwitch)    //30000-30003是page_share.xml中定义的radio2的ID 
        EVENT_NAME_COMMAND(L"btn_send", OnSend)
        EVENT_NAME_COMMAND(L"btn_showsendmenu", OnShowSendTypeMenu)
        EVENT_NAME_COMMAND(L"chk_font", OnFont)
        EVENT_NAME_COMMAND(L"chk_fontbold", OnFontBold)
        EVENT_NAME_COMMAND(L"chk_fontitalic", OnFontItalic)
        EVENT_NAME_COMMAND(L"chk_fontunderline", OnFontUnderline)
        EVENT_NAME_COMMAND(L"btn_fontcolor", OnFontColor)
        EVENT_NAME_COMMAND(L"btn_emotion", OnEmotion)
        EVENT_NAME_COMMAND(L"btn_screencut", OnCutScreen)
        EVENT_NAME_COMMAND(L"btn_screencut_arrow", OnCutScreenArrow)
        EVENT_NAME_COMMAND(L"btn_sendpic", OnSendPicture)
        EVENT_NAME_COMMAND(L"btn_commterms", OnCommTerms)
        EVENT_NAME_COMMAND(L"btn_msgrecord", OnMsgRecord)
        EVENT_NAME_COMMAND(L"btn_morecrowdinfo", OnShowCrowdInfo)
        EVENT_NAME_COMMAND(L"btn_exitcrowd", OnExitCrowd)
        EVENT_NAME_COMMAND(L"btn_chatlog_copy", OnChatLogCopy)
        EVENT_NAME_COMMAND(L"btn_chatlog_saveas", OnChatLogSaveAs)
        EVENT_NAME_COMMAND(L"btn_sharefile_update", OnGetShareFileLst)
        EVENT_NAME_COMMAND(L"btn_sharefile_upload", OnUploadFiles)
        EVENT_HANDLER(EventGroupChatDataQueryFinish::EventID,OnEventGroupChatDataQueryFinish)
        EVENT_HANDLER(EventGroupCompressFolderFinish::EventID,OnEventGroupCompressFolderFinish)
        EVENT_HANDLER(EventGroupDecompressFolderZipFinish::EventID,OnEventGroupDecompressFolderZipFinish)
        EVENT_HANDLER(EventGroupFileClick::EventID,OnEventGroupFileClick)
        //MSG_WM_DROPFILES(OnDropFiles)
    EVENT_MAP_BREAK() 
protected:
    void OnTabPageRadioSwitch(int nID);
};