MFC程序关闭了窗口,但进程没有退出,Why?How?

liuqingshan1005 2009-04-14 09:26:48
写一个基于SDI的切分窗口界面,一开始都很正常,后来为了使子窗口固定大小,不响应鼠标的拖曳,参照网上的方法,自己写一个CSplitterWnd的派生类CMySplitterWnd,于是就出问题了,关闭了主窗口后,任务管理器中显示进程依然存在,这是为什么?可以确定是添加了CMySplitterWnd类之后出现的问题,其他的没有问题。
CMySplitterWnd是用ClassWizard生成的,一开始是选择基类是generic CWnd,然后手动改为CSplitterWnd,重载OnLButtonDwon()和OnMouseMove()函数。
没有增加新的成员变量,构造函数和析构函数都直接调用CSplitterWnd原来的。

/////////////////////////////////////////////////////////
//MySplitterWnd.h
class CMySplitterWnd : public CSplitterWnd
{
// Construction
public:
CMySplitterWnd();

// Attributes
public:

// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMySplitterWnd)
//}}AFX_VIRTUAL

// Implementation
public:
virtual ~CMySplitterWnd();

// Generated message map functions
protected:
//{{AFX_MSG(CMySplitterWnd)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

////////////////////////////////////////////////////////////////
//MySplitterWnd.cpp
CMySplitterWnd::CMySplitterWnd()
{
CSplitterWnd::CSplitterWnd();
}

CMySplitterWnd::~CMySplitterWnd()
{
CSplitterWnd::~CSplitterWnd();
}


BEGIN_MESSAGE_MAP(CMySplitterWnd, CSplitterWnd)
//{{AFX_MSG_MAP(CMySplitterWnd)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMySplitterWnd message handlers

void CMySplitterWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

//CSplitterWnd::OnLButtonDown(nFlags, point);
return;
}

void CMySplitterWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

//CSplitterWnd::OnMouseMove(nFlags, point);
CWnd::OnMouseMove(nFlags, point);
}
///////////////////////////////////////////////////////////

...全文
967 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pennystef 2009-09-24
  • 打赏
  • 举报
回复
受教了
liuqingshan1005 2009-04-15
  • 打赏
  • 举报
回复
肯定没有啊,我只是写了一个CSplitterWnd的派生类而已
liuqingshan1005 2009-04-15
  • 打赏
  • 举报
回复
谢谢各位,是我没有理解继承的具体含义
#Page# 2009-04-15
  • 打赏
  • 举报
回复
4楼正解,没见过这种写法~~~lz没好好理解c++吧
saiyaman5 2009-04-15
  • 打赏
  • 举报
回复
这种问题比较好调试的,一步步执行看看停在哪里,猜测不准确

首先在框架的析构函数设断点,关闭窗口,一步步执行

Mushu 2009-04-15
  • 打赏
  • 举报
回复
LS正解~递归了~~
togoblime 2009-04-15
  • 打赏
  • 举报
回复
如果其它地方没出错的话,问题应该在这里
////////////////////////////////////////////////////////////////
//MySplitterWnd.cpp
CMySplitterWnd::CMySplitterWnd()
{
CSplitterWnd::CSplitterWnd(); //应该去掉
}

CMySplitterWnd::~CMySplitterWnd()
{
CSplitterWnd::~CSplitterWnd();//应该去掉
}
在派生类的构造函数中会自动调用基类的默认构造函数,不应该手动调用,析构函数也是如此。
jackyjkchen 2009-04-14
  • 打赏
  • 举报
回复
一般MFC的进程、线程的关闭、回收操作都是封装好的,你难道改了ms的库……
allenhiman 2009-04-14
  • 打赏
  • 举报
回复
逐渐还原到最原始的状态,看看还原到哪一步就没问题了,然后定位具体问题所在

最次的办法 在OnClose调用之前调用强行结束本进程结束程序,比如ExitWindow(),exit(0)之类的

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