📄 multilineedit.h
字号:
#ifndef _MULTILINE_EDIT_
#define _MULTILINE_EDIT_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CMultiLineEdit:
public CWindowImpl< CMultiLineEdit, CEdit, CControlWinTraits >
{
public:
DECLARE_WND_CLASS(CEdit::GetWndClassName());
BEGIN_MSG_MAP(CMultiLineEdit)
MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
END_MSG_MAP()
public:
BOOL SubclassWindow(HWND hWnd)
{
ATLASSERT(m_hWnd == NULL);
ATLASSERT(::IsWindow(hWnd));
BOOL bRet = CWindowImpl< CMultiLineEdit, CEdit, CControlWinTraits >::SubclassWindow(hWnd);
return bRet;
}
LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
int nLineNo = LineIndex();
nLineNo =1 + LineFromChar(nLineNo);
int nMaxLine = GetLineCount();
int nCaretPos = (int) HIWORD(GetSel());
if(VK_TUP == (int) wParam)
{
if (nCaretPos == 0) {
::SendMessage(GetParent(),WM_NEXTDLGCTL, 1, FALSE);
} else if ( nLineNo == 1) {
// set caret to first char
SetSel(0,0);
} else {
DefWindowProc(uMsg,wParam,lParam);
}
}
else if(VK_TDOWN == (int)wParam)
{
LPTSTR pszText = new TCHAR[(nMaxLine+1)*100];
GetWindowText(pszText,(nMaxLine+1)*100-1);
int nTextLen = _tcslen(pszText);
if( nCaretPos == nTextLen) {
::SendMessage(GetParent(),WM_NEXTDLGCTL, 0, FALSE);
} else if (nLineNo == nMaxLine) {
SetSel(nTextLen,nTextLen);
} else {
DefWindowProc(uMsg,wParam,lParam);
}
delete pszText;
}
else
DefWindowProc(uMsg,wParam,lParam);
return 0;
}
};
#endif //_MULTILINE_EDIT_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -