Trích dẫn Gửi bởi radise [Only registered and activated users can see links. ]
UiMsgCentrePad.cpp
Code:
Tại hàm

void KUiMsgCentrePad::ShowMSNMessage
tìm và thêm
	m_ChatRoom.GetMessageListBox()->AddOneMessage(Buffer, nOffset, uBKColor.Color_dw);
	m_ChatRoom.GetScrollBar()->SetScrollPos(m_ChatRoom.GetScrollBar()->GetMaxValue());
	m_Mat.GetMessageListBox()->AddOneMessage(Buffer, nOffset, uBKColor.Color_dw);
	m_Mat.GetScrollBar()->SetScrollPos(m_Mat.GetScrollBar()->GetMaxValue());
Tại hàm

int KUiMsgCentrePad::NewChannelMessageArrival
tìm và thêm
		else if (nChannelIndex == 1)	// 1 là index của kênh mật
		{
			m_pSelf->ChannelMessageArrival(nChannelIndex, szSendName, pMsgBuff, nMsgLength, m_pSelf->m_Mat.GetMessageListBox(), true);
			m_pSelf->m_Mat.GetScrollBar()->SetScrollPos(
				m_pSelf->m_Mat.GetScrollBar()->GetMaxValue());		
		}

tại hàm
void KUiMsgCentrePad::Initialize()
thêm
AddChild(&m_Mat);
Tại hàm
void KUiMsgCentrePad::Breathe()
tìm và thêm
		m_ChatRoom.GetMessageListBox ()->HideNextLine();
		m_Mat.GetMessageListBox ()->HideNextLine();
Tại hàm
void KUiMsgCentrePad::HideAllMessage()
Tìm và thêm
		m_pSelf->m_ChatRoom.GetMessageListBox()->HideAllLine();
		m_pSelf->m_Mat.GetMessageListBox()->HideAllLine();
Tại hàm
void KUiMsgCentrePad::ShowAllMessage()
Tìm và thêm
		m_pSelf->m_ChatRoom.GetMessageListBox()->ClearHideLine();
		m_pSelf->m_Mat.GetMessageListBox()->ClearHideLine();
Tại hàm
void KUiMsgCentrePad::LoadScheme(KIniFile* pIni)
Tìm và thêm
	m_ChatRoom.Init(pIni, "ChatRoom");
	m_Mat.Init(pIni, "ChatRoom");
Tại hàm
int	KUiMsgCentrePad::PtInWindow(int x, int y)
Tìm Và thêm
				m_ChatRoom.PtInWindow(x, y) ||
				m_Mat.PtInWindow(x, y) ||
tại case WND_N_BUTTON_CLICK:
thêm
		else if (uParam == (unsigned int)(KWndWindow*)&m_TabButton[0])
		{
			m_TabButton[0].CheckButton(true);
			m_ChatRoom.SetPosition(15,-2);
			m_TabButton[1].CheckButton(false);
			m_Mat.SetPosition(-300,0);
			m_TabButton[2].CheckButton(false);
			m_Phong.SetPosition(-300,0);
			m_TabButton[3].CheckButton(false);
			m_Bang.SetPosition(-300,0);
			m_TabButton[4].CheckButton(false);
			m_Phai.SetPosition(-300,0);
			m_TabButton[5].CheckButton(false);
			m_Khac.SetPosition(-300,0);
		}
		else if (uParam == (unsigned int)(KWndWindow*)&m_TabButton[1])
		{
			m_TabButton[0].CheckButton(false);
			m_ChatRoom.SetPosition(-300,0);
			m_TabButton[1].CheckButton(true);
			m_Mat.SetPosition(15,-2);
			m_TabButton[2].CheckButton(false);
			m_Phong.SetPosition(-300,0);
			m_TabButton[3].CheckButton(false);
			m_Bang.SetPosition(-300,0);
			m_TabButton[4].CheckButton(false);
			m_Phai.SetPosition(-300,0);
			m_TabButton[5].CheckButton(false);
			m_Khac.SetPosition(-300,0);
		}
		else if (uParam == (unsigned int)(KWndWindow*)&m_TabButton[2])
		{
			m_TabButton[0].CheckButton(false);
			m_ChatRoom.SetPosition(-300,0);
			m_TabButton[1].CheckButton(false);
			m_Mat.SetPosition(-300,0);
			m_TabButton[2].CheckButton(true);
			m_Phong.SetPosition(15,-2);
			m_TabButton[3].CheckButton(false);
			m_Bang.SetPosition(-300,0);
			m_TabButton[4].CheckButton(false);
			m_Phai.SetPosition(-300,0);
			m_TabButton[5].CheckButton(false);
			m_Khac.SetPosition(-300,0);
		}
		else if (uParam == (unsigned int)(KWndWindow*)&m_TabButton[3])
		{
			m_TabButton[0].CheckButton(false);
			m_ChatRoom.SetPosition(-300,0);
			m_TabButton[1].CheckButton(false);
			m_Mat.SetPosition(-300,0);
			m_TabButton[2].CheckButton(false);
			m_Phong.SetPosition(-300,0);
			m_TabButton[3].CheckButton(true);
			m_Bang.SetPosition(15,-2);
			m_TabButton[4].CheckButton(false);
			m_Phai.SetPosition(-300,0);
			m_TabButton[5].CheckButton(false);
			m_Khac.SetPosition(-300,0);
		}
		else if (uParam == (unsigned int)(KWndWindow*)&m_TabButton[4])
		{
			m_TabButton[0].CheckButton(false);
			m_ChatRoom.SetPosition(-300,0);
			m_TabButton[1].CheckButton(false);
			m_Mat.SetPosition(-300,0);
			m_TabButton[2].CheckButton(false);
			m_Phong.SetPosition(-300,0);
			m_TabButton[3].CheckButton(false);
			m_Bang.SetPosition(-300,0);
			m_TabButton[4].CheckButton(true);
			m_Phai.SetPosition(15,-2);
			m_TabButton[5].CheckButton(false);
			m_Khac.SetPosition(-300,0);
		}
		else if (uParam == (unsigned int)(KWndWindow*)&m_TabButton[5])
		{
			m_TabButton[0].CheckButton(false);
			m_ChatRoom.SetPosition(-300,0);
			m_TabButton[1].CheckButton(false);
			m_Mat.SetPosition(-300,0);
			m_TabButton[2].CheckButton(false);
			m_Phong.SetPosition(-300,0);
			m_TabButton[3].CheckButton(false);
			m_Bang.SetPosition(-300,0);
			m_TabButton[4].CheckButton(false);
			m_Phai.SetPosition(-300,0);
			m_TabButton[5].CheckButton(true);
			m_Khac.SetPosition(15,-2);
		}
