开发人员技术 | C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
我打算将 CRichEditCtrl 放在 CDockablePane 中,我以某种方式成功了,但并不完全成功:我可以在这个嵌入的 CRichEditCtrl 中编写文本,但我没有格式化,我注意到一些奇怪的事情:键盘快捷键只有在我按住 Shift 键时才起作用。例如,如果我想“粘贴”某些内容,而不是 Ctrl+V,我需要按 Ctrl+Shift+V,依此类推。
我在这里附上了一个揭示问题的示例项目。
下面是在 CDockablePane 中创建 CRichEditCtrl 的代码:
int CClassView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rectDummy;
rectDummy.SetRectEmpty();
constexpr DWORD dwStyle = WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN;
if (! m_wndRichEditCtrl.Create(dwStyle, rectDummy, this, IDC_RICHEDIT_QUERY))
{
TRACE(_T("Failed to create rich edit control\n"));
return -1; // fail to create
}
m_wndRichEditCtrl.PostMessage(EM_SETEVENTMASK, 0, ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS);
return 0;
}
还有一件奇怪的事情:如果我从 Visual Studio 复制一些东西,然后把它粘贴到这里,格式就不会保留,正如我所说......为什么?
Note:此问题总结整理于:CRichEditCtrl in CDockablePane
你好
就我而言,您可以尝试重载 BOOL PreTranslateMessage (MSG* pMsg)
这是我的代码:
BOOL CClassView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
int nKey = pMsg->wParam;
if ((nKey == 'C' || nKey == 'X'
|| nKey == 'V') &&
(::GetKeyState(VK_CONTROL) & 0x8000))
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return(TRUE);
}
}
return CDockablePane::PreTranslateMessage(pMsg);
}
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。