📄 textchatviewer.cpp
字号:
SetTextFormat(false, false, 0x75, "MS Sans Serif", dwColor != GREY ? BLACK : GREY);
_snprintf(m_szTextBoxBuffer, TEXTMAXSIZE-1, "%s", szMessage);
SendDlgItemMessage(m_hDlg, IDC_CHATAREA_EDIT, EM_REPLACESEL, FALSE, (LONG)m_szTextBoxBuffer);
}
// Scroll down the chat window
// The following seems necessary under W9x & Me if we want the Edit to scroll to bottom...
SCROLLINFO si;
ZeroMemory(&si, sizeof(SCROLLINFO));
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_RANGE|SIF_PAGE;
GetScrollInfo(GetDlgItem(m_hDlg, IDC_CHATAREA_EDIT), SB_VERT, &si);
si.nPos = si.nMax - max(si.nPage - 1, 0);
SendDlgItemMessage(m_hDlg, IDC_CHATAREA_EDIT, WM_VSCROLL, MAKELONG(SB_THUMBPOSITION, si.nPos), 0L); // Scroll down the ch
// This line does the bottom scrolling correctly under NT4,W2K, XP...
// SendDlgItemMessage(m_hDlg, IDC_CHATAREA_EDIT, WM_VSCROLL, SB_BOTTOM, 0L);
}
//
// Send local text content
//
void TextChatViewer::SendLocalText(void)
{
// We keep it because we could use it
// for future retype functionality. (F3)
memcpy(m_szLastLocalText, m_szLocalText, strlen(m_szLocalText));
PrintMessage(m_szLocalText, m_szLocalName, BLUE);
rfbTextChatMsg tcm;
tcm.type = rfbTextChat;
tcm.length = Swap32IfLE(strlen(m_szLocalText));
m_pCC->WriteExact((char *)&tcm, sz_rfbTextChatMsg, rfbTextChat);
m_pCC->WriteExact((char *)m_szLocalText, strlen(m_szLocalText));
//and we clear the input box
SetDlgItemText(m_hDlg, IDC_INPUTAREA_EDIT, "");
return;
}
//
//
//
int TextChatViewer::DoDialog()
{
return DialogBoxParam(pApp->m_instance, DIALOG_MAKEINTRESOURCE(IDD_TEXTCHAT_DLG),
NULL, (DLGPROC) TextChatDlgProc, (LONG) this);
}
//
//
//
void TextChatViewer::KillDialog()
{
DestroyWindow(m_hDlg);
}
//
//
//
void TextChatViewer::ShowChatWindow(bool fVisible)
{
ShowWindow(m_hDlg, fVisible ? SW_RESTORE : SW_MINIMIZE);
SetForegroundWindow(m_hDlg);
// Put the Chat Windows always on Top if fullscreen
if (fVisible && m_pCC->InFullScreenMode())
{
RECT Rect;
GetWindowRect(m_hDlg, &Rect);
SetWindowPos(m_hDlg,
HWND_TOPMOST,
Rect.left,
Rect.top,
Rect.right - Rect.left,
Rect.bottom - Rect.top,
SWP_SHOWWINDOW);
}
m_fVisible = fVisible; // This enables screen updates to be processed in ClientConnection
// Refresh screen view if Chat window has been hidden
if (!fVisible)
m_pCC->SendAppropriateFramebufferUpdateRequest();
}
//
//
//
BOOL CALLBACK TextChatViewer::TextChatDlgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
TextChatViewer* _this = (TextChatViewer *) GetWindowLong(hWnd, GWL_USERDATA);
switch (uMsg)
{
case WM_INITDIALOG:
{
SetWindowLong(hWnd, GWL_USERDATA, lParam);
TextChatViewer *_this = (TextChatViewer *) lParam;
if (_this->m_szLocalText == NULL || _this->m_szRemoteText == NULL)
EndDialog(hWnd, FALSE);
// Window always on top if Fullscreen On
if (_this->m_pCC->InFullScreenMode())
{
RECT Rect;
GetWindowRect(hWnd, &Rect);
SetWindowPos(hWnd,
HWND_TOPMOST,
Rect.left,
Rect.top,
Rect.right - Rect.left,
Rect.bottom - Rect.top,
SWP_SHOWWINDOW);
}
// CentreWindow(hWnd);
_this->m_hDlg = hWnd;
string rname = _this->m_pCC->m_tvinfo->getPartnerInfo(tvIdentity);
if(rname == "")
{
rname = _this->m_pCC->m_tvinfo->getPartnerInfo(tvID);
if(rname == "")
rname = _this->m_pCC->m_desktopName;
}
if (_snprintf(_this->m_szRemoteName,MAXNAMESIZE-1,"%s", rname.c_str()) < 0 )
{
_this->m_szRemoteName[MAXNAMESIZE-4]='.';
_this->m_szRemoteName[MAXNAMESIZE-3]='.';
_this->m_szRemoteName[MAXNAMESIZE-2]='.';
_this->m_szRemoteName[MAXNAMESIZE-1]=0x00;
}
_this->m_RichEditType = TextChat::InstallChatArea(hWnd);
const long lTitleBufSize=256;
char szTitle[lTitleBufSize];
_snprintf(szTitle,lTitleBufSize-1," Chat <%s> - TeamViewer",
_this->m_pCC->GetRemoteIdentity().c_str());
SetWindowText(hWnd, szTitle);
// Trunc the remote name for display in Chat Area before the first parenthesis, if any.
char *p = strchr(_this->m_szRemoteName, '(');
if (p != NULL) *(p - 1) = '\0';
// Chat area
_this->SetTextFormat(); // Set character formatting and background color
SendDlgItemMessage( hWnd, IDC_CHATAREA_EDIT, EM_SETBKGNDCOLOR, FALSE, 0xFFFFFF );
memset(_this->m_szLocalText, 0, TEXTMAXSIZE);
// if (!_this->m_fPersistentTexts)
{
memset(_this->m_szLastLocalText, 0, TEXTMAXSIZE);
memset(_this->m_szTextBoxBuffer, 0, TEXTMAXSIZE); // Clear Chat area
}
SetDlgItemText(hWnd, IDC_INPUTAREA_EDIT, _this->m_szLocalText);
SetDlgItemText(hWnd, IDC_CHATAREA_EDIT, _this->m_szTextBoxBuffer); // Chat area
// Scroll down the chat window
// The following seems necessary under W9x & Me if we want the Edit to scroll to bottom...
SCROLLINFO si;
ZeroMemory(&si, sizeof(SCROLLINFO));
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_RANGE|SIF_PAGE;
GetScrollInfo(GetDlgItem(hWnd, IDC_CHATAREA_EDIT), SB_VERT, &si);
si.nPos = si.nMax - max(si.nPage - 1, 0);
SendDlgItemMessage(hWnd, IDC_CHATAREA_EDIT, WM_VSCROLL, MAKELONG(SB_THUMBPOSITION, si.nPos), 0L);
// This line does the bottom scrolling correctly under NT4,W2K, XP...
// SendDlgItemMessage(m_hDlg, IDC_CHATAREA_EDIT, WM_VSCROLL, SB_BOTTOM, 0L);
// SendDlgItemMessage(hWnd, IDC_PERSISTENT_CHECK, BM_SETCHECK, _this->m_fPersistentTexts, 0);
// Tell the other side to open the TextChat Window
_this->SendTextChatRequest(CHAT_OPEN);
SetForegroundWindow(hWnd);
return TRUE;
}
// break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
/*
case IDC_PERSISTENT_CHECK:
_this->m_fPersistentTexts = (SendDlgItemMessage(hWnd, IDC_PERSISTENT_CHECK, BM_GETCHECK, 0, 0) == BST_CHECKED);
return TRUE;
*/
case IDOK:
// Server orders to close TextChat
EndDialog(hWnd, FALSE);
return TRUE;
case IDCANCEL:
_this->SendTextChatRequest(CHAT_CLOSE); // Server must close TextChat
EndDialog(hWnd, FALSE);
return TRUE;
case IDC_SEND_B:
{
memset(_this->m_szLocalText,0,TEXTMAXSIZE);
UINT nRes = GetDlgItemText( hWnd, IDC_INPUTAREA_EDIT, _this->m_szLocalText, TEXTMAXSIZE-1);
if (strlen(_this->m_szLocalText) == 0)
return FALSE;
strcat(_this->m_szLocalText, "\n");
_this->SendLocalText();
SetFocus(GetDlgItem(hWnd, IDC_INPUTAREA_EDIT));
}
return TRUE;
case IDC_HIDE_B:
_this->ShowChatWindow(false);
return TRUE;
case IDC_INPUTAREA_EDIT:
if(HIWORD(wParam) == EN_UPDATE)
{
memset(_this->m_szLocalText,0,TEXTMAXSIZE);
UINT nRes = GetDlgItemText( hWnd, IDC_INPUTAREA_EDIT, _this->m_szLocalText, TEXTMAXSIZE);
char *s = strstr(_this->m_szLocalText,"\n");
if (s >0 )
{
//s[0] = ' ';
_this->SendLocalText();
}
}
return TRUE;
}
break;
case WM_SYSCOMMAND:
switch (LOWORD(wParam))
{
case SC_RESTORE:
_this->ShowChatWindow(true);
//SetFocus(GetDlgItem(hWnd, IDC_INPUTAREA_EDIT));
return TRUE;
}
break;
case WM_DESTROY:
// _this->SendTextChatRequest(_this, CHAT_FINISHED);
if(_this->m_hDlg != NULL)
EndDialog(_this->m_hDlg, FALSE);
_this->m_hDlg = NULL;
return TRUE;
case WM_ERASEBKGND:
return EraseBkgnd(_this->m_hDlg, wParam);
case WM_CTLCOLORBTN:
return CtlColorBtn(wParam);
case WM_CTLCOLORSTATIC:
return CtlColorStatic(_this->m_hDlg, wParam, lParam);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -