imchatrecordview.cpp
来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 216 行
CPP
216 行
/*
============================================================================
Author : hou maoqing
Version : 1.0
Copyright : Copyright (c) Hou maoqing 2008
Mail : houmqing@163.com
============================================================================
*/
#include <aknviewappui.h>
#include <avkon.hrh>
#include <ImClientExam.rsg>
#include "SocketsAppUi.h"
#include "ImChatRecordView.h"
#include "ImChatRecordContainer.h"
#include "sockets.hrh"
#include "ImMsgCommandID.h"
#include "ImSendNotifyMessageBody.h"
#include "ImFriendListView.h"
// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CImChatRecordView::ConstructL(const TRect& aRect)
// EPOC two-phased constructor
// ---------------------------------------------------------
//
void CImChatRecordView::ConstructL()
{
BaseConstructL( R_IMCLIENT_IMCHATRECORD_VIEW );
}
// ---------------------------------------------------------
// CImChatRecordView::~CImChatRecordView()
// destructor
// ---------------------------------------------------------
//
CImChatRecordView::~CImChatRecordView()
{
if ( iContainer )
{
AppUi()->RemoveFromViewStack( *this, iContainer );
}
delete iContainer;
if(m_pBufRecord)
delete m_pBufRecord;
}
// ---------------------------------------------------------
// TUid CImChatRecordView::Id()
//
// ---------------------------------------------------------
//
TUid CImChatRecordView::Id() const
{
return KImChatRecordViewId;
}
// ---------------------------------------------------------
// CImChatRecordView::HandleCommandL(TInt aCommand)
// takes care of view command handling
// ---------------------------------------------------------
//
void CImChatRecordView::HandleCommandL(TInt aCommand)
{
switch ( aCommand )
{
case EImCmdSendMessage:
{
TBuf<256> buf;
buf.Copy(_L("self: "));
iContainer->GetInputBoxText(buf);
this->SendImMessage(this->m_bufFriendAcc,buf);
TBuf<300> bufRecord;
bufRecord.Copy(_L("self: "));
bufRecord.Append(buf);
iContainer->AddChatRecord(bufRecord);
}
break;
case EAknSoftkeyOk:
{
iEikonEnv->InfoMsg( _L("view1 ok") );
break;
}
case EAknSoftkeyBack:
{
AppUi()->ActivateLocalViewL(KImFriendListViewId);
//AppUi()->HandleCommandL(EEikCmdExit);
break;
}
default:
{
//AppUi()->HandleCommandL( aCommand );
break;
}
}
}
// ---------------------------------------------------------
// CImChatRecordView::HandleClientRectChange()
// ---------------------------------------------------------
//
void CImChatRecordView::HandleClientRectChange()
{
if ( iContainer )
{
iContainer->SetRect( ClientRect() );
}
}
// ---------------------------------------------------------
// CImChatRecordView::DoActivateL(...)
//
// ---------------------------------------------------------
//
void CImChatRecordView::DoActivateL(
const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
const TDesC8& /*aCustomMessage*/)
{
if (!iContainer)
{
iContainer = new (ELeave) CImChatRecordContainer(this);
iContainer->SetMopParent(this);
iContainer->ConstructL( ClientRect() );
AppUi()->AddToStackL( *this, iContainer );
if(m_pBufRecord)
{
iContainer->AddChatRecord(*m_pBufRecord);
delete m_pBufRecord;
m_pBufRecord=NULL;
}
}
}
// ---------------------------------------------------------
// CImChatRecordView::DoDeactivate()
//
// ---------------------------------------------------------
//
void CImChatRecordView::DoDeactivate()
{
if ( iContainer )
{
AppUi()->RemoveFromViewStack( *this, iContainer );
}
delete iContainer;
iContainer = NULL;
}
void CImChatRecordView::SendImMessage(const TDesC& desFriendAcc,
const TDesC& desContent)
{
CSocketsAppUi* pAppUi=(CSocketsAppUi*)AppUi();
TBuf8<10> bufMyAcc;
bufMyAcc.Copy(pAppUi->m_bufMyAcc);
TBuf8<10> bufDestAcc;
bufDestAcc.Copy(desFriendAcc);
//--------------------------------------------
//构建请求消息
CImMsg* pImMsg=CImMsg::NewLC();
pImMsg->m_nCommandID=ImSendMessageReq;
pImMsg->m_nSeqNo=1;
memcpy(pImMsg->m_strSrcUser,bufMyAcc.Ptr(),bufMyAcc.Length());
memcpy(pImMsg->m_strDstUser,bufDestAcc.Ptr(),bufDestAcc.Length());
//构建消息体
CImSendNotifyMessageBody* pBody=new CImSendNotifyMessageBody;
pImMsg->m_pBody=pBody;
pBody->m_nContentLen=desContent.Length()*2;
pBody->m_pContent=new TUint8[pBody->m_nContentLen];
int nLen=desContent.Size();
TPtrC8 ptr8Content((TUint8*)desContent.Ptr(),pBody->m_nContentLen);
memcpy(pBody->m_pContent,ptr8Content.Ptr(),pBody->m_nContentLen);
//发送消息
pAppUi->SendImMessage(pImMsg);
CleanupStack::PopAndDestroy(1);
}
void CImChatRecordView::HandleImMessageNotify(CImMsgBody* pMsgBody)
{
CImSendNotifyMessageBody* pBody=(CImSendNotifyMessageBody*)pMsgBody;
int nContentLen=pBody->m_nContentLen;
TUint8* pContent=pBody->m_pContent;
HBufC* pBuf=HBufC::NewLC(nContentLen/2);
TPtr8 ptr8((TUint8*)pBuf->Ptr(),nContentLen);
memcpy((void*)ptr8.Ptr(),(void*)pContent,nContentLen);
pBuf->Des().SetLength(nContentLen/2);
HBufC* pBufRecord=HBufC::NewLC(nContentLen/2+15);
pBufRecord->Des().AppendFormat(_L("%S: %S"),&m_bufFriendAcc,pBuf);
if(iContainer)
{
iContainer->AddChatRecord(*pBufRecord);
CleanupStack::PopAndDestroy(1);
}
else
{
CleanupStack::Pop(1);
m_pBufRecord=pBufRecord;
}
}
// End of File
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?