MFC面试题总结

主宰稳场 提交于 2019-12-07 10:42:45

1.  MFC包含哪几类程序?其中MFC应用程序又包含哪几类?

单文档SDI,多文档MDI,对话框dialog
2. MFC
的中的大多数类都继承自哪个类?

http://www.cppblog.com/andxie99/archive/2008/06/04/9747.html
3. MFC主要要用到哪几个类?及其各个类的作用。

1。CXApp (应用程序类)

2。CXDoc(文档类)

3。CFrameWnd (框架窗口类)

4。CXView (视图类)
4. MFC中有哪6类核心机制?Cobject中封装了哪些机制?

1、MFC程序的初始化。

基本流程:注册窗口,创建窗口,显示更新窗口,消息循环,回调函数

http://www.jizhuomi.com/software/267.html

2、运行时类型识别(RTTI)。

http://blog.csdn.net/ithzhang/article/details/7633202

3、动态创建。

http://www.jizhuomi.com/software/271.html

4、永久保存。

http://www.jizhuomi.com/software/273.html

5、消息映射。

6、消息传递。

http://www.jizhuomi.com/software/275.html

 

Cobject中包括支持序列化,支持运行时提供类信息,支持动态创建以及支持对象诊断输出等,所以凡是从CObject类继承的类都有这些功能。
5. 在哪个类的什么函数中进行MFC程序初始化?相当于main功能的函数。

pApp->InitInstance();


6. MFC应用程序的启动机制的实现。(几个步骤及相关函数)

http://blog.csdn.net/ithzhang/article/details/7644481


7. 窗口的创建及窗口处理函数机制的实现。(几个步骤及相关用到函数)

http://anfirst.cn/archives/438

wndcls.lpfnWndProc = DefWindowProc

_AfxCbtFilterHook通过调用SetWindowLong()AfxWndProc()的入口地址置换掉DefWindowProc

CWnd* pWnd = CWnd::FromHandlePermanent(hWnd)

http://yangbinfx.iteye.com/blog/1998740


8. 消息映射机制的原理及实现。宏。(查找消息处理函数的几个步骤及其函数)

http://www.cnblogs.com/weare/archive/2013/06/04/3117950.html

MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的,也就是他们是绑定在一起的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态对照表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可以知道该类能否处理此消息。如果能处理该消息,则同样依照静态表能很容易找到并调用对应的消息处理函数
9. MFC的消息分类。自注册消息用什么函数进行注册?消息映射宏是什么?

http://www.cnblogs.com/wind-net/archive/2012/11/02/2750828.html

、自定义消息的发送与响应:
1
、自定义消息号:#define WM_CCTRY_MSG (WM_USER+100)
2
、在头文件中添加消息响应函数的声明:afx_msg LRESULT OnCcTryMsg(WPARAM wParam, LPARAM lParam);
3
、在CPP文件中添加消息响应函数的实现:
LRESULTCXXXDlg::OnCcTryMsg(WPARAM wParam, LPARAM lParam) {

//相关代码;
}

4、在 BEGIN_MESSAGE_MAP END_MESSAGE_MAP 之间加入消息的映射代码:ON_MESSAGE(WM_CCTRY_MSG, &CDlgTestDlg::OnCcTryMsg)
5
、消息的发送:
10. MFC菜单、工具栏、状态栏所用的类是什么?

http://www.jizhuomi.com/software/212.htmlCMenu类

http://www.jizhuomi.com/software/215.htmlCToolBar类

http://www.jizhuomi.com/software/219.html CStatusBar类


11. 怎么定义一个视图窗口?

继承cview类

http://www.jizhuomi.com/software/221.html
12. 划分窗口使用什么类?划分窗口有哪两类,有什么区别?

http://www.jizhuomi.com/software/226.html CSplitterWnd类
13. 运行时类信息机制的宏,及原理。CRuntimeClass的内容,isKindOf实现方法。

IsKindOf能够侦测某个对象是否属于某种类。即判断某一对象所属的类是否是父类或当前类;要达到动态类型识别的能力,必须在构建类继承体系时记录必要的信息,这被称为类型型录表。

MFC以链表的方式建立了此表DECLAR_DYNAMICIMPLENMENT_DYNAMIC宏使用这两个宏将CRuntimeClass对象不知不觉放到类之中。

1.  class CRuntimeClass  

2.    

3.  {  

4.    

5.  public:  

6.    

7.     LPCSTR m_lpszClassName;//对象所属类名  

8.    

9.     Int m_nObjectSize;//对象大小  

10.   

11.    UINT m_wSchema;//模式号  

12.   

13.    CObject *(PASCAL*m_pfnCreateObject)();//构建函数抽象类为NULL  

14.   

15.    CRuntimeClass *pBaseClasss;//基类CRuntimeClass对象指针。  

16.   

17.    Static CRuntimeClass *pFirstClass;//链表头指针。  

18.   

19.    CRuntimeClass  *m_pNextClass;//下一指针。  

20.   

21. }; 


14. 动态创建机制的宏,及实现。与运行时类信息在内容添加上的区别?

每一类的构建函数可以记录在类型别录中,当获得一个类名称,通过查找类别型录表找出对应的元素,然后调用其构建函数产生新对象。在CRuntimeClass中m_pfnCreateObject即为构建函数首地址。为了实现动态创建,需要添加两个宏:

DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE

注意对象构建函数为static函数。

