// 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 #include #include #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 , 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 m_arMBDownloadFile; CMapSTKImageInfo m_mapImageFile; CMapAttachInfo m_mapDwonloadFile; CMapAttachInfo m_mapDwonloadFolderZip; CArray 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); };