2019-01-05 20:21:43 +08:00
|
|
|
|
// ShellDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#include "2015Remote.h"
|
|
|
|
|
|
#include "ShellDlg.h"
|
|
|
|
|
|
#include "afxdialogex.h"
|
|
|
|
|
|
|
2025-04-07 21:12:55 +08:00
|
|
|
|
#define EDIT_MAXLENGTH 30000
|
|
|
|
|
|
|
2025-04-06 16:23:10 +08:00
|
|
|
|
BEGIN_MESSAGE_MAP(CAutoEndEdit, CEdit)
|
2025-10-15 04:32:59 +08:00
|
|
|
|
ON_WM_CHAR()
|
2025-04-06 16:23:10 +08:00
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
void CAutoEndEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
|
|
|
|
{
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD>ı<EFBFBD>ĩβ
|
|
|
|
|
|
int nLength = GetWindowTextLength();
|
|
|
|
|
|
SetSel(nLength, nLength);
|
2025-04-06 16:23:10 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20><><EFBFBD>ø<EFBFBD><C3B8>ദ<EFBFBD><E0B4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|
|
|
|
|
CEdit::OnChar(nChar, nRepCnt, nFlags);
|
2025-04-06 16:23:10 +08:00
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
// CShellDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CShellDlg, CDialog)
|
|
|
|
|
|
|
2025-06-29 21:25:59 +08:00
|
|
|
|
CShellDlg::CShellDlg(CWnd* pParent, Server* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
2025-10-15 04:32:59 +08:00
|
|
|
|
: DialogBase(CShellDlg::IDD, pParent, IOCPServer, ContextObject, IDI_ICON_SHELL)
|
2019-01-05 20:21:43 +08:00
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CShellDlg::~CShellDlg()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CShellDlg::DoDataExchange(CDataExchange* pDX)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CDialog::DoDataExchange(pDX);
|
|
|
|
|
|
DDX_Control(pDX, IDC_EDIT, m_Edit);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CShellDlg, CDialog)
|
2025-10-15 04:32:59 +08:00
|
|
|
|
ON_WM_CLOSE()
|
|
|
|
|
|
ON_WM_CTLCOLOR()
|
|
|
|
|
|
ON_WM_SIZE()
|
2019-01-05 20:21:43 +08:00
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// CShellDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL CShellDlg::OnInitDialog()
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CDialog::OnInitDialog();
|
|
|
|
|
|
m_nCurSel = 0;
|
|
|
|
|
|
m_nReceiveLength = 0;
|
|
|
|
|
|
SetIcon(m_hIcon, TRUE);
|
|
|
|
|
|
SetIcon(m_hIcon,FALSE);
|
|
|
|
|
|
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
str.Format("%s - Զ<><D4B6><EFBFBD>ն<EFBFBD>", m_IPAddress);
|
|
|
|
|
|
SetWindowText(str);
|
|
|
|
|
|
|
|
|
|
|
|
BYTE bToken = COMMAND_NEXT;
|
|
|
|
|
|
m_ContextObject->Send2Client(&bToken, sizeof(BYTE));
|
|
|
|
|
|
|
|
|
|
|
|
m_Edit.SetWindowTextA(">>");
|
|
|
|
|
|
m_nCurSel = m_Edit.GetWindowTextLengthA();
|
|
|
|
|
|
m_nReceiveLength = m_nCurSel;
|
|
|
|
|
|
m_Edit.SetSel((int)m_nCurSel, (int)m_nCurSel);
|
|
|
|
|
|
m_Edit.PostMessage(EM_SETSEL, m_nCurSel, m_nCurSel);
|
|
|
|
|
|
m_Edit.SetLimitText(EDIT_MAXLENGTH);
|
|
|
|
|
|
|
|
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
|
|
|
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VOID CShellDlg::OnReceiveComplete()
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (m_ContextObject==NULL) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2019-01-05 20:21:43 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
AddKeyBoardData();
|
|
|
|
|
|
m_nReceiveLength = m_Edit.GetWindowTextLength();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-06 16:23:10 +08:00
|
|
|
|
#include <regex>
|
2025-10-15 04:32:59 +08:00
|
|
|
|
std::string removeAnsiCodes(const std::string& input)
|
|
|
|
|
|
{
|
|
|
|
|
|
std::regex ansi_regex("\x1B\\[[0-9;]*[mK]");
|
|
|
|
|
|
return std::regex_replace(input, ansi_regex, "");
|
2025-04-06 16:23:10 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
VOID CShellDlg::AddKeyBoardData(void)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
|
|
|
|
|
|
|
|
|
|
|
|
//Shit\0
|
|
|
|
|
|
m_ContextObject->InDeCompressedBuffer.WriteBuffer((LPBYTE)"", 1); //<2F>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>\0
|
|
|
|
|
|
Buffer tmp = m_ContextObject->InDeCompressedBuffer.GetMyBuffer(0);
|
|
|
|
|
|
bool firstRecv = tmp.c_str() == std::string(">");
|
|
|
|
|
|
CString strResult = firstRecv ? "" : CString("\r\n") + removeAnsiCodes(tmp.c_str()).c_str(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> \0
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>滻<EFBFBD><E6BBBB>ԭ<EFBFBD><D4AD><EFBFBD>Ļ<EFBFBD><C4BB>з<EFBFBD> <20><><EFBFBD><EFBFBD>cmd <20>Ļ<EFBFBD><C4BB><EFBFBD>ͬw32<33>µı༭<C4B1>ؼ<EFBFBD><D8BC>Ļ<EFBFBD><C4BB>з<EFBFBD><D0B7><EFBFBD>һ<EFBFBD><D2BB> <20><><EFBFBD>еĻس<C4BB><D8B3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
strResult.Replace("\n", "\r\n");
|
|
|
|
|
|
|
|
|
|
|
|
if (strResult.GetLength() + m_Edit.GetWindowTextLength() >= EDIT_MAXLENGTH) {
|
|
|
|
|
|
CString text;
|
|
|
|
|
|
m_Edit.GetWindowTextA(text);
|
|
|
|
|
|
auto n = EDIT_MAXLENGTH - strResult.GetLength() - 5; // <20><>5<EFBFBD><35><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>clear<61><72><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (n < 0) {
|
|
|
|
|
|
strResult = strResult.Right(strResult.GetLength() + n);
|
|
|
|
|
|
}
|
|
|
|
|
|
m_Edit.SetWindowTextA(text.Right(max(n, 0)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int iLength = m_Edit.GetWindowTextLength(); //kdfjdjfdir
|
|
|
|
|
|
//1.txt
|
|
|
|
|
|
//2.txt
|
|
|
|
|
|
//dir\r\n
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>궨λ<EAB6A8><CEBB><EFBFBD><EFBFBD>λ<EFBFBD>ò<EFBFBD>ѡ<EFBFBD><D1A1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD> Ҳ<><D2B2><EFBFBD><EFBFBD>ĩβ <20><>Ϊ<EFBFBD>ӱ<EFBFBD><D3B1>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ҫ<><D2AA>ʾ<EFBFBD><CABE> <20><><EFBFBD>ǵ<EFBFBD> <20><>ǰ<EFBFBD><C7B0><EFBFBD>ݵĺ<DDB5><C4BA><EFBFBD>
|
|
|
|
|
|
m_Edit.SetSel(iLength, iLength);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F>ô<EFBFBD><C3B4>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滻<EFBFBD><E6BBBB><EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD><C3B5>ַ<EFBFBD> //<2F><>ʾ
|
|
|
|
|
|
m_Edit.ReplaceSel(strResult);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>µõ<C2B5><C3B5>ַ<EFBFBD><D6B7>Ĵ<EFBFBD>С
|
|
|
|
|
|
|
|
|
|
|
|
m_nCurSel = m_Edit.GetWindowTextLength();
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>Զ<EFBFBD><D4B6><EFBFBD>ն<EFBFBD>ʱ <20><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD> <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>س<EFBFBD>
|
|
|
|
|
|
//Ҫ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD>Ҫ<EFBFBD><D2AA>PreTranslateMessage<67><65><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CShellDlg::OnClose()
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CancelIO();
|
|
|
|
|
|
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
if (IsProcessing()) {
|
|
|
|
|
|
ShowWindow(SW_HIDE);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DialogBase::OnClose();
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-07 21:12:55 +08:00
|
|
|
|
CString ExtractAfterLastNewline(const CString& str)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
int nPos = str.ReverseFind(_T('\n'));
|
|
|
|
|
|
if (nPos != -1) {
|
|
|
|
|
|
return str.Mid(nPos + 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
nPos = str.ReverseFind(_T('\r'));
|
|
|
|
|
|
if (nPos != -1) {
|
|
|
|
|
|
return str.Mid(nPos + 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return str;
|
2025-04-07 21:12:55 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-05 20:21:43 +08:00
|
|
|
|
BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (pMsg->message == WM_KEYDOWN) {
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>VK_ESCAPE<50><45>VK_DELETE
|
|
|
|
|
|
if (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_DELETE)
|
|
|
|
|
|
return true;
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǿɱ༭<C9B1><E0BCAD><EFBFBD>Ļس<C4BB><D8B3><EFBFBD>
|
|
|
|
|
|
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_Edit.m_hWnd) {
|
|
|
|
|
|
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݴ<EFBFBD>С
|
|
|
|
|
|
int iLength = m_Edit.GetWindowTextLength();
|
|
|
|
|
|
CString str;
|
|
|
|
|
|
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
m_Edit.GetWindowText(str);
|
|
|
|
|
|
//<2F><><EFBFBD>뻻<EFBFBD>з<EFBFBD>
|
|
|
|
|
|
str += "\r\n";
|
|
|
|
|
|
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ټ<EFBFBD><D9BC><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD>ȥ
|
|
|
|
|
|
LPBYTE pSrc = (LPBYTE)str.GetBuffer(0) + m_nCurSel;
|
2019-01-12 18:21:42 +08:00
|
|
|
|
#ifdef _DEBUG
|
2025-04-06 16:23:10 +08:00
|
|
|
|
TRACE("[Shell]=> %s", (char*)pSrc);
|
2019-01-12 18:21:42 +08:00
|
|
|
|
#endif
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (0 == strcmp((char*)pSrc, "exit\r\n")) { // <20>˳<EFBFBD><CBB3>ն<EFBFBD>
|
|
|
|
|
|
return PostMessage(WM_CLOSE);
|
|
|
|
|
|
} else if (0 == strcmp((char*)pSrc, "clear\r\n")) { // <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD>
|
|
|
|
|
|
str = ExtractAfterLastNewline(str.Left(str.GetLength() - 7));
|
|
|
|
|
|
m_Edit.SetWindowTextA(str);
|
|
|
|
|
|
m_nCurSel = m_Edit.GetWindowTextLength();
|
|
|
|
|
|
m_nReceiveLength = m_nCurSel;
|
|
|
|
|
|
m_Edit.SetSel(m_nCurSel, m_nCurSel);
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
|
}
|
|
|
|
|
|
int length = str.GetLength() - m_nCurSel;
|
|
|
|
|
|
m_ContextObject->Send2Client(pSrc, length);
|
|
|
|
|
|
m_nCurSel = m_Edit.GetWindowTextLength();
|
|
|
|
|
|
}
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>VK_BACK
|
|
|
|
|
|
if (pMsg->wParam == VK_BACK && pMsg->hwnd == m_Edit.m_hWnd) {
|
|
|
|
|
|
if (m_Edit.GetWindowTextLength() <= m_nReceiveLength)
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
// ʾ<><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
|
//dir\r\n 5
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return CDialog::PreTranslateMessage(pMsg);
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HBRUSH CShellDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
|
|
|
|
|
|
|
|
|
|
if ((pWnd->GetDlgCtrlID() == IDC_EDIT) && (nCtlColor == CTLCOLOR_EDIT)) {
|
|
|
|
|
|
COLORREF clr = RGB(255, 255, 255);
|
|
|
|
|
|
pDC->SetTextColor(clr); //<2F><><EFBFBD>ð<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ı<EFBFBD>
|
|
|
|
|
|
clr = RGB(0,0,0);
|
|
|
|
|
|
pDC->SetBkColor(clr); //<2F><><EFBFBD>ú<EFBFBD>ɫ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
|
|
|
|
|
return CreateSolidBrush(clr); //<2F><>ΪԼ<CEAA><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ɫ<EFBFBD><C9AB>Ӧ<EFBFBD><D3A6>ˢ<EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
|
|
|
|
|
|
} else {
|
|
|
|
|
|
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
|
|
|
|
}
|
|
|
|
|
|
return hbr;
|
2019-01-05 20:21:43 +08:00
|
|
|
|
}
|
2025-04-06 16:23:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CShellDlg::OnSize(UINT nType, int cx, int cy)
|
|
|
|
|
|
{
|
2025-10-15 04:32:59 +08:00
|
|
|
|
CDialog::OnSize(nType, cx, cy);
|
2025-04-06 16:23:10 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
if (!m_Edit.GetSafeHwnd()) return; // ȷ<><C8B7><EFBFBD>ؼ<EFBFBD><D8BC>Ѵ<EFBFBD><D1B4><EFBFBD>
|
2025-04-06 16:23:10 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>úʹ<C3BA>С
|
|
|
|
|
|
CRect rc;
|
|
|
|
|
|
m_Edit.GetWindowRect(&rc);
|
|
|
|
|
|
ScreenToClient(&rc);
|
2025-04-06 16:23:10 +08:00
|
|
|
|
|
2025-10-15 04:32:59 +08:00
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿؼ<C3BF><D8BC><EFBFBD>С
|
|
|
|
|
|
m_Edit.MoveWindow(0, 0, cx, cy, TRUE);
|
2025-04-06 16:23:10 +08:00
|
|
|
|
}
|