OnInitDialog函数没有被调用
在CAboutDlg中重写OnInitDialog运行后,函数不会得到执行BOOLCAboutDlg::OnInitDialog(){CDialogEx::OnInitD...
在CAboutDlg 中重写OnInitDialog运行后,函数不会得到执行
BOOL CAboutDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
tray_icon.cbSize = sizeof(NOTIFYICONDATA);
tray_icon.hWnd = this->m_hWnd;
tray_icon.uID = IDR_MAINFRAME;
tray_icon.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
tray_icon.hIcon = LoadIcon( AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME) );
tray_icon.uCallbackMessage = WM_TRAYICON;
wcscpy( tray_icon.szTip, __T("时钟") );
Shell_NotifyIcon( NIM_ADD, &tray_icon );
return TRUE; // return TRUE unless you set the focus to a control
}
用的IDE是VS2012 展开
BOOL CAboutDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
tray_icon.cbSize = sizeof(NOTIFYICONDATA);
tray_icon.hWnd = this->m_hWnd;
tray_icon.uID = IDR_MAINFRAME;
tray_icon.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
tray_icon.hIcon = LoadIcon( AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME) );
tray_icon.uCallbackMessage = WM_TRAYICON;
wcscpy( tray_icon.szTip, __T("时钟") );
Shell_NotifyIcon( NIM_ADD, &tray_icon );
return TRUE; // return TRUE unless you set the focus to a control
}
用的IDE是VS2012 展开
2个回答
展开全部
DestroyWindow();
return CView::OnCommand(wParam, lParam);不报错才怪!!
return CView::OnCommand(wParam, lParam);不报错才怪!!
更多追问追答
追问
能解释一下原因吗?
追答
DestroyWindow();会销毁窗体,
窗体句柄会作废,CView::OnCommand(wParam, lParam);会使用 已经销毁的窗体对象,和已经作废的窗体句柄,当然就会出错了!
具体讲:
DestroyWindow();会发送以下消息
WM_DESTROY
WM_NCDESTROY
会进行一系列处理,
WM_NCDESTROY
的消息响应函数
OnNcDestroy() 最终会调用 PostNcDestroy();
PostNcDestroy()
函数里有一条语句 delete this;删除窗体对象, delete this 会调用析构函数。
析构函数会让窗体,句柄失效。
CView::OnCommand(wParam, lParam) 需要 隐藏的this
现在 this指针已经被删除了,是个野指针,当然就出错了;
这条语句必须先执行才可以。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是怎么发现它没有被执行得?
更多追问追答
追问
设置断点后没有进入
追答
代码看不出问题,理论上当你弹出对话框时应该能进入。你断点是设在开头,然后弹出about对话框时无法进入?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询