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

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

 2010-03-25 20:35:00 来源:WEB开发网   
核心提示:对话框操作函数void MapDialogRect( LPRECT lpRect ) const;void NextDlgCtrl( ) const;void PrevDlgCtrl( ) const;void GotoDlgCtrl( CWnd* pWndCtrl );void SetDefID( UINT nID

对话框操作函数

void MapDialogRect( LPRECT lpRect ) const;
void NextDlgCtrl( ) const;
void PrevDlgCtrl( ) const;
void GotoDlgCtrl( CWnd* pWndCtrl );
void SetDefID( UINT nID );
void SetHelpID( UINT nIDR );
void EndDialog( int nResult );

虚拟函数

virtual int DoModal( );
virtual BOOL OnInitDialog( );
virtual void OnSetFont( CFont* pFont );
virtual void OnOK( );
virtual void OnCancel( );

MFC模式对话框的实现

从前面的介绍可以知道,Win32 SDK编程下的模式对话框使用了Windows提供给对话框窗口的窗口过程和自己的对话框过程,对话框过程将被窗口过程调用。但在MFC下,所有的窗口类都使用了同一个窗口过程,CDialog也不例外。CDialog对象在创建Windows对话框时,采用了类似于CWnd的创建函数过程,采用子类化的手段将Windows提供给对话框的窗口过程取代为AfxWndProc或者AfxBaseWndProc,同时提供了对话框过程AfxDlgProc。那么,这些“过程”是如何实现或者协调的呢?下文将予以分析。

MFC对话框过程

MFC对话框过程AfxDlgProc的原型和实现如下:

BOOL CALLBACK AfxDlgProc(HWND hWnd,
UINT message, PARAM, LPARAM)
{
if (message == WM_INITDIALOG)
{
//处理WM_INITDIALOG消息
CDialog* pDlg = DYNAMIC_DOWNCAST(CDialog,
CWnd::FromHandlePermanent(hWnd));
if (pDlg != NULL)
return pDlg->OnInitDialog();
else
return 1;
}
return 0;
}

由上可以看出,MFC的对话框函数AfxDlgProc仅处理消息WM_INITDIALOG,其他都留给对话框窗口过程处理。因此,它不同于SDK编程的对话框过程。程序员在SDK的对话框过程处理消息和事件,实现自己的对话框功能。

AfxDlgProc处理WM_INITDIALOG消息时调用虚拟函数OnInitDialog,给程序员一个机会处理对话框的初始化。

上一页  1 2 3 4 5 6 7  下一页

Tags:MFC 教程 对话框

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