Tại hàm
int	KUiMsgCentrePad::GetMessageSendName(KWndWindow* pWnd, int nIndex, char* szCurText)
Tìm và thêm
	if (pWnd == (KWndWindow*)&m_ChatRoom)
	{
		nLen = m_ChatRoom.GetMessageListBox()->GetOneMessage(nIndex, szCurText, 256, TRUE);
	}

	else if (pWnd == (KWndWindow*)&m_Mat)
	{
		nLen = m_Mat.GetMessageListBox()->GetOneMessage(nIndex, szCurText, 256, TRUE);
	}
Tại hàm
int	KUiMsgCentrePad::GetMessageSendName(KWndWindow* pWnd, int x, int y, char* szCurText)
Thêm
	if (pWnd == (KWndWindow*)&m_ChatRoom)
	{
		nIndex = m_ChatRoom.GetMessageListBox()->HitTextAtPoint(x, y);
	}

	else if (pWnd == (KWndWindow*)&m_Mat)
	{
		nIndex = m_Mat.GetMessageListBox()->HitTextAtPoint(x, y);
	}
Tại hàm
void KUiMsgCentrePad::PaintWindow()
tìm và thêm
		m_ChatRoom.GetMessageListBox()->GetAbsolutePos(&bg.oPosition.nX, &bg.oPosition.nY);
		m_Mat.GetMessageListBox()->GetAbsolutePos(&bg.oPosition.nX, &bg.oPosition.nY);

		m_ChatRoom.GetMessageListBox()->GetSize(&bg.oEndPos.nX, &bg.oEndPos.nY);
		m_Mat.GetMessageListBox()->GetSize(&bg.oEndPos.nX, &bg.oEndPos.nY);
Tại hàm
int KUiMsgCentrePad::ChanageHeight(int nOffsetY, bool bAtTop)
tìm và thêm
		nOffsetY = m_ChatRoom.HeightToLineHeight(-nOffsetY);
		nOffsetY = m_Mat.HeightToLineHeight(-nOffsetY);

		nOffsetY = m_ChatRoom.HeightToLineHeight(nOffsetY);
		nOffsetY = m_Mat.HeightToLineHeight(nOffsetY);
Tại Hàm
int KUiMsgCentrePad::ChanageHeight(int nOffsetY, bool bAtTop)
tìm và thêm
		if (y + nOffsetY >= m_ChatRoom.GetMinHeight())
		{
			if (bAtTop)
			{
				if (m_Top - nOffsetY < m_nMinTopPos)
					SetPosition(m_Left, m_nMinTopPos);
				else
					SetPosition(m_Left, m_Top - nOffsetY);
			}
			if (m_Top + y + nOffsetY > m_nMaxBottomPos)
				nOffsetY = m_nMaxBottomPos - m_Top - y;

			SetSize(x, y + nOffsetY);
		}
		else if (y + nOffsetY >= m_Mat.GetMinHeight())
		{
			if (bAtTop)
			{
				if (m_Top - nOffsetY < m_nMinTopPos)
					SetPosition(m_Left, m_nMinTopPos);
				else
					SetPosition(m_Left, m_Top - nOffsetY);
			}
			if (m_Top + y + nOffsetY > m_nMaxBottomPos)
				nOffsetY = m_nMaxBottomPos - m_Top - y;

			SetSize(x, y + nOffsetY);
		}
Tại hàm
void KUiMsgCentrePad::Clear()
Tìm và thêm
		m_pSelf->m_ChatRoom.GetMessageListBox()->Clear();
		m_pSelf->m_Mat.GetMessageListBox()->Clear();
Tại hàm
void KUiMsgCentrePad::SetFontSize(int nFontSize)
Tìm và thêm
		m_pSelf->m_ChatRoom.GetMessageListBox()->SetFontSize(nFontSize);
		m_pSelf->m_Mat.GetMessageListBox()->SetFontSize(nFontSize);

Tại hàm
int KUiMsgCentrePad::GetFontSize()
tìm và thêm
		m_pSelf->m_ChatRoom.GetMessageListBox()->GetFontSize();
		m_pSelf->m_Mat.GetMessageListBox()->GetFontSize();
các kênh còn lại ae tự làm tiếp
Thanks Bro đã hướng dẫn em đã làm đc video demo