MFC对话框程序创建右键菜单以及选中子菜单

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43694353/article/details/84935050

语言: VC++, IDE: VS2017

一、创建右键菜单
1.在资源试图中,添加一个Menu资源,ID命名为IDR_MENU_POP,并添加两个子菜单ID_SUB_MENU1、ID_SUB_MENU2
在这里插入图片描述

2.在类视图中,为需要添加右键菜单的对话框或者控件类添加WM_RBUTTONUP消息响应OnRButtonUp,并添加代码:

CMenu menu;
menu.LoadMenu(IDR_MENU_POP);

CMenu *pPopup = menu.GetSubMenu(0);

CPoint pointPos;
GetCursorPos(&pointPos);

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pointPos.x, pointPos.y, this);

二、选中右键子菜单
选中子菜单1,同样在OnRButtonUp中,“CMenu *pPopup = menu.GetSubMenu(0);”之后,增加代码:

if (1/*控制是否需要选中的条件根据需要修改*/)
{
    pPopup->CheckMenuItem(ID_SUB_MENU1, MF_CHECKED);
}

运行效果:
在这里插入图片描述

展开阅读全文

MFC对话框程序报错,创建对话框不成功

03-07

对话框程序的InitInstance函数源代码入下:rn[code=C/C++]rnBOOL CSinovoApp::InitInstance()rnrn ShellExecute(NULL,"open","reg.bat",NULL,NULL,SW_HIDE);rn Sleep(1000);rnrn CExclusive exclusive;rn CWinApp::InitInstance();rnrn SetPriorityClass(GetCurrentProcess(),ABOVE_NORMAL_PRIORITY_CLASS);rn if(PreProcessCommandLine(GetCommandLine()))rn return FALSE;rn rn if(exclusive.IsRunning("Sinovo-server"))rn ReinitIcon();rn return FALSE;rn rn InitCommonControls();rnrnrn AfxEnableControlContainer();rn // 标准初始化rn // 如果未使用这些功能并希望减小rn // 最终可执行文件的大小,则应移除下列rn // 不需要的特定初始化例程rn // 更改用于存储设置的注册表项rn // TODO: 应适当修改该字符串,rn // 例如修改为公司或组织名rn SetRegistryKey(_T("Sinovo"));rnrn CSinovoDlg dlg;rn m_pMainWnd = &dlg;rn INT_PTR nResponse = dlg.DoModal();rn if (nResponse == IDOK)rn rn // TODO: 在此放置处理何时用“确定”来关闭rn //对话框的代码rn rn else if (nResponse == IDCANCEL)rn rn // TODO: 在此放置处理何时用“取消”来关闭rn //对话框的代码rn rnrn // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,rn // 而不是启动应用程序的消息泵。rn return FALSE;rnrn[/code]rnrn报错的语句是:CSinovoDlg dlg;这句,经过单步调试是在CSinovoDlg的类中初始化实例dlg不成功.rnrndlg的数据如下:rn[img=http://photo.weibo.com/1863628545/photos/detail/photo_id/3420971126526971#3420971126526971][/img]rnrn为什么这里的CSinovoDlg dlg初始化不成功呢?rnCSinovoDlg函数代码如下:rn[code=C/C++]CSinovoDlg::CSinovoDlg(CWnd* pParent /*=NULL*/)rn : CDialog(CSinovoDlg::IDD, pParent)rnrn m_log.SetModule("[SinovoDlg]");rnrn // Load iconrn m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);rn rn // initialize com interfacesrn pBroadcast = NULL;rn pVSServer = NULL;rn pRServer = NULL;rn pMouse = NULL;rn pDevice = NULL;rn rn // initialize thread variablesrn hThread = NULL;rn hTimeThread = NULL;rn bThreadExit = FALSE;rnrn // initialize sinovo dialog elementsrn rcWatch.left = 0;rn rcWatch.top = 0;rn rcWatch.right = 800;rn rcWatch.bottom = 600;rn bTempStopped = FALSE;rn bInitialized = FALSE;rn bPrimary = TRUE;rnrn CInterfaceHelper interfaceHelper; rn if(!interfaceHelper.GetServerInterface())rn rn AfxMessageBox("Initialize the CSLib failed");rn m_log.Append("Failed to initialize CSLib, Sinovo exits.");rn PostQuitMessage(0);rn rn elsern rn Initialize();rn rn[/code] 论坛

没有更多推荐了,返回首页