我们来演示下功能实现的整个过程
54上位机VC MFC实现带自定义菜单的编辑框
功能展示
在用MFC开发上位机程序时,其中编辑框控件会自带一个菜单,仅针对文本的简单操作如剪切,复制,粘贴等,我们当前实现来将这个系统菜单改为我们自己的菜单,来实现我们想要的菜单功能。效果如图; 要点提示 我们实现编辑框的自定义菜单功能,主要是通过修改PreTranslateMessage()来实现;在此函数中判断用户是否在编辑框上进行了鼠标左键放开,或鼠标左键放开操作。如果是我们就用函数TrackPopupMenu()弹出我们自己的菜单;TrackPopupMenu()语法BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = NULL ); nFlags为鼠标按钮标识和屏幕位置标识,取值如下TPM_CENTERALIGN TPM_LEFTALIGN TPM_RIGHTALIGN相对X坐标右对齐 TPM_LEFTBUTTON 左键菜单 TPM_RIGHTBUTTON 右键菜单;X Y菜单左顶点的XY坐标; pWnd菜单显示的窗口指针; lpRect 窗体矩形指针
实现功能 1.新建基于对话框的应用程序 2.拖拽一个编辑框控件进行简单设置,关联变量Cedit m_Text;添加菜单资源IDR_MENU1 ,添加几个菜单项再添加菜单变量CMenu m_Menu,进行初始化m_Menu.LoadMenu(IDR_MENU1);
3.添加PreTranslateMessage()虚函数,并实现自定义菜单的添加 - BOOL CGkbc8Dlg::PreTranslateMessage(MSG* pMsg)
- {
- if(pMsg->message == WM_RBUTTONUP && pMsg->hwnd == m_Text.m_hWnd)
- {
- CMenu *pMenu = m_Menu.GetSubMenu(0);
- pMenu->TrackPopupMenu(TPM_LEFTBUTTON|TPM_LEFTALIGN|TPM_VERTICAL,pMsg->pt.x,pMsg->pt.y,this,NULL);
- return true;
- }
- return CDialog::PreTranslateMessage(pMsg);
- }
复制代码4.最后肯定是实现菜单项的功能,如我们当前例程的实现部分 - oid CGkbc8Dlg::On1()
- {
- CString sText;
- m_Text.GetWindowText(sText);
- sText+="工控编程吧\r\n";
- m_Text.SetWindowText(sText);
- }
- void CGkbc8Dlg::On2()
- {
- CString sText;
- m_Text.GetWindowText(sText);
- sText+="gkbc8.com\r\n";
- m_Text.SetWindowText(sText);
- }
- void CGkbc8Dlg::On3()
- {
- CString sText;
- m_Text.GetWindowText(sText);
- sText+="微信263946146\r\n";
- m_Text.SetWindowText(sText);
- }
复制代码我们来演示下功能实现的整个过程
|