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
展开
 我来答
_whales
2013-03-18 · TA获得超过2280个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:513万
展开全部
DestroyWindow();
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指针已经被删除了,是个野指针,当然就出错了;
这条语句必须先执行才可以。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arongustc
科技发烧友

2013-03-17 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:6074万
展开全部
你是怎么发现它没有被执行得?
更多追问追答
追问
设置断点后没有进入
追答
代码看不出问题,理论上当你弹出对话框时应该能进入。你断点是设在开头,然后弹出about对话框时无法进入?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式