WEB开发网
开发学院软件开发VC 定制编辑框的上下文菜单 阅读

定制编辑框的上下文菜单

 2006-04-05 11:18:49 来源:WEB开发网   
核心提示: 使用CeitMenuHandler类有三件事情要做(如果要把设计菜单本身算在内的话,那就有四件事情要做):第一,定制编辑框的上下文菜单(2),实例化处理器,class CMyEdit : public CEdit {protected:CEditMenuHandler m_editMenu

使用CeitMenuHandler类有三件事情要做(如果要把设计菜单本身算在内的话,那就有四件事情要做):

第一,实例化处理器。

class CMyEdit : public CEdit {
protected:
CEditMenuHandler m_editMenuHandler;
virtual void PreSubclassWindow();
};

第二,必须安装第一部创建的处理器。你可以在OnCreate做,但如果编辑框控制是在对话框中,则在PreSubclassWindow中安装,因为你不是正常地创建对话框控制:而是要进行子类化工作。安装完处理器,还得传递一个上下文菜单的ID:

void CMyEdit::PreSubclassWindow()
{
//IDR EDITMENU 是我的上下文菜单
m_editMenuHandler.Install(this, IDR_EDITMENU);
}

到了这一步,处理器已经安装并且已经准备就绪,只需要调用两个函数。OnUpdateEditCommand 更新菜单项;OnEditCommand 处理命令。

// CMyEdit 消息映射

ON_COMMAND_RANGE(ID_EDIT_FIRST, 
ID_EDIT_LAST, OnEditCommand)
ON_UPDATE_COMMAND_UI_RANGE(ID_EDIT_FIRST,
ID_EDIT_LAST, OnUpdateEditCommand)
void CMyEdit::OnUpdateEditCommand(CCmdUI* pCmdUI)
{
m_editMenuHandler.OnUpdateEditCommand(pCmdUI));
}
void CMyEdit::OnEditCommand(UINT nID)
{
m_editMenuHandler.OnEditCommand(nID);
}

CEitMenuHandler把什么事情都做了,处理剪切、复制、粘贴和其它操作。根据是文档选中还是剪切板有内容等来使能或置灰(enables/disables)相应的菜单项。如果命令被处理,处理器函数返回TRUE;否则返回FALSE,如果你愿意,你可以处理其它编辑命令。例如,CMyEdit有单独的处理器处理TXT,BMP和JPG命令。

Tags:定制 编辑 上下文

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接