vc高手来,谢谢了
我做了一个“dialog based”的mfc应用程序,里面没有“menu”资源,我在“ResourceView”中插入了menu资源,下面就是装载资源了,在C***Dlg类中新建一个 CMenu对象m_pMenu,然后再初始化函数中加上 m_pMenu->LoadMenu(IDR_MENU),这是程序编译完全没问题,可是一运行就会出现下图这个对话框,程序就无法运行了,后来我又加上了一句话, m_pMenu->EnableMenuItem(IDR_MENU,TRUE),可是还是不行,请问这是怎么回事?
把你的程序中新建CMenu对象的语句贴出来看一下,从你的命名看来,你用的是CMenu的指针而不是对象,那么你是否正确的在调用初始化函数中新建了这个对象呢? 你确定是用诸如 CMenu* m_pMenu = new CMenu()这样子新建的吗? 程序出现图中所示,可能是因为你在调用m_pMenu->时指针没有赋初值,或者指针值置为NULL了但是没有正确的新建一个CMenu对象,最好贴一下创建对象的代码出来。
========================================== 补充回答你其他的问题 如果你只是想在对话框上显示一个菜单的话,可以很简单的实现 方法一:在对话框的属性列表里面选Menu-->下接框里面选中你已经新建好的那个菜单名,一般默认是IDR_MENU1,然后确定重新编译即可 方法二:为对话框添加消息函数OnCreate,并在里面显式的加载菜单项,代码如下: int CHelpMFCDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CMenu menu; menu。
LoadMenu(IDR_MENU1); SetMenu(&menu); menu。Detach(); return 0; } 当然,如果你喜欢用指针的话,也可以在这个函数里面用指针 int CHelpMFCDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 m_pMenu = new CMenu(); m_pMenu->LoadMenu(IDR_MENU1); SetMenu(m_pMenu); m_pMenu->Detach(); return 0; } 不过记得一定要在退出之前delete掉。
个人比较推荐第一种方式,最省心。 参考 。
c++组的人说估计是你的文件路径的问题不是全路径,有可能打不开,还说什么捕获异常什么玩意的确定是什么问题...
1。属性->样式->勾上 系统菜单 2。属性->常规->菜单 就OK了 CMenu * m_pMenu m_pMenu=new CMenu()//在堆中分配一块空间存储CMenu对象 m_pMenu->LoadMenu(IDR_MENU)//加载菜单资源 但是m_pMenu并没有同系统菜单关联起来。
试看下面代码: 1。CMenu * m_pMenu1 m_pMenu1=new CMenu m_pMenu1->LoadMenu(IDR_MENU1) 2。CMenu * m_pMenu2 m_pMenu2=new CMenu m_pMenu->LoadMenu(IDR_MENU2) 那么该显示IDR_MENU1还是IDR_MENU2呢? 实际上都不显示,应该它们都没同系统菜单关联起来 当对话框要建立时,它发出WM_CREATE消息 用类向导,在OnCreate()下加上: CMenu * m_pMenu m_pMenu=new CMenu m_pMenu->LoadMenu(IDR_MENU)//直到这步为止,尚未关联,也即是,如果就此结束,菜单栏依然不会显示 SetMenu(m_pMenu)函数:Sets the current menu to the specified menu。
//摘自MSDN 也即是将m_pMenu同系统菜单关联 。
什么意思,完全不懂啊。
答:我认为实现图片串行化需要 1,不管什么格式的图片只要获得其DIB句柄 2,将其转化为HBITMAP 3。按照BITMAP的格式创建结构体准备将结构变量串行化 4...详情>>
答:很简单,侦听全部网络连接socket,调close把对应的连接断了就行。查MSDN吧。详情>>