为了支持动态创建需要在CRuntimeClass内添加两个函数:CreateObject和CRuntimeClass::Load成员函数。
15. 消息的派发会经过哪几个类?一般在哪个类里进行处理?SetActiveView的作用。


16. 单文档、多文档模板类是什么?保存模板类用什么函数?新建模板用什么函数?

http://zhan.renren.com/songxiwei?gid=3602888498033054825&checked=true


17. 单文档视图的创建过程及所用到的相关函数。

http://blog.csdn.net/wuan584974722/article/details/25159451
18. MFC绘图有哪几类DC?各自的类名,及区别。

http://blog.csdn.net/yam_killer/article/details/7661449

      CObject
      public |------CDC
      public|------|------CClientDC
      public|------|------CPaintDC
      public|------|------CWindowDC
      public|------|------CMetaFileDC

19. MFC有哪几类绘图对象?各自的类名。

CBrush - 刷子定义了一种位图形式的像素,用它可以对区域内部填充颜色。

CFont - 字体是一种具有某种风格和尺寸的所有字符的集合。

CPalette - 调色板是一种颜色映射接口。

CPen - 笔是一种画线和有形边框的工具,可以指定画线的宽度,以及画虚线,实线等。

CRgn -区域是一种范围,可以用它来填充、裁剪以及鼠标点中测试。

http://blog.sina.com.cn/s/blog_98a4dde70101a038.html
20. MFC有哪几类数据集合类?CMAP的底层实现?

Array:数组

  List:双向链表

  Map:又称为Dictionary,其内对象成对存在,一为键值对象(key object),一为实值对象(value object)

http://blog.csdn.net/islyb/article/details/3253878
21. MFC的文件类是什么?文件查找类是什么?

http://blog.csdn.net/wangpei421/article/details/7367303

CFile为基础,从CFile派生出几个类,如CStdioFileCMemFileMFC内部使用的CMiororFile

CFileFind
22. 序列化机制的宏,怎么使用?执行>><<时进行的内部操作及其相应函数。

即想要从CObject派生的MyClass成为可以动态创建的对象只要用到DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏就可以了(注意:最终可以Serialize的对象仅仅用到了DECLARE_SERIAL/IMPLEMENT_SERIAL宏,这是因为DECLARE_SERIAL/IMPLEMENT_SERIAL包含了DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏)。
23. MFC的对话框的种类,各自怎么使用?及相关函数。

对话框的种类

 

  Windows中有两种对话框,模态对话框和非模态对话框,构造两种对话框的大多数工作都相同,只是两者的显示和数据处理有些不同。

 

   模态对话框 (Modal Dialog Boxes)工作时使其父类窗口无效,直到对话框结束,也就是说,该对话框打开后,程序等待用户输入并关闭对话框后才执行其它任务。例如Windows中 常见的File|Open对话框,需用户选择一个文件打开或按取消按钮关闭对话框后程序才继续执行。对系统而言,打开一个模态对话框相当于函数调用,只有 当函数运行结束,从被调函数返回时,主调函数才能执行下一步。调用DoModal函数可以显示模态对话框。如:

 

CMyDialog dlg ;

dlg.DoModal();

DoModal返回用户按下的按钮ID值(如IDOK或IDCANCEL),按下OK或CANCEL按钮后,自动调用CDialog::EndDialog关闭对话框。

 

  非模态对话框 ( Modeless Dialog Boxes) 与模态对话框相反,对话框打开期间,允许用户切换到程序其它部分,不一定要关闭对话框。 WinWord中的Find and Replace对话框就是一个典型的非模态对话框。对系统而言,一个非模态对话框相当于另一个需要支持的线程,可以说是执行中的另外一个程序。调用Create函数创建并显示非模态对话框:

CMyDialog dlg;

dlg.Create();
24. 定义对话框数据交换的步骤,及使用方法,实现原理。

http://hwzhao19830904.blog.163.com/blog/static/15623551200731514654469/
25. 通用对话框有哪些,试举例。

http://wenku.baidu.com/link?url=jl8Fxmu4KzvLLcS2KfJ8dPbpJGb_riemScNkfyCMom0gDbLZqiIKDxT5TbZjyh8ClGwJYHxW6-0No88i4lrvxp-WYYa5HbULWRVSE3zGsPS
26. MFC常用的通用控件有哪些?举出类名。

http://blog.csdn.net/zhengknight/article/details/5014903

CButton

按钮控件、单选钮控件、复选框控件、分组框控件

ComboBox

组合框控件

CEdit

编辑框控件

CListBox

列表框控件

CStatic

静态文本控件


27. MFC的动态库有哪几种类型?扩展库一般用来做什么?

扩展DLL和规则DLL

http://blog.csdn.net/long458/article/details/4698963
28. MFC的线程有哪几类?相互有什么区别?各自的创建方法是什么?

http://blog.csdn.net/guzhou_diaoke/article/details/8155171进程和线程的生命过程

http://blog.csdn.net/grief_of_the_nazgul/article/details/7865195

工作者线程和用户界面线程
29. VC环境下可以使用哪几类socket其中MFCsocket有哪几种,各自区别?类名是什么?用什么函数初始化MFCsocket库。

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCPsocket编程是采用的流式套接字(SOCK_STREAM)。基于UDP采用的数据报套接字(SOCK_DGRAM).

CSocket类是由CAsyncSocket

http://blog.csdn.net/fengxo/article/details/4866007

WASAStartup函数初始化套接字库。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!