⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlchatframe.cpp

📁 p2p软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void CChatFrame::InsertText(LPCTSTR pszToken)
{
	int nStart, nEnd;
	m_wndEdit.GetSel( nStart, nEnd );
	
	if ( nStart == nEnd )
	{
		m_wndEdit.ReplaceSel( pszToken );
	}
	else
	{
		CString strIn, strOut;
		m_wndEdit.GetWindowText( strIn );
		if ( nEnd < nStart ) m_wndEdit.GetSel( nEnd, nStart );
		strOut.Format( _T("%s%s[/%c]"), pszToken,
			(LPCTSTR)strIn.Mid( nStart, nEnd - nStart ), pszToken[1] );
		m_wndEdit.ReplaceSel( strOut );
	}
	
	m_wndEdit.SetFocus();
}

/////////////////////////////////////////////////////////////////////////////
// CChatFrame text view controller

void CChatFrame::AddText(LPCTSTR pszText)
{
	m_pContent.Add( retText, pszText );
	m_pContent.Add( retNewline, NEWLINE_FORMAT );
	m_wndView.InvalidateIfModified();
}

void CChatFrame::AddText(BOOL bSelf, BOOL bAction, LPCTSTR pszNick, LPCTSTR pszBody)
{
	CString str;
	
	if ( Settings.Community.Timestamp )
	{
		CTime tNow = CTime::GetCurrentTime();

		str.Format( _T("[%.2i:%.2i] "),
			tNow.GetHour(), tNow.GetMinute() );
		m_pContent.Add( retText, str, NULL, retfColour )->m_cColour = RGB( 128, 128, 128 );
	}
	
	str.Format( bAction ? _T("* %s ") : _T("%s: "), pszNick );
	m_pContent.Add( retText, str, NULL, retfBold | retfColour )->m_cColour
		= ( bSelf ? RGB( 255, 0, 0 ) : RGB( 0, 0, 255 ) );
	
	Emoticons.FormatText( &m_pContent, pszBody );
	
	m_pContent.Add( retNewline, NEWLINE_FORMAT );
	m_wndView.InvalidateIfModified();
}

/////////////////////////////////////////////////////////////////////////////
// CChatFrame event handlers

void CChatFrame::OnStatusMessage(int nFlags, LPCTSTR pszText)
{
	m_pContent.Add( retText, pszText, NULL, retfColour )->m_cColour
		= nFlags == 1 ? RGB( 255, 0, 0 ) : RGB( 128, 128, 128 );
	m_pContent.Add( retNewline, NEWLINE_FORMAT );
	m_wndView.InvalidateIfModified();
}

void CChatFrame::OnLocalText(LPCTSTR pszText)
{
	if ( pszText == NULL || *pszText == 0 ) return;
	
	if ( *pszText == '/' )
	{
		CString strCommand = CString( pszText ).SpanExcluding( _T(" \t") );
		strCommand.MakeLower();
		
		if ( strCommand == _T("/me") )
		{
			OnLocalMessage( TRUE, pszText + 4 );
		}
		else
		{
			OnLocalCommand( strCommand, pszText + strCommand.GetLength() + 1 );
		}
	}
	else
	{
		OnLocalMessage( FALSE, pszText );
	}
}

void CChatFrame::OnLocalMessage(BOOL bAction, LPCTSTR pszText)
{
}

void CChatFrame::OnLocalCommand(LPCTSTR pszCommand, LPCTSTR pszMessage)
{
	if ( _tcscmp( pszCommand, _T("/clear") ) == 0 )
	{
		PostMessage( WM_COMMAND, ID_CHAT_CLEAR );
	}
	else if ( _tcscmp( pszCommand, _T("/connect") ) == 0 )
	{
		PostMessage( WM_COMMAND, ID_CHAT_CONNECT );
	}
	else if ( _tcscmp( pszCommand, _T("/disconnect") ) == 0 )
	{
		PostMessage( WM_COMMAND, ID_CHAT_DISCONNECT );
	}
	else if ( _tcscmp( pszCommand, _T("/close") ) == 0 )
	{
		GetParent()->PostMessage( WM_CLOSE );
	}
	else if ( _tcscmp( pszCommand, _T("/exit") ) == 0 )
	{
		GetParent()->PostMessage( WM_CLOSE );
	}
}

/////////////////////////////////////////////////////////////////////////////
// CChatFrame command handlers

void CChatFrame::OnUpdateChatBold(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( IsInRange( _T("b") ) );
}

void CChatFrame::OnChatBold() 
{
	if ( IsInRange( _T("b") ) )
		InsertText( _T("[/b]") );
	else
		InsertText( _T("[b]") );
}

void CChatFrame::OnUpdateChatItalic(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( IsInRange( _T("i") ) );
}

void CChatFrame::OnChatItalic() 
{
	if ( IsInRange( _T("i") ) )
		InsertText( _T("[/i]") );
	else
		InsertText( _T("[i]") );
}

void CChatFrame::OnUpdateChatUnderline(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( IsInRange( _T("u") ) );
}

void CChatFrame::OnChatUnderline() 
{
	if ( IsInRange( _T("u") ) )
		InsertText( _T("[/u]") );
	else
		InsertText( _T("[u]") );
}

