各位大神,帮帮看看我这个程序吧。
下面是代码链接:
http://download.csdn.net/detail/keyboard330/4481626
我想在关闭父窗口同时关闭子窗口。
程序现在是个sdi程序,点击按钮,会生成子窗口。
要是先关闭子窗口,在关闭主窗口,程序正常退出。
要是生成子窗口后,直接关闭主窗口,程序在任务管理器里还有,没真正退出。
当只点击一个按钮时,会生成一个子窗口,跟踪程序,消息WM_DESTROY对应的函数执行了,WM_QUIT也发出去了,消息循环也退出了,可程序在任务管理器里还是有。(这里我最想不明白!!!)
当点击两个按钮,并直接关闭主窗口时,显示一个消息循环退出了,另一个没退出。
会在C:\Program Files文件夹下生成err_log.txt文件。
多谢各位了^_^
7 个解决方案
#1
我试着在视类WM_CLOSE对应的函数中调用DestroyWindow函数,销毁子窗口,可还是没用。
#2
好吧,我贴代码,这是单击按钮后的响应函数。
bool sign_far_shown;
child_window child_1;
void Cchild_01View::OnBnClickedButtonChild0()
{
// TODO: Add your control notification handler code here
if (sign_far_shown)
{
return;
}
sign_far_shown = true;
HWND _hwnd_frame = m_hWnd;
int sign_dialog = 1;
HANDLE himage_1 = NULL;
// retrive_pic_handle(pic_far, len_pic_far, himage_1, sign_dialog);
child_1.show_window(_hwnd_frame, m_hWnd, himage_1, sign_dialog);
}
bool sign_far_shown;
child_window child_1;
void Cchild_01View::OnBnClickedButtonChild0()
{
// TODO: Add your control notification handler code here
if (sign_far_shown)
{
return;
}
sign_far_shown = true;
HWND _hwnd_frame = m_hWnd;
int sign_dialog = 1;
HANDLE himage_1 = NULL;
// retrive_pic_handle(pic_far, len_pic_far, himage_1, sign_dialog);
child_1.show_window(_hwnd_frame, m_hWnd, himage_1, sign_dialog);
}
#3
看到你的代码,我只想到一个字:乱
遇到这样的代码,实在是没有心思看
但是我可以猜一下:把child_01变量放到类Child_view里边
主窗口退出会卸载类,但由于child_01不是他的成员所以得以保留,theApp发现仍然有函数可以处理消息所以没有退出。
另外,如果想以回调函数方式处理消息,应该重载theApp.Run()。
遇到这样的代码,实在是没有心思看
但是我可以猜一下:把child_01变量放到类Child_view里边
主窗口退出会卸载类,但由于child_01不是他的成员所以得以保留,theApp发现仍然有函数可以处理消息所以没有退出。
另外,如果想以回调函数方式处理消息,应该重载theApp.Run()。
#4
多谢回复,也没人指导,所以代码实在不规范^_^
我有一点不明白,就是明明WM_QUIT消息都发出去了,child_1.show_window()函数的消息循环也结束了(这个函数也随之退出),为什么程序没退出。
有什么书籍能参考一下一下么?
我有一点不明白,就是明明WM_QUIT消息都发出去了,child_1.show_window()函数的消息循环也结束了(这个函数也随之退出),为什么程序没退出。
有什么书籍能参考一下一下么?
#5
我看一本书,就是在一个.h和.cpp文件封装好一个类,然后win32主程序里只用声明一个全局类变量,就可以通过调用类中的函数,来实现相关功能。我也想那样写,所以有child_window child_1;
并没有把child_1写为Child_view中的变量(child_window是我自己写的一个类)。
并没有把child_1写为Child_view中的变量(child_window是我自己写的一个类)。
#6
qq874774259
多谢回答了,分给你了,虽然不是我最想要的答案,但还是一个方向^_^
多谢回答了,分给你了,虽然不是我最想要的答案,但还是一个方向^_^
#7
我查了好多资料,都说可以在关闭主窗口时,自己先销毁子窗口,在关闭主窗口,再关闭主窗口。我试过,都不行啊。
最后,折衷了一下,在关闭主窗口时,我先判断,还有没有子窗口,若有,就提示先关闭子窗口,再关闭主窗口,若没有子窗口,则程序退出。
虽然与我最初想要的效果不一样,但与TerminateThread()、TerminateProcess()相比,我宁愿要安全。
希望对其他也碰到类似问题的朋友,有所帮助。
最后说一句,结贴的赶脚真好
最后,折衷了一下,在关闭主窗口时,我先判断,还有没有子窗口,若有,就提示先关闭子窗口,再关闭主窗口,若没有子窗口,则程序退出。
虽然与我最初想要的效果不一样,但与TerminateThread()、TerminateProcess()相比,我宁愿要安全。
希望对其他也碰到类似问题的朋友,有所帮助。
最后说一句,结贴的赶脚真好
#1
我试着在视类WM_CLOSE对应的函数中调用DestroyWindow函数,销毁子窗口,可还是没用。
#2
好吧,我贴代码,这是单击按钮后的响应函数。
bool sign_far_shown;
child_window child_1;
void Cchild_01View::OnBnClickedButtonChild0()
{
// TODO: Add your control notification handler code here
if (sign_far_shown)
{
return;
}
sign_far_shown = true;
HWND _hwnd_frame = m_hWnd;
int sign_dialog = 1;
HANDLE himage_1 = NULL;
// retrive_pic_handle(pic_far, len_pic_far, himage_1, sign_dialog);
child_1.show_window(_hwnd_frame, m_hWnd, himage_1, sign_dialog);
}
bool sign_far_shown;
child_window child_1;
void Cchild_01View::OnBnClickedButtonChild0()
{
// TODO: Add your control notification handler code here
if (sign_far_shown)
{
return;
}
sign_far_shown = true;
HWND _hwnd_frame = m_hWnd;
int sign_dialog = 1;
HANDLE himage_1 = NULL;
// retrive_pic_handle(pic_far, len_pic_far, himage_1, sign_dialog);
child_1.show_window(_hwnd_frame, m_hWnd, himage_1, sign_dialog);
}
#3
看到你的代码,我只想到一个字:乱
遇到这样的代码,实在是没有心思看
但是我可以猜一下:把child_01变量放到类Child_view里边
主窗口退出会卸载类,但由于child_01不是他的成员所以得以保留,theApp发现仍然有函数可以处理消息所以没有退出。
另外,如果想以回调函数方式处理消息,应该重载theApp.Run()。
遇到这样的代码,实在是没有心思看
但是我可以猜一下:把child_01变量放到类Child_view里边
主窗口退出会卸载类,但由于child_01不是他的成员所以得以保留,theApp发现仍然有函数可以处理消息所以没有退出。
另外,如果想以回调函数方式处理消息,应该重载theApp.Run()。
#4
多谢回复,也没人指导,所以代码实在不规范^_^
我有一点不明白,就是明明WM_QUIT消息都发出去了,child_1.show_window()函数的消息循环也结束了(这个函数也随之退出),为什么程序没退出。
有什么书籍能参考一下一下么?
我有一点不明白,就是明明WM_QUIT消息都发出去了,child_1.show_window()函数的消息循环也结束了(这个函数也随之退出),为什么程序没退出。
有什么书籍能参考一下一下么?
#5
我看一本书,就是在一个.h和.cpp文件封装好一个类,然后win32主程序里只用声明一个全局类变量,就可以通过调用类中的函数,来实现相关功能。我也想那样写,所以有child_window child_1;
并没有把child_1写为Child_view中的变量(child_window是我自己写的一个类)。
并没有把child_1写为Child_view中的变量(child_window是我自己写的一个类)。
#6
qq874774259
多谢回答了,分给你了,虽然不是我最想要的答案,但还是一个方向^_^
多谢回答了,分给你了,虽然不是我最想要的答案,但还是一个方向^_^
#7
我查了好多资料,都说可以在关闭主窗口时,自己先销毁子窗口,在关闭主窗口,再关闭主窗口。我试过,都不行啊。
最后,折衷了一下,在关闭主窗口时,我先判断,还有没有子窗口,若有,就提示先关闭子窗口,再关闭主窗口,若没有子窗口,则程序退出。
虽然与我最初想要的效果不一样,但与TerminateThread()、TerminateProcess()相比,我宁愿要安全。
希望对其他也碰到类似问题的朋友,有所帮助。
最后说一句,结贴的赶脚真好
最后,折衷了一下,在关闭主窗口时,我先判断,还有没有子窗口,若有,就提示先关闭子窗口,再关闭主窗口,若没有子窗口,则程序退出。
虽然与我最初想要的效果不一样,但与TerminateThread()、TerminateProcess()相比,我宁愿要安全。
希望对其他也碰到类似问题的朋友,有所帮助。
最后说一句,结贴的赶脚真好