multilineedit.h

来自「微软手机短信订购软件」· C头文件 代码 · 共 69 行

H
69
字号
#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 + =
减小字号Ctrl + -
显示快捷键?