CDockablePane 中的 CRichEditCtrl

Hui Liu-MSFT 48,711 信誉分 Microsoft 外部员工
2024-04-29T08:50:35.98+00:00

我打算将 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

开发人员技术 | C++
开发人员技术 | C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
0 个注释 无注释
{count} 票

问题作者接受的答案
  1. 匿名
    2024-04-29T09:48:17.82+00:00

    你好

    就我而言,您可以尝试重载 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);  
    }  
      
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。