MFC 继承CEdit支持复制粘贴
时间: 2023-12-11 10:03:54 浏览: 54
要实现一个支持复制粘贴的CEdit控件,可以通过以下步骤:
1. 创建一个新的类,继承自CEdit控件。
2. 声明WM_COPY、WM_PASTE消息的处理函数。
3. 在WM_COPY消息处理函数中,使用CEdit控件的GetSel函数获取选中文本的起始和结束位置,然后使用GetWindowText函数获取选中文本的内容,最后使用SetClipboardData函数将文本内容放入剪贴板。
4. 在WM_PASTE消息处理函数中,使用GetClipboardData函数获取剪贴板中的文本内容,然后使用CEdit控件的ReplaceSel函数将文本内容插入到当前光标位置。
下面是一个简单的实现示例:
```
class CCopyPasteEdit : public CEdit
{
public:
afx_msg void OnCopy()
{
if (!OpenClipboard())
return;
EmptyClipboard();
int nStartPos, nEndPos;
GetSel(nStartPos, nEndPos);
CString strSelectedText;
GetWindowText(strSelectedText);
strSelectedText = strSelectedText.Mid(nStartPos, nEndPos - nStartPos);
HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, (strSelectedText.GetLength() + 1) * sizeof(TCHAR));
if (hData == NULL)
{
CloseClipboard();
return;
}
LPTSTR lpData = (LPTSTR)GlobalLock(hData);
_tcscpy_s(lpData, strSelectedText.GetLength() + 1, strSelectedText);
GlobalUnlock(hData);
SetClipboardData(CF_UNICODETEXT, hData);
CloseClipboard();
}
afx_msg void OnPaste()
{
if (!OpenClipboard())
return;
HGLOBAL hData = GetClipboardData(CF_UNICODETEXT);
if (hData == NULL)
{
CloseClipboard();
return;
}
LPCTSTR lpData = (LPCTSTR)GlobalLock(hData);
if (lpData == NULL)
{
CloseClipboard();
return;
}
ReplaceSel(lpData);
GlobalUnlock(hData);
CloseClipboard();
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CCopyPasteEdit, CEdit)
ON_WM_COPY()
ON_WM_PASTE()
END_MESSAGE_MAP()
```
在使用该控件时,只需要在资源文件中添加一个Edit控件,并将其Class属性设置为CCopyPasteEdit即可。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)