void CChatSelector::OnSize(UINT nType, int cx, int cy) { CClosableTabCtrl::OnSize(nType, cx, cy); CRect rect; GetClientRect(&rect); AdjustRect(FALSE, rect); CRect rClose; ::GetWindowRect(m_hwndCloseBtn, &rClose); ::SetWindowPos(m_hwndCloseBtn, NULL, rect.right-7-rClose.Width(), rect.bottom-7-rClose.Height(), rClose.Width(), rClose.Height(), SWP_NOZORDER); CRect rSend; ::GetWindowRect(m_hwndSendBtn, &rSend); ::SetWindowPos(m_hwndSendBtn, NULL, rect.right-7-rClose.Width()-7-rSend.Width(), rect.bottom-7-rSend.Height(), rSend.Width(), rSend.Height(), SWP_NOZORDER); CRect rMessage; ::GetWindowRect(m_hwndMessageBox, &rMessage); ::SetWindowPos(m_hwndMessageBox, NULL, rect.left+7, rect.bottom-9-rMessage.Height(), rect.right-7-rClose.Width()-7-rSend.Width()-21, rMessage.Height(), SWP_NOZORDER); CRect rcChat; GetChatSize(rcChat); TCITEM item; item.mask = TCIF_PARAM; int i = 0; while (GetItem(i++, &item)){ CChatItem* ci = (CChatItem*)item.lParam; ci->log->SetWindowPos(NULL, rcChat.left, rcChat.top, rcChat.Width(), rcChat.Height(), SWP_NOZORDER); } }
CChatItem* CChatSelector::StartSession(CUpDownClient* client, bool show) { ::SetFocus(m_hwndMessageBox); if (GetTabByClient(client) != 0xFFFF){ if (show){ SetCurSel(GetTabByClient(client)); ShowChat(); } return NULL; } CChatItem* chatitem = new CChatItem(); chatitem->client = client; chatitem->log = new CHTRichEditCtrl; CRect rcChat; GetChatSize(rcChat); if (GetItemCount() == 0) rcChat.top += 20; chatitem->log->Create(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL | ES_MULTILINE | ES_READONLY, rcChat, this, (UINT)-1); chatitem->log->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); chatitem->log->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); chatitem->log->SetEventMask(chatitem->log->GetEventMask() | ENM_LINK); chatitem->log->SetFont(&theApp.m_fontHyperText); chatitem->log->SetProfileSkinKey(_T("Chat")); chatitem->log->ApplySkin(); CTime theTime = CTime::GetCurrentTime(); CString sessions = GetResString(IDS_CHAT_START) + client->GetUserName() + CString(_T(" - ")) + theTime.Format(_T("%c")) + _T("\n"); chatitem->log->AppendKeyWord(sessions, RGB(255,0,0)); client->SetChatState(MS_CHATTING); CString name; if (client->GetUserName() != NULL) name = client->GetUserName(); else name.Format(_T("(%s)"), GetResString(IDS_UNKNOWN)); chatitem->log->SetTitle(name); TCITEM newitem; newitem.mask = TCIF_PARAM | TCIF_TEXT | TCIF_IMAGE; newitem.lParam = (LPARAM)chatitem; newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; int iItemNr = InsertItem(GetItemCount(), &newitem); if (show || IsWindowVisible()){ SetCurSel(iItemNr); ShowChat(); } return chatitem; }
void CChatSelector::OnSize(UINT nType, int cx, int cy) { CClosableTabCtrl::OnSize(nType, cx, cy); CRect rcChat; GetChatSize(rcChat); TCITEM item; item.mask = TCIF_PARAM; int i = 0; while (GetItem(i++, &item)){ CChatItem* ci = (CChatItem*)item.lParam; ci->log->SetWindowPos(NULL, rcChat.left, rcChat.top, rcChat.Width(), rcChat.Height(), SWP_NOZORDER); } }
CChatItem* CChatSelector::StartSession(CUpDownClient* client, bool show) { if (show) m_pParent->m_wndMessage.SetFocus(); if (GetTabByClient(client) != -1){ if (show){ SetCurSel(GetTabByClient(client)); ShowChat(); } return NULL; } CChatItem* chatitem = new CChatItem(); chatitem->client = client; chatitem->log = new CHTRichEditCtrl; CRect rcChat; GetChatSize(rcChat); if (GetItemCount() == 0) rcChat.top += 19; // add the height of the tab which is not yet there // using ES_NOHIDESEL is actually not needed, but it helps to get around a tricky window update problem! // If that style is not specified there are troubles with right clicking into the control for the very first time!? chatitem->log->Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VSCROLL | ES_MULTILINE | ES_READONLY | ES_NOHIDESEL, rcChat, this, (UINT)-1); chatitem->log->ModifyStyleEx(0, WS_EX_STATICEDGE, SWP_FRAMECHANGED); chatitem->log->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(3, 3)); chatitem->log->SetEventMask(chatitem->log->GetEventMask() | ENM_LINK); chatitem->log->SetFont(&theApp.m_fontHyperText); chatitem->log->SetProfileSkinKey(_T("Chat")); chatitem->log->ApplySkin(); chatitem->log->EnableSmileys(thePrefs.GetMessageEnableSmileys()); PARAFORMAT pf = {0}; pf.cbSize = sizeof pf; pf.dwMask = PFM_OFFSET; pf.dxOffset = 150; chatitem->log->SetParaFormat(pf); if (thePrefs.GetIRCAddTimeStamp()) AddTimeStamp(chatitem); chatitem->log->AppendKeyWord(GetResString(IDS_CHAT_START) + client->GetUserName() + _T("\n"), STATUS_MSG_COLOR); client->SetChatState(MS_CHATTING); CString name; if (client->GetUserName() != NULL) name = client->GetUserName(); else name.Format(_T("(%s)"), GetResString(IDS_UNKNOWN)); chatitem->log->SetTitle(name); TCITEM newitem; newitem.mask = TCIF_PARAM | TCIF_TEXT | TCIF_IMAGE; newitem.lParam = (LPARAM)chatitem; name.Replace(_T("&"), _T("&&")); newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name); newitem.iImage = 0; int iItemNr = InsertItem(GetItemCount(), &newitem); if (show || IsWindowVisible()){ SetCurSel(iItemNr); ShowChat(); } return chatitem; }