首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ MFC SDI复制/粘贴不起作用

C++ MFC SDI复制/粘贴不起作用
EN

Stack Overflow用户
提问于 2018-08-01 17:47:14
回答 1查看 969关注 0票数 1

我已经创建了一个简单的带功能区的MFC SDI应用程序。文档的视图是一个带有“编辑控件”的FormView。

如果我现在使用CTRL+V在编辑控件中粘贴一些文本,则没有任何反应。复制编辑控件内的文本的CTRL+C也是如此。如果我在Edit控件中右击,我可以使用上下文菜单。但是如何启用快捷键呢?CTRL +C等在加速器列表中。如果我将以下内容添加到MainForm

代码语言:javascript
运行
复制
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
    ON_COMMAND(ID_EDIT_COPY, &CMainFrame::onCopy)
END_MESSAGE_MAP()

和函数本身

代码语言:javascript
运行
复制
void CMainFrame::onCopy() {
    AfxMessageBox(L"Copy");
}

如果我现在按CTRL+C,MessageBox就会弹出来。但我无法将Edit控件的文本复制到剪贴板。如果选择了不同的控件并按下了CTRL+C,我如何在从编辑文本中复制文本和执行其他操作之间进行选择(例如,如果我在编辑控件中选择文本,则应将其复制到剪贴板。例如,如果我从树视图中选择一个项目,只会显示弹出窗口)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 01:08:33

使用ON_UPDATE_COMMAND_UI启用/禁用命令。使用ON_COMMAND响应相同的命令。

然后,您必须将消息转发到编辑控件(m_edit.Copy())。您可以直接在CMyView类中完成此操作(从CMainFrame中删除处理程序)

如果有多个编辑控件,GetFocus将报告哪个编辑控件具有焦点。

如果选择可用,CEdit::GetSel将报告。

对paste执行相同的操作。使用m_edit.CanPaste()查看粘贴是否可用。使用m_edit.Paste()执行粘贴命令。

代码语言:javascript
运行
复制
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
    //ON_COMMAND(ID_EDIT_COPY, &CMainFrame::onCopy)
END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CMyView, CView)
    ON_COMMAND(ID_EDIT_COPY, &CMyView::OnEditCopy)
    ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, &CMyView::OnUpdateEditCopy)
    ...
END_MESSAGE_MAP()

class CMyView : public CView
{
    CEdit m_edit1, m_edit2;
    ...
};

void CMyView::OnEditCopy()
{
    CWnd *wnd = GetFocus();
    if(wnd == &m_edit1)
        m_edit1.Copy();
    else if(wnd == &m_edit2)
        m_edit2.Copy();
}

void CMyView::OnUpdateEditCopy(CCmdUI *pCmdUI)
{
    CWnd *wnd = GetFocus();
    int start, end;
    if(wnd == &m_edit1)
    {
        m_edit1.GetSel(start, end);
        pCmdUI->Enable(end > start);
    }
    else if(wnd == &m_edit2)
    {
        m_edit2.GetSel(start, end);
        pCmdUI->Enable(end > start);
    }
}

或者你可以在CMainFrame中做到这一点,你必须找到视图类的句柄和编辑控件。

还要确保添加了加速键。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51630183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档