CFontsPage::CFontsPage() : CPropertyPage(CFontsPage::IDD) { //{{AFX_DATA_INIT(CFontsPage) //}}AFX_DATA_INIT CRichEditCtrl tmp; tmp.Create(WS_CHILD,CRect(0,0,0,0),AfxGetApp()->m_pMainWnd,0); memset(&m_fmtChar,0,sizeof(m_fmtChar)); m_fmtLast=NULL; }
void MessagesDlg::AddMessage(MessagesContact* messagesContact, CString message, int type, BOOL blockForeground) { CTime tm = CTime::GetCurrentTime(); if (type == MSIP_MESSAGE_TYPE_SYSTEM) { if ( messagesContact->lastSystemMessage == message && messagesContact->lastSystemMessageTime > tm.GetTime()-2) { messagesContact->lastSystemMessageTime = tm; return; } messagesContact->lastSystemMessage = message; messagesContact->lastSystemMessageTime = tm; } else if (!messagesContact->lastSystemMessage.IsEmpty()) { messagesContact->lastSystemMessage = _T(""); } if (IsWindowVisible() && !blockForeground) { SetForegroundWindow(); } CRichEditCtrl richEdit; MessagesContact* messagesContactSelected = GetMessageContact(); CRichEditCtrl *richEditList = (CRichEditCtrl *)GetDlgItem(IDC_LIST); if (messagesContactSelected != messagesContact) { CRect rect; rect.left = 0; rect.top = 0; rect.right = 300; rect.bottom = 300; richEdit.Create(ES_MULTILINE | ES_READONLY | ES_NUMBER | WS_VSCROLL, rect, this, NULL); richEdit.SetFont(&fontList); richEdit.SetParaFormat(para); CString messages = messagesContact->messages; EDITSTREAM es; es.dwCookie = (DWORD) &messages; es.pfnCallback = MEditStreamInCallback; richEdit.StreamIn(SF_RTF, es); richEditList = &richEdit; } COLORREF color; CString name; if (type==MSIP_MESSAGE_TYPE_LOCAL) { color = RGB (0,0,0); if (!accountSettings.account.displayName.IsEmpty()) { name = accountSettings.account.displayName; } } else if (type==MSIP_MESSAGE_TYPE_REMOTE) { color = RGB (21,101,206); name = messagesContact->name; int pos = name.Find(_T(" (")); if (pos==-1) { pos = name.Find(_T("@")); } if (pos!=-1) { name = name.Mid(0,pos); } } int nBegin; CHARFORMAT cf; CString str; CString time = tm.Format(_T("%X")); nBegin = richEditList->GetTextLengthEx(GTL_NUMCHARS); richEditList->SetSel(nBegin, nBegin); str.Format(_T("[%s] "),time); richEditList->ReplaceSel( str ); cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_SIZE; cf.crTextColor = RGB (131,131,131); cf.dwEffects = 0; cf.yHeight = 160; richEditList->SetSel(nBegin,-1); richEditList->SetSelectionCharFormat(cf); if (type != MSIP_MESSAGE_TYPE_SYSTEM) { cf.yHeight = 200; } if (name.GetLength()) { nBegin = richEditList->GetTextLengthEx(GTL_NUMCHARS); richEditList->SetSel(nBegin, nBegin); richEditList->ReplaceSel( name + _T(": ")); cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_SIZE; cf.crTextColor = color; cf.dwEffects = CFE_BOLD; richEditList->SetSel(nBegin,-1); richEditList->SetSelectionCharFormat(cf); } nBegin = richEditList->GetTextLengthEx(GTL_NUMCHARS); richEditList->SetSel(nBegin, nBegin); richEditList->ReplaceSel(message+_T("\r\n")); cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_SIZE; cf.crTextColor = type == MSIP_MESSAGE_TYPE_SYSTEM ? RGB (131, 131, 131) : color; cf.dwEffects = 0; richEditList->SetSel(nBegin,-1); richEditList->SetSelectionCharFormat(cf); if (messagesContactSelected == messagesContact) { richEditList->PostMessage(WM_VSCROLL, SB_BOTTOM, 0); } else { for (int i = 0; i < tab->GetItemCount(); i++) { if (messagesContact == GetMessageContact(i)) { tab->HighlightItem(i, TRUE); break; } } } str=_T(""); EDITSTREAM es; es.dwCookie = (DWORD) &str; es.pfnCallback = MEditStreamOutCallback; richEditList->StreamOut(SF_RTF, es); messagesContact->messages=str; }
// id 0 is the basestream void CInputDocView::addPanel(CResultStream* pStream, int id) { CRect r;//(0,0, 100, 100); GetClientRect(&r); r.top = 25; r.right -= 5; r.bottom -= 5; CRichEditCtrl* pEC = new CRichEditCtrl;//CPanelRichEditCtrl;// // CEdit* pEC = new CEdit; m_pEditCtrls.Add(pEC); DWORD dwFlags = ECO_SAVESEL | ES_AUTOVSCROLL | ES_MULTILINE | ES_NOHIDESEL | WS_BORDER | WS_VSCROLL | WS_CHILD | WS_VISIBLE | ES_WANTRETURN; #ifndef jdhhab621 // a hack to get a scrollbar for pc-patr. This could be generalized or put in the user's // control, but not without work that seems unjustified if it's just for pcpatr. if (pStream->getDescriptor()->getTabLabel().Find("PATR") != -1) dwFlags |= WS_HSCROLL | ES_AUTOHSCROLL; #endif // jdhhab261 pEC->Create(dwFlags, (RECT&)r, &m_tabCtrl, id); CFont* test = pStream->getFont(); pEC->SetFont(test); // NOTE: I'm not clear on whether StreamIn is done with the stream when it returns; // it doesn't seem to delete it, but you'd think it would need // to keep it around so it can get at large files when the user // scrolls down; maybe not. Why it matters is, what if the cwCOOKIE // member points to a CResultsStream that I've deleted? // For now, I'm going to go on the assumption that the whole // file is read right here. pEC->StreamIn(SF_TEXT, pStream->getEditStreamIn()); // icon may be set in here // Set editing flags and limit CInputDoc* pDoc = (CInputDoc*) GetDocument(); if(id==kBasePanelID && pDoc->m_bBaseIsEditable) { pEC->SetReadOnly(FALSE); const long kMaxAddableChars = 2000; long l = pEC->GetTextLength() + kMaxAddableChars; pEC->LimitText(l); pEC->SetEventMask( ENM_KEYEVENTS| ENM_CHANGE );// want to know when the user changes something } else pEC->SetReadOnly(TRUE); /* ALL THIS WAS FOR CEDIT, NOT CRICHEDIT EDITSTREAM es = pStream->getEditStreamIn(); long sz = pEC->GetLimitText()-10; char* buff = new char [sz+1]; ASSERTX(buff); long actual; (es.pfnCallback)((DWORD)(pStream), (unsigned char*)buff, sz, &actual); buff[actual] = '\0'; CString sOverflowMsg = pStream->getOverflowMsg(); if(actual > sz - sOverflowMsg.GetLength()) { buff[sz-sOverflowMsg.GetLength()] = '\0'; CString s = buff; s += sOverflowMsg; pEC->SetWindowText(s); } else pEC->SetWindowText(buff); // make it close (es.pfnCallback)((DWORD)(pStream), (unsigned char*)buff, 0, &actual); delete buff; */ // make the tab for this item TC_ITEM tie; tie.mask = TCIF_TEXT |TCIF_PARAM ; tie.lParam = (LPARAM)pStream; tie.pszText = (char*) LPCTSTR(pStream->getDescriptor()->getTabLabel()); int iconEnum = pStream->getTabIconEnum(); if(iconEnum>=0) { tie.mask |= TCIF_IMAGE; tie.iImage = iconEnum; } if (-1 == m_tabCtrl.InsertItem(99, &tie )) { ASSERTX(FALSE); } else { //CToolTipCtrl* pTip = new CToolTipCtrl; //pTip->Create(this); // <--- or should it be the tab bar? //pTip-> CToolTipCtrl* pTip = m_tabCtrl.GetToolTips(); ASSERT(pTip); CRect r; m_tabCtrl.GetItemRect(m_tabCtrl.GetItemCount()-1, &r); CString s; s.Format("%s", pStream->getToolTipText()); pTip->AddTool(&m_tabCtrl, s, &r, id); } }