工控编程吧
标题:
54上位机VC MFC实现带自定义菜单的编辑框
[打印本页]
作者:
qq263946146
时间:
2015-12-5 22:47
标题:
54上位机VC MFC实现带自定义菜单的编辑框
(, 下载次数: 0)
上传
点击文件名下载附件
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);
}
复制代码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/640bc4ea24c15ed6b614e658c5a6be00/0/0/w_19rt6926tl.swf-albumId=4974167909-tvId=4974167909-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4