SetMenu和LoadMenu函数学习
来源:互联网 发布:80端口是否打开 编辑:程序博客网 时间:2024/06/02 19:24
函数功能:该函数分配一个新菜单到指定窗口。
函数原型:BOOL SetMenu(HWND hWnd,HMENU hMenu);
参数:
hWnd:菜单被分配到其中的窗口的句柄。
HMenu:新菜单的句柄。如果菜单参数为NULL,则窗口的当前菜单被删除。
返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLaSError函数。
备注:窗口被重画来反映菜单的修改。函数SetMenu替换原来的菜单(如果存在),但并不将其销毁。应用程序必须调用函数DestroyMenu来销毁菜单。
一个单文档MFC程序,想要在程序中手工修改框架菜单,在CMainFrame::OnCreate中加入如下语句:
-------------------------------------------------------------------
// Create a new menu for the application window.
CMenu mainMenu1;
mainMenu1.CreateMenu();
CMenu popupMenu;
popupMenu.CreatePopupMenu();
popupMenu.AppendMenu(MF_STRING, ID_APP_EXIT, (LPCTSTR)"E&xit");
mainMenu1.AppendMenu(MF_POPUP, (UINT)opupMenu.m_hMenu, "&File");
popupMenu.Detach();
// Remove and destroy old menu
SetMenu(NULL);
CMenu* old_menu = CMenu::FromHandle(m_hMenuDefault);
// old_menu->DestroyMenu(); //***为什么有此句就出错
// Add new menu.
SetMenu(&mainMenu1);
// Assign default menu
m_hMenuDefault = mainMenu1.m_hMenu;
mainMenu1.Detach();//该句可要可不要?
--------------------------------------------------------------------
我的问题是:
1)上面这种方法创建新菜单对吗?
2)为什么有old_menu->DestroyMenu();主这名就出错,难道不用消毁旧菜单吗,可MSDN中却说SetMenu will not destroy a previous menu. An application should call the CMenu::DestroyMenu member function to accomplish this task.
3)在什么情况下要调用Detach(),上面最后一句为什么可要可不要?
----------------------------------------------------------------------
我也刚学习菜单,一点看法仅供参考:1)MSND上不是说:SetMenu的作用是Sets the "current menu" to the "specified menu". Causes the window to be "redrawn "to reflect the menu change. 也就是说它不是销毁当前菜单,而是重画菜单的改变部分。只有当程序结束时,系统会自动调用DestroyMenu销毁菜单。因此不用我们调用DestroyMenu去销毁菜单。
2)Detach函数从CMenu对象中释放菜单句柄,这样可以防止CMenu在移出作用域时新菜单被破坏,
通过CMenu mainMenu1;
mainMenu1.CreateMenu();
SetMenu(&mainMenu1);
完成了对菜单重新设置,用不用mainMenu1.Detach();都可以。而
CMenu popupMenu;
popupMenu.CreatePopupMenu();
popupMenu.AppendMenu(MF_STRING, ID_APP_EXIT, (LPCTSTR)"E&xit");
mainMenu1.AppendMenu(MF_POPUP, (UINT)opupMenu.m_hMenu, "&File");
必须有:
popupMenu.Detach();
至于为什么我也说不清。
- SetMenu和LoadMenu函数学习
- LoadMenu
- SetMenu用法
- LoadMenu使用方法
- LoadMenu使用方法
- SetMenu的简单示例
- vs2010下vc SetMenu
- LoadMenu 与 MAKEINTRESOURCE
- LoadMenu 的用法
- MFC--右键显示菜单之LoadMenu()
- 函数和函数式编程学习笔记
- strchar函数和 strstr函数的学习
- Oracle over函数和rank函数学习
- C++ pair函数和sort函数学习
- strcat 和strncat 函数学习
- DELPHI学习---过程和函数
- malloc和free函数学习
- 进程和相关函数学习
- Fedora 10设置普通用户自动登录
- 新生报到
- [CUDA] 如何给vs2010添加cuda.rules?
- 多做一点,或许会有意外发现---VC60 到 VC2008
- 让程序只运行一个实例的四种方法
- SetMenu和LoadMenu函数学习
- mysql date
- 接口与抽象类的区别(转)
- FlEX杂谈
- 有关文本挖掘
- 嵌入式linux文件I/O编程 (open、read、write、lseek、close)
- 3ds max 导出插件开发后记
- 管理者的三多三少
- jsonStore 数据获取