如果在cpp中和h文件中存在IMPLEMENT_DYNCREATE(CPrintFrame, CFrameWnd)、DECLARE_DYNCREATE(CPrintFrame)两句,编译就提示我找不到合适的类的构造函数,原因是我在类的构造函数中代入了参数,形如:
.h文件
class CPrintFrame : public CFrameWnd
{
protected:
// Attributes
public:
DECLARE_DYNCREATE(CPrintFrame)
CPrintFrame(DRAWFUN pDraw,CWnd*pOldW,CWnd* pCallW,BOOL bDirect,LPCTSTR stTitle);
virtual ~CPrintFrame();
...
};
.cpp文件
IMPLEMENT_DYNCREATE(CPrintFrame, CFrameWnd)
CPrintFrame::CPrintFrame(DRAWFUN pDraw,CWnd*pOldW,CWnd* pCallW,BOOL bDirect,LPCTSTR stTitle)
{
...
}
如果把两句注释掉编译通过,但运行时存在如下问题:
在打印预览时点击“关闭”按钮一切正常,如果是点击CPrintFrame上的"X"按钮(关闭),结果Frame就不会关闭,好像是死机了一样,CPrintFrame白屏,再次点击一次,结果整个程序退出了。跟踪显示点击预览里的“关闭”按钮,程序会进入CPrintFrame的析构函数,但点击"X"程序进入不了析构函数,第二次才进入。在CPrintFrame里加了一个OnClose()函数,第一次能进入OnClose()函数.
想问一下一个程序中能不能同时存在两个Frame,而且Frame中的那个X和关闭有什么不同?
不知道我表述清楚了没有~~~~~
10 个解决方案
#1
可以的,我以前程序中就在View中另开了一个Frame来显示图片
下面是我的创建并显示新frame的代码,希望对你有所帮助
// 新建并打开图片浏览窗口
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
_ASSERT(pGraphFrame->IsKindOf(RUNTIME_CLASS(CGraphViewerFrame)));
//pGraphFrame->Create(NULL, _T("Window Name"), WS_OVERLAPPEDWINDOW, rectDefault, this);
VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
pGraphFrame->ShowWindow(SW_SHOW);
下面是我的创建并显示新frame的代码,希望对你有所帮助
// 新建并打开图片浏览窗口
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
_ASSERT(pGraphFrame->IsKindOf(RUNTIME_CLASS(CGraphViewerFrame)));
//pGraphFrame->Create(NULL, _T("Window Name"), WS_OVERLAPPEDWINDOW, rectDefault, this);
VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
pGraphFrame->ShowWindow(SW_SHOW);
#2
注意:IMPLEMENT_DYNCREATE(CPrintFrame, CFrameWnd)、DECLARE_DYNCREATE(CPrintFrame)两句不能去掉
#3
参考:http://www.vckbase.com/document/viewdoc/?id=691
这个例子可能对你有启发
这个例子可能对你有启发
#4
Semigod():
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
怎么用的?我的因为在析构函数里带入了参数,所以不能用CreateObject()的吧?还有你那句VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
怎么会有个IDR_GRAPHVIEWER资源和它关联呢?
我又看了一下,例子用的不是DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE,改成了DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC,编译通过了,但问题还是存在,就是点击窗口上的最大化后的“X”关闭存在问题,象是死机的状态(白屏,Frame的蓝条存在),再一次,程序退出。
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
怎么用的?我的因为在析构函数里带入了参数,所以不能用CreateObject()的吧?还有你那句VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
怎么会有个IDR_GRAPHVIEWER资源和它关联呢?
我又看了一下,例子用的不是DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE,改成了DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC,编译通过了,但问题还是存在,就是点击窗口上的最大化后的“X”关闭存在问题,象是死机的状态(白屏,Frame的蓝条存在),再一次,程序退出。
#5
vcleaner:
谢谢不做大哥的大哥的帮助,呵呵
这个例子和我的情况不太一样 :)
谢谢不做大哥的大哥的帮助,呵呵
这个例子和我的情况不太一样 :)
#6
就象Mainframe一样,那个frame窗口也要有很多资源啊,比如工具条,菜单什么的
#7
哦,我的不需要 :)
自己在顶。。。
自己在顶。。。
#8
再UP
谁知道CJJFrameWnd是什么类呀?编译时提示我不能从一个静态的CJJFrameWnd类转化为一个静态的CFrameWnd类。可是我没声明定义什么CJJFrameWnd类呀。注释掉那句话就编译通过了,但关闭时出问题,那个语句是个回掉函数,处理关闭的。
谁知道CJJFrameWnd是什么类呀?编译时提示我不能从一个静态的CJJFrameWnd类转化为一个静态的CFrameWnd类。可是我没声明定义什么CJJFrameWnd类呀。注释掉那句话就编译通过了,但关闭时出问题,那个语句是个回掉函数,处理关闭的。
#9
gz
#10
是CCJFramWnd类。
问题没解决,绕过去了,我把Frame上面的叉叉去掉了,现在只有个蓝条儿,只能点击关闭退出。
问题没解决,绕过去了,我把Frame上面的叉叉去掉了,现在只有个蓝条儿,只能点击关闭退出。
#1
可以的,我以前程序中就在View中另开了一个Frame来显示图片
下面是我的创建并显示新frame的代码,希望对你有所帮助
// 新建并打开图片浏览窗口
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
_ASSERT(pGraphFrame->IsKindOf(RUNTIME_CLASS(CGraphViewerFrame)));
//pGraphFrame->Create(NULL, _T("Window Name"), WS_OVERLAPPEDWINDOW, rectDefault, this);
VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
pGraphFrame->ShowWindow(SW_SHOW);
下面是我的创建并显示新frame的代码,希望对你有所帮助
// 新建并打开图片浏览窗口
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
_ASSERT(pGraphFrame->IsKindOf(RUNTIME_CLASS(CGraphViewerFrame)));
//pGraphFrame->Create(NULL, _T("Window Name"), WS_OVERLAPPEDWINDOW, rectDefault, this);
VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
pGraphFrame->ShowWindow(SW_SHOW);
#2
注意:IMPLEMENT_DYNCREATE(CPrintFrame, CFrameWnd)、DECLARE_DYNCREATE(CPrintFrame)两句不能去掉
#3
参考:http://www.vckbase.com/document/viewdoc/?id=691
这个例子可能对你有启发
这个例子可能对你有启发
#4
Semigod():
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
怎么用的?我的因为在析构函数里带入了参数,所以不能用CreateObject()的吧?还有你那句VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
怎么会有个IDR_GRAPHVIEWER资源和它关联呢?
我又看了一下,例子用的不是DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE,改成了DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC,编译通过了,但问题还是存在,就是点击窗口上的最大化后的“X”关闭存在问题,象是死机的状态(白屏,Frame的蓝条存在),再一次,程序退出。
CRuntimeClass * pRtclass = RUNTIME_CLASS(CGraphViewerFrame);
CGraphViewerFrame * pGraphFrame = (CGraphViewerFrame *)pRtclass->CreateObject();
怎么用的?我的因为在析构函数里带入了参数,所以不能用CreateObject()的吧?还有你那句VERIFY(pGraphFrame->LoadFrame(IDR_GRAPHVIEWER));
怎么会有个IDR_GRAPHVIEWER资源和它关联呢?
我又看了一下,例子用的不是DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE,改成了DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC,编译通过了,但问题还是存在,就是点击窗口上的最大化后的“X”关闭存在问题,象是死机的状态(白屏,Frame的蓝条存在),再一次,程序退出。
#5
vcleaner:
谢谢不做大哥的大哥的帮助,呵呵
这个例子和我的情况不太一样 :)
谢谢不做大哥的大哥的帮助,呵呵
这个例子和我的情况不太一样 :)
#6
就象Mainframe一样,那个frame窗口也要有很多资源啊,比如工具条,菜单什么的
#7
哦,我的不需要 :)
自己在顶。。。
自己在顶。。。
#8
再UP
谁知道CJJFrameWnd是什么类呀?编译时提示我不能从一个静态的CJJFrameWnd类转化为一个静态的CFrameWnd类。可是我没声明定义什么CJJFrameWnd类呀。注释掉那句话就编译通过了,但关闭时出问题,那个语句是个回掉函数,处理关闭的。
谁知道CJJFrameWnd是什么类呀?编译时提示我不能从一个静态的CJJFrameWnd类转化为一个静态的CFrameWnd类。可是我没声明定义什么CJJFrameWnd类呀。注释掉那句话就编译通过了,但关闭时出问题,那个语句是个回掉函数,处理关闭的。
#9
gz
#10
是CCJFramWnd类。
问题没解决,绕过去了,我把Frame上面的叉叉去掉了,现在只有个蓝条儿,只能点击关闭退出。
问题没解决,绕过去了,我把Frame上面的叉叉去掉了,现在只有个蓝条儿,只能点击关闭退出。