在编写MFC代码时会发现自己写的所有控件和窗口都是从一个基类继承而来的,但是自己把派生类写好之后并没有把派生类覆盖到基类身上,但是自己写的派生类还是被运行了。
class A
{
public:
virtual int f()=0;
};class B : public A
{
public:
virtual int f()
{
return 12;
}
};A *a;
B b;
main()
{
a=&b;
std::cout<<a->f();
}
比如上面的写法,一定需要吧派生类b覆盖回虚基类a,才能执行std::cout<<a->f();我想MFC中也有类似的过程,但是它具体是怎么做到的?MFC中还有一个奇怪的地方:
int CMFCDirectXApp::Run()
{
// TODO: 在此添加专用代码和/或调用基类 while (msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
} return CWinApp::Run();
}
上面是在CMFCDirectXApp中重载了Run(),但是代码的最后一行“return CWinApp::Run();”是什么意思,具体作用是什么?谢谢!
class A
{
public:
virtual int f()=0;
};class B : public A
{
public:
virtual int f()
{
return 12;
}
};A *a;
B b;
main()
{
a=&b;
std::cout<<a->f();
}
比如上面的写法,一定需要吧派生类b覆盖回虚基类a,才能执行std::cout<<a->f();我想MFC中也有类似的过程,但是它具体是怎么做到的?MFC中还有一个奇怪的地方:
int CMFCDirectXApp::Run()
{
// TODO: 在此添加专用代码和/或调用基类 while (msg.message!=WM_QUIT)
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
} return CWinApp::Run();
}
上面是在CMFCDirectXApp中重载了Run(),但是代码的最后一行“return CWinApp::Run();”是什么意思,具体作用是什么?谢谢!
解决方案 »
- 如何将unicode转换成字符串
- 获取文件的路径
- 一个连续发100个数据包造成SOCKET阻塞的问题!!急呀!!
- 如何通过IHTMLElement取得页面上<input type=text name=inputName1 id=inputName >name?
- 初学windows编程,LoadBitmap函数问题。
- 关于DialogBar和OpenDialog的小问题。。。
- mp3问题
- 请问怎样让一个程序的窗口运行时,在任务条上不显示它的存在呢?
- 兼容DC的问题
- error C2065: 'UpdateData' : undeclared identifier
- 如何截获局域网内的所有MAC侦
- 想学习点SOCKET编程的基础
楼主看来被迷惑了~
推荐你看《C++对象模型》
一个是cmfcdirectxapp的RUN,一个是基类cwinapp的run
是重载了CWinApp的Run() 函数的,所以如果执行了CMFCDirectXApp的Run() 那么CWinApp的Run() 就不再执行了。因为CWinApp::Run()中也许有默认的执行程序,所以为了程序能调用那些默认的程序,就要在后面加上CWinApp::Run(),来执行CWinApp 中的Run方法。
表示调用基类CWinApp的Run()函数。