nim_duilib/duilib/Control/RichEdit.h

1001 lines
23 KiB
C
Raw Permalink Normal View History

2019-04-19 17:19:57 +08:00
#ifndef UI_CONTROL_RICHEDIT_H_
#define UI_CONTROL_RICHEDIT_H_
#pragma once
#include <Imm.h>
#include <textserv.h>
#include <richedit.h>
#include <RichOle.h>
namespace ui
{
class CTxtWinHost;
class UILIB_API RichEdit : public ScrollableBox
{
public:
friend class CTxtWinHost;
typedef std::function<bool(LONG, LONG, CSize&)> FunGetNaturalSize;
public:
RichEdit();
RichEdit(const RichEdit& r) = delete;
RichEdit& operator=(const RichEdit& r) = delete;
~RichEdit();
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TAB <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsWantTab();
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TAB <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] bWantTab Ϊ true <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetWantTab(bool bWantTab = true);
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RETURN <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsNeedReturnMsg();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RETURN <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] bNeedReturnMsg Ϊ true <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetNeedReturnMsg(bool bNeedReturnMsg = true);
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CTRL+RETURN <EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>false <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsReturnMsgWantCtrl();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CTRL+RETUREN <EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] bReturnMsgWantCtrl Ϊ true <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetReturnMsgWantCtrl(bool bReturnMsgWantCtrl = true);
/**
* @brief <EFBFBD>Ƿ<EFBFBD><EFBFBD>Ǹ<EFBFBD><EFBFBD>ı<EFBFBD>״̬
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool IsRich();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>״̬
* @param[in] bRich <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>״̬<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD>ͨ״̬
* @return <EFBFBD><EFBFBD>
*/
void SetRich(bool bRich = true);
/**
* @brief <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>״̬
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊֻ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool IsReadOnly();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD>Ϊֻ<EFBFBD><EFBFBD>״̬
* @param[in] bReadOnly <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD>Ϊֻ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>״̬
* @return <EFBFBD><EFBFBD>
*/
void SetReadOnly(bool bReadOnly = true);
/**
* @brief <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>ؼ<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool IsPassword();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ ***<EFBFBD><EFBFBD>
* @param[in] bPassword <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true <EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ ***<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetPassword(bool bPassword);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>false <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>ʾ
*/
bool GetWordWrap();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʽ
* @param[in] bWordWrap Ϊ true ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>false <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>ʾ
* @return <EFBFBD><EFBFBD>
*/
void SetWordWrap(bool bWordWrap = true);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ global.xml <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetFont() const;
2019-04-19 17:19:57 +08:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] index Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ global.xml <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetFont(const std::wstring& strFontId);
2019-04-19 17:19:57 +08:00
void SetFont(HFONT font);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pStrFontName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nSize <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
* @param[in] bBold <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @param[in] bUnderline <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>»<EFBFBD><EFBFBD><EFBFBD>
* @param[in] bItalic <EFBFBD>Ƿ<EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @return <EFBFBD><EFBFBD>
*/
void SetFont(const std::wstring& pStrFontName, int nSize, bool bBold, bool bUnderline, bool bItalic);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*/
LONG GetWinStyle();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] lStyle Ҫ<EFBFBD><EFBFBD><EFBFBD>õĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD>
*/
void SetWinStyle(LONG lStyle);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>׶˶<EFBFBD><EFBFBD>
*/
VerAlignType GetTextVerAlignType();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ɫ
* @param[in] dwTextColor Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> global.xml <EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void SetTextColor(const std::wstring& dwTextColor);
void SetTextColor(DWORD color);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ɫ
* @return <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>ɫ
*/
std::wstring GetTextColor();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetLimitText();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] iChars Ҫ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetLimitText(int iChars);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݵij<EFBFBD><EFBFBD><EFBFBD>
* @param[in] dwFlags ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵķ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> https://docs.microsoft.com/en-us/windows/desktop/controls/em-gettextlengthex
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
*/
long GetTextLength(DWORD dwFlags = GTL_DEFAULT) const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ı<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetText() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ı<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UTF8 <EFBFBD><EFBFBD>ʽ
*/
virtual std::string GetUTF8Text() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
* @param[in] strText Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetText(const std::wstring& strText);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>Ӧ ID
* @param[in] strTextId Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetTextId(const std::wstring& strTextId);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>Ӧ ID
* @param[in] strTextId Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> UTF8 <EFBFBD><EFBFBD>ʽ ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void SetUTF8Text(const std::string& strText);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>޸ı<EFBFBD>־
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ı<EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool GetModify() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ı<EFBFBD>־
* @param[in] bModified <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true <EFBFBD><EFBFBD>ʾ<EFBFBD>ı<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ģ<EFBFBD>false Ϊδ<EFBFBD>޸ģ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return <EFBFBD><EFBFBD>
*/
void SetModify(bool bModified = true) const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѡ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD>úͽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[out] cr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD>úͽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void GetSel(CHARRANGE &cr) const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѡ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD>úͽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] nStartChar <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD>
* @param[in] nEndChar <EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void GetSel(long& nStartChar, long& nEndChar) const;
/**
* @brief ѡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cr Ҫѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD>úͽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int SetSel(CHARRANGE &cr);
/**
* @brief ѡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nStartChar Ҫѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD>
* @param[in] nEndChar Ҫѡ<EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int SetSel(long nStartChar, long nEndChar);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] lpszNewText Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bCanUndo <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true Ϊ<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD>
*/
void ReplaceSel(const std::wstring& lpszNewText, bool bCanUndo);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] lpszNewText Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bCanUndo <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true Ϊ<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD>
*/
void ReplaceSelW(LPCWSTR lpszNewText, bool bCanUndo = false);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetSelText() const;
/**
* @brief ȫѡ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int SetSelAll();
/**
* @brief <EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return ʼ<EFBFBD>շ<EFBFBD><EFBFBD><EFBFBD> 0
*/
int SetSelNone();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD>https://docs.microsoft.com/en-us/windows/desktop/controls/em-selectiontype
*/
WORD GetSelectionType() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>
* @param[out] nNum <EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD>
* @param[out] nDen <EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><EFBFBD>ʷ<EFBFBD>ĸ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>򷵻<EFBFBD> TRUE
*/
bool GetZoom(int& nNum, int& nDen) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD>
* @param[in] nNum <EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><EFBFBD>ʷ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] nDen <EFBFBD><EFBFBD><EFBFBD>ű<EFBFBD><EFBFBD>ʷ<EFBFBD>ĸ
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool SetZoom(int nNum, int nDen);
/**
* @brief <EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD>ʼ״̬
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> false
*/
bool SetZoomOff();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD> URL <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false
*/
bool GetAutoURLDetect() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> URL <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bAutoDetect <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> URL<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD><EFBFBD><EFBFBD>óɹ<EFBFBD><EFBFBD><EFBFBD>false Ϊʧ<EFBFBD><EFBFBD>
*/
bool SetAutoURLDetect(bool bAutoDetect = true);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
DWORD GetEventMask() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] dwEventMask Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
DWORD SetEventMask(DWORD dwEventMask);
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nStartChar <EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD>
* @param[in] nEndChar <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊֹ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ָ<EFBFBD><EFBFBD>λ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetTextRange(long nStartChar, long nEndChar) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD>ʾѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* @param[in] bHide <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>true Ϊ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @param[in] bChangeStyle <EFBFBD>Ƿ<EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>true Ϊ<EFBFBD>޸ģ<EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void HideSelection(bool bHide = true, bool bChangeStyle = false);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void ScrollCaret();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nInsertAfterChar Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] lpstrText Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
* @param[in] bCanUndo <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true Ϊ<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>λ<EFBFBD><EFBFBD>
*/
int InsertText(long nInsertAfterChar, LPCTSTR lpstrText, bool bCanUndo = false);
/**
* @brief ׷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strText Ҫ׷<EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bCanUndo <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Գ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true Ϊ<EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ false<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ false
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>׷<EFBFBD>Ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
*/
int AppendText(const std::wstring& strText, bool bCanUndo = false);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[out] cf <EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD> cf <EFBFBD><EFBFBD> dwMask <EFBFBD><EFBFBD>ֵ
*/
DWORD GetDefaultCharFormat(CHARFORMAT2 &cf) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] cf Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>false Ϊʧ<EFBFBD><EFBFBD>
*/
bool SetDefaultCharFormat(CHARFORMAT2 &cf);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[out] cf <EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD> cf <EFBFBD><EFBFBD> dwMask <EFBFBD><EFBFBD>ֵ
*/
DWORD GetSelectionCharFormat(CHARFORMAT2 &cf) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] cf Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>false Ϊʧ<EFBFBD><EFBFBD>
*/
bool SetSelectionCharFormat(CHARFORMAT2 &cf);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD>ʸ<EFBFBD>ʽ
* @param[in] cf Ҫ<EFBFBD><EFBFBD><EFBFBD>õĵ<EFBFBD><EFBFBD>ʸ<EFBFBD>ʽ
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool SetWordCharFormat(CHARFORMAT2 &cf);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[out] pf <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> pf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dwMask <EFBFBD><EFBFBD>Ա
*/
DWORD GetParaFormat(PARAFORMAT2 &pf) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] pf Ҫ<EFBFBD><EFBFBD><EFBFBD>õĶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ʽ
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> false
*/
bool SetParaFormat(PARAFORMAT2 &pf);
/**
* @brief <EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool Redo();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool Undo();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Clear();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Copy();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Cut();
/**
* @brief ճ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void Paste();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] nFormat Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> false
*/
BOOL CanPaste(UINT nFormat = 0);
/**
* @brief <EFBFBD>ڿؼ<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] uClipFormat ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] dwAspect ָ<EFBFBD><EFBFBD>չʾ<EFBFBD><EFBFBD>ʽ
* @param[in] hMF <EFBFBD><EFBFBD><EFBFBD><EFBFBD> dwAspect Ϊ DVASPECT_ICON<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void PasteSpecial(UINT uClipFormat, DWORD dwAspect = 0, HMETAFILE hMF = 0);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetLineCount() const;
/**
* @brief <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nIndex Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nMaxLength Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD>ȡ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetLine(int nIndex, int nMaxLength) const;
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD>еĵ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nLine Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ -1
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>еĵ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int LineIndex(int nLine = -1) const;
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] nLine Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD>ڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ -1
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
*/
int LineLength(int nLine = -1) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
* @param[in] nLines ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nChars ָ<EFBFBD><EFBFBD>ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
bool LineScroll(int nLines, int nChars = 0);
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Ŀͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] lChar <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
CPoint GetCharPos(long lChar) const;
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nIndex <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
long LineFromChar(long nIndex) const;
/**
* @brief <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>Ŀͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nChar <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
CPoint PosFromChar(UINT nChar) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pt <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
*/
int CharFromPos(CPoint pt) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void EmptyUndoBuffer();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nLimit
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
UINT SetUndoLimit(UINT nLimit);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nFormat ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>https://docs.microsoft.com/en-us/windows/desktop/controls/em-streamin
* @param[in] es <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
*/
long StreamIn(int nFormat, EDITSTREAM &es);
/**
* @brief ָ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] nFormat ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>https://docs.microsoft.com/en-us/windows/desktop/controls/em-streamin
* @param[in] es <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>Ľ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
*/
long StreamOut(int nFormat, EDITSTREAM &es);
// ע<>⣺TxSendMessage<67><65>SendMessage<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>TxSendMessageû<65><C3BB>multibyte<74><65>unicode<64>Զ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD>Ĺ<EFBFBD><C4B9>ܣ<EFBFBD>
// <20><>richedit2.0<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>unicodeʵ<EFBFBD>ֵģ<EFBFBD><EFBFBD><EFBFBD>multibyte<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>unicode<EFBFBD><EFBFBD>multibyte<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>
virtual HRESULT TxSendMessage(UINT msg, WPARAM wparam, LPARAM lparam, LRESULT *plresult) const;
IDropTarget* GetTxDropTarget();
bool SetDropAcceptFile(bool bAccept);
virtual void OnTxNotify(DWORD iNotify, void *pv);
virtual bool OnTxTextChanged();
ITextHost* GetTextHost();
ITextServices* GetTextServices();
BOOL SetOleCallback(IRichEditOleCallback* pCallback);
CSize GetNaturalSize(LONG width, LONG height);
void SetImmStatus(BOOL bOpen);
void SetTimer(UINT idTimer, UINT uTimeout);
void KillTimer(UINT idTimer);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] szPos Ҫ<EFBFBD><EFBFBD><EFBFBD>õĹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD>
*/
void SetScrollPos(CSize szPos);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void LineUp();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void LineDown();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ҳ
* @return <EFBFBD><EFBFBD>
*/
void PageUp();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ҳ
* @return <EFBFBD><EFBFBD>
*/
void PageDown();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void HomeUp();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>ײ<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void EndDown();
/**
* @brief ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void LineLeft();
/**
* @brief ˮƽ<EFBFBD><EFBFBD><EFBFBD>ҹ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void LineRight();
/**
* @brief ˮƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ
* @return <EFBFBD><EFBFBD>
*/
void PageLeft();
/**
* @brief ˮƽ<EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD>ҳ
* @return <EFBFBD><EFBFBD>
*/
void PageRight();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void HomeLeft();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void EndRight();
virtual void DoInit() override;
virtual void SetEnabled(bool bEnable = true) override;
virtual CSize EstimateSize(CSize szAvailable) override;
virtual void SetPos(UiRect rc) override;
virtual UINT GetControlFlags() const override;
2019-04-19 17:19:57 +08:00
virtual void HandleMessage(EventArgs& event) override;
void OnSetCursor(EventArgs& event);
void OnSetFocus(EventArgs& event);
void OnKillFocus(EventArgs& event);
void OnChar(EventArgs& event);
void OnKeyDown(EventArgs& event);
void OnImeStartComposition(EventArgs& event);
void OnImeEndComposition(EventArgs& event);
void OnMouseMessage(UINT uMsg, EventArgs& event);
virtual void Paint(IRenderContext* pRender, const UiRect& rcPaint) override;
virtual void PaintChild(IRenderContext* pRender, const UiRect& rcPaint) override;
virtual void SetAttribute(const std::wstring& pstrName, const std::wstring& pstrValue) override;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] xWidth <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] yHeight <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
BOOL CreateCaret(INT xWidth, INT yHeight);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] fShow <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
BOOL ShowCaret(BOOL fShow);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
* @param[in] dwColor Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ɫֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> global.xml <EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetCaretColor(const std::wstring& dwColor);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
* @return <EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
*/
std::wstring GetCaretColor();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
*/
RECT GetCaretRect();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] x X <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] y Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD> false
*/
BOOL SetCaretPos(INT x, INT y);
/**
* @brief <EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʾ
* @return <EFBFBD><EFBFBD>
*/
void ChangeCaretVisiable();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] pRender <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] rcPaint <EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void PaintCaret(IRenderContext* pRender, const UiRect& rcPaint);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bPrompt <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true Ϊ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @return <EFBFBD><EFBFBD>
*/
void SetPromptMode(bool bPrompt);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetPromptText() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> UTF8 <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::string GetUTF8PromptText() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strText Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetPromptText(const std::wstring& strText);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] strText Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> UTF8 <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetUTF8PromptText(const std::string& strText);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
* @param[in] strText Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetPromptTextId(const std::wstring& strTextId);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
* @param[in] strText Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> UTF8 <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetUTF8PromptTextId(const std::string& strTextId);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pRender <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void PaintPromptText(IRenderContext* pRender);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>µ<EFBFBD>ͼƬ
* @return <EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>µ<EFBFBD>ͼƬ
*/
std::wstring GetFocusedImage();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD>µ<EFBFBD>ͼƬ
* @param[in] strImage Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ͼƬλ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetFocusedImage(const std::wstring& strImage);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>״̬<EFBFBD>µ<EFBFBD>ͼƬ
* @param[in] pRender <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void PaintStatusImage(IRenderContext* pRender) override;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȡ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bOnSel <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true <EFBFBD><EFBFBD>ʾȡ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetNoSelOnKillFocus(bool bOnSel);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bSelAll <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>false Ϊ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetSelAllOnFocus(bool bSelAll);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetNoCaretReadonly();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
* @param[in] str <EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] color <EFBFBD><EFBFBD>ɫֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> global.xml <EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AddColorText(const std::wstring &str, const std::wstring &color);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] str <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] color <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
* @param[in] linkInfo <EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ
* @return <EFBFBD><EFBFBD>
*/
void AddLinkColorText(const std::wstring &str, const std::wstring &color, const std::wstring &linkInfo = L"");
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] str <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] color <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
* @param[in] linkInfo <EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ַ
* @param[in] font <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AddLinkColorTextEx(const std::wstring& str, const std::wstring &color, const std::wstring &linkInfo = L"", const std::wstring& strFontId = L"");
2019-04-19 17:19:57 +08:00
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> hittest <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] cr <EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD>úͽ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] linkInfo <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD> link <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AddLinkInfo(const CHARRANGE cr, const std::wstring &linkInfo);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>point<EFBFBD><EFBFBD>hittest<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>link<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pt λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param[in] info <EFBFBD><EFBFBD>ʾ link <EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD> link <EFBFBD><EFBFBD>
*/
bool HittestCustomLink(CPoint pt, std::wstring& info);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void ClearImageCache() override;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
* @param[in] callback <EFBFBD>س<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AttachReturn(const EventCallback& callback) { OnEvent[kEventReturn] += callback; }
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD> TAB <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
* @param[in] callback TAB <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AttachTab(const EventCallback& callback) { OnEvent[kEventTab] += callback; }
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><EFBFBD>¼<EFBFBD>
* @param[in] callback <EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AttachTextChange(const EventCallback& callback) { OnEvent[kEventTextChange] += callback; }
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
* @param[in] callback <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AttachCustomLinkClk(const EventCallback& callback) { OnEvent[kEventCustomLinkClick] += callback; }
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>¼<EFBFBD>
* @param[in] callback <EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void AttachGetNaturalSize(const FunGetNaturalSize& callback) { m_cbGetNaturalSize = callback; };
protected:
CTxtWinHost* m_pTwh;
bool m_bVScrollBarFixing;
bool m_bWantTab;
bool m_bNeedReturnMsg;
bool m_bReturnMsgWantCtrl;
bool m_bRich;
bool m_bReadOnly;
bool m_bPassword;
bool m_bWordWrap;
bool m_bNumberOnly;
bool m_bInited;
bool m_bAllowPrompt;
bool m_bSelAllEver; //ֻ<>ڵ<EFBFBD>һ<EFBFBD><D2BB>ʱȫѡ
bool m_bNoSelOnKillFocus; //<2F><><EFBFBD><EFBFBD> m_bEnabled && m_bReadOnly
bool m_bSelAllOnFocus; //<2F><><EFBFBD><EFBFBD> m_bEnabled && !m_bReadOnly
bool m_bNoCaretReadonly;
bool m_bIsCaretVisiable;
bool m_bIsComposition;
int m_iCaretPosX;
int m_iCaretPosY;
int m_iCaretWidth;
int m_iCaretHeight;
std::wstring m_sFontId;
2019-04-19 17:19:57 +08:00
int m_iLimitText;
LONG m_lTwhStyle;
VerAlignType m_textVerAlignType;
std::wstring m_sCurrentColor;
std::wstring m_sTextColor;
std::wstring m_sDisabledTextColor;
std::wstring m_sPromptColor;
std::wstring m_sCaretColor;
std::wstring m_sText;
std::wstring m_sPromptText;
std::wstring m_sPromptTextId;
nbase::WeakCallbackFlag m_drawCaretFlag;
std::weak_ptr<nbase::WeakFlag> m_windowFlag; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>flag
FunGetNaturalSize m_cbGetNaturalSize;
protected:
struct LinkInfo
{
CHARRANGE cr;
std::wstring info;
};
std::map<UINT, nbase::WeakCallbackFlag> m_timeFlagMap;
std::vector<LinkInfo> m_linkInfo;
Image m_sFocusedImage;
};
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ֽڣ<D6BD> <20>ɴ<EFBFBD>ӡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>0x20-0x7e<37><65>
bool IsAsciiChar(const wchar_t ch);
//<2F><>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
int GetAsciiCharNumber(const std::wstring &str);
//ɾ<><C9BE><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>limit<69>ֽڸ<D6BD><DAB8><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
void LimitAsciiNumber(std::wstring &src, int limit);
//<2F><>ȡճ<C8A1><D5B3><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void GetClipboardText(std::wstring &out);
//<2F><><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void SetClipBoardText(const std::wstring &str);
} // namespace ui
#endif // UI_CONTROL_RICHEDIT_H_