1、VC单文档的4个主要的类
文档类 (CDocument)负责程序数据的读取、写入和存储;
视图类 (CView)负责处理用户输入和管理视图窗口,显示程序数据;
主框架类 (CMainFrame) 负责管理主程序窗口。
应用程序类 (CWinApp) 管理整个程序。
2、视图类如何从文档类获取数据?
CxxxDoc *pDoc = GetDocument(); //获取文档类指针
ASSERT_VALID(pDoc);
3、设备描述表(CDC)?
提供将输出显示在设备上的一组成员函数。
4、程序控制流程
a、CWinApp类构造函数
b、WinMain
c、InitInstance
d、消息循环
e、消息退出
5、如何获取应用程序类对象的指针?
AfxGetApp()函数
6、命令消息可用四个主程序类(视图、文档、主帧窗口和应用程序类)的任何类处理
7、菜单命令消息的处理器
COMMAND UPDATE UI消息:在包含该命令的弹出菜单显示之前发出;
COMMAND消息:在用户选择菜单命令时发出。
8、MFC类提供的FILE菜单的New、Open、Save、Save As是最近使用文件命令的消息处理器。因此不需要用ClassWizard定义这些命令的处理器。但需要编码支持MFC消息处理器
9、窗口类的设计、注册、显示、更新封装在AfxEndDeferRegisterClass函数中
10、MFC处理过程
theApp
theApp构造函数
WinMain
InitialInstance
AfxEndDeferRegisterClass ---- 注册窗口
PreCreateWindow
CFrameWnd::Create ---- 创建窗口
ShowWindow
UpdateWindow
pThread->run ---- 消息循环
PumpMessage ----
-->获取消息
-->转换消息
-->路由消息
-->默认窗口处理函数处理(实际由消息映射来进行处理)
11、一个MFC程序的四个类(CMainFrame、CXXXDoc、CXXXView、CXXXApp)是如何组织在一起的?
在CXXXAPP::InitInstance()中,使用CSingleDocTemplate *pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CXXXDoc ),
RUNTIME_CLASS(CMainFrame ),
RUNTIME_CLASS(CXXXView ),
);
AddDocTemplate(pDocTemplate);
将四个类有机的组合起来。
12、画图相关的操作
/*
HDC hdc;
hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
*/
/*
CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
*/
//CClientDC dc(this);
/*
CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
*/
//CWindowDC dc(this);
//CWindowDC dc(GetParent());
/*CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);*/
/*CPen pen(PS_DOT,1,RGB(0,255,0));
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);*/
// CBrush brush(RGB(255,0,0));
/*CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);*/
/*CClientDC dc(this);
//dc.FillRect(CRect(m_ptOrigin,point),&brush);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
CBrush *pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);*/
m_bDraw=FALSE;
13、画图使用到的工具
CPen
CBrush
14、CXXXView::OnDraw(CDC *pDc)
视图产生、变化是进行重绘的函数。
15、字符串类CSting、字体类CFont
16、消息的分类
标准消息 :所有除WM_COMMAND外以开头的消息。从CWnd派生的类,均可以接收标准消息。
命令消息 :来自菜单、加速键或工具栏按钮的消息。这类消息均以WM_COMMAND呈现,在MFC中,不同消息的通过菜单项的ID区分;
在SDK中,通过wParam参数区分。从CCmdTarget派生的类,均可以接收命令消息。
通告消息 :由控件产生的消息,用于向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND的形式呈现。从
CCmdTarget派生的类,均可以接收通知消息。
17、对菜单消息的响应顺序:view>doc>mainframe>app
菜单可以静态创建、也可以动态创建。
AppendMenu
18、集合类
19、GetActiveView获取当前视图类指针
20、静态菜单和动态菜单
21、命令消息的路由
21、对话框相关的操作通过CDialog类来完成
22、对话框分为模态对话框和非模态对话框
模态对话框:模态对话框运行时,应用程序暂停,直到模态对话框关闭为止。模态对话框的关闭由CDialog::EndDialog来完成。
非模态对话框:非模态对话框运行时,应用程序可以运行其他任务,不需要关闭或取消非模态对话框。
23、模态对话框
创建:DoModal
关闭:EndDialog
销毁:DestroyWindow
24、非模态对话框
创建:Create
关闭:EndDialog
销毁:DestroyWindow
25、GetDlgItem
获取对话框上指定控件的指针
26、DDX
将控件和成员变量进行关联(如DDX_Text)。
控件和成员变量的关联放在DoDataExchange函数中
27、对话框控件的7种访问方式
GetDlgItem()->G(S)etWindowTest()
G(S)etDlgItemText
G(S)etDlgItemInt
将控件与整型变量关联
将控件与控件变量关联
SendMessage
SendDlgItemMessage
28、Z-order