WEB开发网
开发学院软件开发VC MFC教程(12)-- 对话框和对话框类CDialog(2)... 阅读

MFC教程(12)-- 对话框和对话框类CDialog(2)

 2010-03-25 20:34:58 来源:WEB开发网   
核心提示:覆盖的虚拟函数CWnd的CalcWindowRectCView的OnPrepareDC、OnScroll、OnScrollBy用于DEBUG的Dump和AssertValid这里,覆盖的消息处理函数和虚拟函数共同完成对滚动条、滚动消息的处理,MFC教程(12)-- 对话框和对话框类CDialog(2)(7),在CSrc

覆盖的虚拟函数

CWnd的CalcWindowRect

CView的OnPrepareDC、OnScroll、OnScrollBy

用于DEBUG的Dump和AssertValid

这里,覆盖的消息处理函数和虚拟函数共同完成对滚动条、滚动消息的处理。

在CSrcollView的实现涉及到许多和Windows映射模式、坐标转换等相关的函数的使用。这里,不作具体讨论。

CFormView

CFormView派生于CSrcollView,本身没有增加新的函数,但覆盖了一些基类的虚拟函数,增加了几个成员变量(以下列出的不包含OLE处理)。

增加的成员变量

LPCTSTR m_lpszTemplateName;
CCreateContext* m_pCreateContext;
HWND m_hWndFocus; // last window to have focus

m_lpszTemplateName用来保存创建视图的对话框模板的名称,_pCreateContext用来保存创建上下文,m_hWndFocus用来保存最近一次拥有焦点的控制窗口。在构造CFormView对象时,构造函数把有关信息保存到成员变量中,如下所示:

CFormView::CFormView(LPCTSTR lpszTemplateName)
{
m_lpszTemplateName = lpszTemplateName;
m_pCreateContext = NULL;
m_hWndFocus = NULL; // focus window is font
}

覆盖的虚拟函数

virtual void OnDraw(CDC* pDC); // MFC缺省处理空
virtual BOOL Create(LPCTSTR, LPCTSTR, DWORD,
const RECT&, CWnd*, UINT, CCreateContext*);
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual void OnActivateView(BOOL, CView*, CView*);
virtual void OnActivateFrame(UINT, CFrameWnd*);

创建基于对话框的视窗口,不同于创建普通视窗口(前者调用CWnd::CreateEx,后者调用CWnd::CreateDlg),故需要覆盖Create虚拟函数。

覆盖PreTranslateMessage是为了过滤对话框消息,把一些消息让CFormView对象来处理。

覆盖了两个消息处理函数:

afx_msg int OnCreate(LPCREATESTRUCT lpcs);
afx_msg void OnSetFocus(CWnd* pOldWnd);

下面,分析几个函数作。Create函数解释了MFC如何使用一个对话框作为视的方法,PreTranslateMessage显示了CFormView不同于CDialog的实现。

上一页  2 3 4 5 6 7 8 9  下一页

Tags:MFC 教程 对话框

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接