void CChatFrame::OnChatColour() 
{
	CColorDialog dlg( 0, CC_ANYCOLOR | CC_FULLOPEN );
	if ( dlg.DoModal() != IDOK ) return;
	
	COLORREF cr = dlg.GetColor();
	CString str;
	
	str.Format( _T("[c:#%.2x%.2x%.2x]"), GetRValue( cr ), GetGValue( cr ), GetBValue( cr ) );
	InsertText( str );
}

void CChatFrame::OnChatEmoticons() 
{
	m_pIconMenu = Emoticons.CreateMenu();
	
	UINT nID = m_wndToolBar.ThrowMenu( ID_CHAT_EMOTICONS, m_pIconMenu, this, TRUE );
	
	delete m_pIconMenu;
	m_pIconMenu = NULL;
	
	if ( nID == 0 ) return;
	
	LPCTSTR pszToken = Emoticons.GetText( nID - 1 );
	if ( pszToken != NULL ) InsertText( pszToken );
}

void CChatFrame::OnChatClear() 
{
	m_pContent.Clear();
	m_wndView.InvalidateIfModified();
}

void CChatFrame::OnUpdateChatTimestamp(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( Settings.Community.Timestamp );
}

void CChatFrame::OnChatTimestamp() 
{
	Settings.Community.Timestamp = ! Settings.Community.Timestamp;
}

void CChatFrame::OnUpdateChatConnect(CCmdUI* pCmdUI) 
{
	BOOL bState = m_pSession != NULL && m_pSession->GetConnectedState() == TS_FALSE;
	if ( CCoolBarItem* pItem = CCoolBarItem::FromCmdUI( pCmdUI ) ) pItem->Show( bState );
	pCmdUI->Enable( bState );
}

void CChatFrame::OnChatConnect() 
{
	if ( m_pSession != NULL && m_pSession->GetConnectedState() == TS_FALSE )
	{
		CWnd* pParent = GetParent();
		if ( pParent->IsIconic() ) pParent->ShowWindow( SW_SHOWNORMAL );
		pParent->BringWindowToTop();
		pParent->SetForegroundWindow();
		m_pSession->Connect();
	}
}

void CChatFrame::OnUpdateChatDisconnect(CCmdUI* pCmdUI) 
{
	BOOL bState = m_pSession != NULL && m_pSession->GetConnectedState() != TS_FALSE;
	if ( CCoolBarItem* pItem = CCoolBarItem::FromCmdUI( pCmdUI ) ) pItem->Show( bState );
	pCmdUI->Enable( bState );
}

void CChatFrame::OnChatDisconnect() 
{
	if ( m_pSession != NULL ) m_pSession->Close();
}

/////////////////////////////////////////////////////////////////////////////
// CChatFrame message handlers

void CChatFrame::OnTimer(UINT nIDEvent) 
{
	if ( nIDEvent == 1 )
	{
		if ( m_pChildWnd != NULL ) m_pChildWnd->SetAlert();
		// if ( m_pDesktopWnd != NULL ) m_pDesktopWnd->SetAlert();
	}
	else if ( nIDEvent == 4 )
	{
		if ( GetForegroundWindow() != GetTopLevelParent() )
		{
			CWnd* pParentWnd = GetTopLevelParent();
			
			if ( HINSTANCE hUser = LoadLibrary( _T("User32") ) )
			{
				BOOL (WINAPI *pfnFlashWindowEx)(PFLASHWINFO pfwi);
				
				if ( (FARPROC&)pfnFlashWindowEx = GetProcAddress( hUser, "FlashWindowEx" ) )
				{
					FLASHWINFO pFWX;
					
					pFWX.cbSize		= sizeof(pFWX);
					pFWX.dwFlags	= FLASHW_ALL | FLASHW_TIMERNOFG;
					pFWX.uCount		= 3;
					pFWX.dwTimeout	= 0;
					pFWX.hwnd		= pParentWnd->GetSafeHwnd();
					
					(*pfnFlashWindowEx)( &pFWX );
				}
				
				FreeLibrary( hUser );
			}
		}
	}
}

void CChatFrame::OnSetFocus(CWnd* pOldWnd) 
{
	CWnd::OnSetFocus( pOldWnd );
	m_wndEdit.SetFocus();
}

void CChatFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	lpMeasureItemStruct->itemWidth	= 20;
	lpMeasureItemStruct->itemHeight	= 22;
}

void CChatFrame::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	CDC* pDC = CDC::FromHandle( lpDrawItemStruct->hDC );
	CRect rc( &lpDrawItemStruct->rcItem );
	
	Emoticons.Draw( pDC, lpDrawItemStruct->itemID - 1, rc.left + 8, rc.top + 3 );
	
	if ( lpDrawItemStruct->itemState & ODS_SELECTED )
	{
		pDC->Draw3dRect( &rc, CoolInterface.m_crHighlight, CoolInterface.m_crHighlight );
		rc.DeflateRect( 1, 1 );
		pDC->Draw3dRect( &rc, CoolInterface.m_crHighlight, CoolInterface.m_crHighlight );
	}
	else
	{
		pDC->Draw3dRect( &rc, CoolInterface.m_crWindow, CoolInterface.m_crWindow );
		rc.DeflateRect( 1, 1 );
		pDC->Draw3dRect( &rc, CoolInterface.m_crWindow, CoolInterface.m_crWindow );
	}
}

void CChatFrame::OnClickView(RVN_ELEMENTEVENT* pNotify, LRESULT *pResult)
{
	if ( CRichElement* pElement = pNotify->pElement )
	{
		theApp.InternalURI( pElement->m_sLink );
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -