利用MFC动态向AutoCAD的菜单栏添加菜单
来源:互联网 发布:网络词淑芬是什么意思 编辑:程序博客网 时间:2024/06/06 02:35
利用MFC动态向AutoCAD的菜单栏添加菜单
菜单 it 分类:ObjectARX编程
前面我们介绍过在ObjectARX中通过Com接口向AutoCAD的菜单栏追加菜单,今天我们再提供另外的两种方法,利用Windows窗体的机制直接向AutoCAD主菜单上添加菜单。
(1)在ARX程序的InitApplication函数中,动态创建一个新菜单,将其添加到AutoCAD的主菜单上去:
acedGetAcadFrame()->m_bAutoMenuEnable = FALSE;
CMenu *pMainMenu = acedGetAcadFrame()->GetMenu();
CMenu myMenu;
myMenu.CreatePopupMenu();
myMenu.AppendMenu(MF_STRING, IDM_MYMENU_ITEM1, TEXT("Line"));
pMainMenu->AppendMenu(MF_POPUP, (UINT)myMenu.Detach(), TEXT("Test"));
acedGetAcadFrame()->DrawMenuBar();
注意第一句代码,如果没有这句代码,你的菜单仍然能够显示出来,但是会处于灰色无法点击的状态,这是MFC内部对菜单可用状态提供的一种判断机制;
(2)为了在ARX程序中处理菜单消息,必须使用Hook技术。定义一个全局变量用于判断是否已经注册了钩子函数:
bool bRegistered = false;
(3)在InitApplication函数中注册钩子函数:
if (!acedRegisterFilterWinMsg(GetMousePos))
{
acedPrompt("无法注册钩子函数:GetMousePos/n");
}
else
{
bRegistered = true;
}
(4)在UnloadApplication函数中取消钩子函数的注册:
if (bRegistered)
{
acedRemoveFilterWinMsg(GetMousePos);
bRegistered = FALSE;
}
(5)钩子函数实际上就是一个全局函数,在这里面我们将会WM_COMMAND消息进行处理,其中IDM_MYMENU_ITEM1是我在Resource.h中为新的菜单项定义的一个ID:
BOOL GetMousePos(MSG *pMsg)
{
CPoint cPnt;
acedDwgPoint cpt;
switch (pMsg->message)
{
case WM_COMMAND:
{
if (LOWORD(pMsg->wParam) == IDM_MYMENU_ITEM1)
{
acDocManager->sendStringToExecute(acDocManager->curDocument(), TEXT("Line
"));
return TRUE;
}
}
break;
}
return FALSE;
}
(6)现在已经万事大吉,可以运行你的程序看效果了。
如果是预先在ARX程序中编写菜单资源,然后通过这种方式加载,也是一样的道理,只不过菜单的来源不同,消息的处理方法没什么区别。
- 利用MFC动态向AutoCAD的菜单栏添加菜单
- MFC 添加动态菜单
- MFC中向对话框中添加菜单栏方法
- MFC编程--添加基于对话框的菜单栏
- MFC中菜单项的动态添加、删除与响应
- MFC中动态添加菜单项是灰色的解决办法
- MFC中菜单项的动态添加、删除与响应
- MFC对话框添加菜单栏
- MFC对话框添加菜单栏
- MFC添加菜单栏
- MFC Dialog 添加菜单栏
- (MFC) VS2010、VS2012动态添加菜单
- MFC动态创建菜单及添加相应
- MFC之动态添加菜单项
- 动态添加菜单栏Pluse
- 如何向系统菜单中动态添加菜单项
- AutoCAD的菜单介绍
- MFC学习笔记.day03-菜单,图形标记菜单创建,菜单栏禁用,命令响应,右键弹出菜单,添加菜单
- Hdu 2256 Problem of Precision
- Android如何防止apk程序被反编译
- 18道性能测试相关知识
- JNI一些错误需要注意:
- classpath:和classpath*:
- 利用MFC动态向AutoCAD的菜单栏添加菜单
- Android APK反编译详解(附图)
- Vitrual Memory Wrapper Class
- 无限级分类设计分析研究
- Window Tabs (WndTabs) Add-In for DevStudio源码
- Agile Item的生命周期阶段
- ios环境_Xcode 4的新特性
- ShowWindow与UpdateWindow
- #ifndef、#def、#endif说明