class CDialog : public CWnd
{
DECLARE_DYNAMIC(CDialog)
// Modeless construct
public:
CDialog();
BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
BOOL CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
BOOL CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL);
// Modal construct
public:
CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
BOOL InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
BOOL InitModalIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL);
// Attributes
public:
void MapDialogRect(LPRECT lpRect) const;
void SetHelpID(UINT nIDR);
// Operations
public:
// modal processing
virtual int DoModal();
// support for passing on tab control - use 'PostMessage' if needed
void NextDlgCtrl() const;
void PrevDlgCtrl() const;
void GotoDlgCtrl(CWnd* pWndCtrl);
// default button access
void SetDefID(UINT nID);
DWORD GetDefID() const;
// termination
void EndDialog(int nResult);
// Overridables (special message map entries)
virtual BOOL OnInitDialog();
virtual void OnSetFont(CFont* pFont);
protected:
virtual void OnOK();
virtual void OnCancel();
// Implementation
public:
virtual ~CDialog();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
virtual BOOL PreTranslateMessage(MSG* pMsg);
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
virtual BOOL CheckAutoCenter();
protected:
UINT m_nIDHelp; // Help ID (0 for none, see HID_BASE_RESOURCE)
// parameters for 'DoModal'
LPCTSTR m_lpszTemplateName; // name or MAKEINTRESOURCE
HGLOBAL m_hDialogTemplate; // indirect (m_lpDialogTemplate == NULL)
LPCDLGTEMPLATE m_lpDialogTemplate; // indirect if (m_lpszTemplateName == NULL)
void* m_lpDialogInit; // DLGINIT resource data
CWnd* m_pParentWnd; // parent/owner window
HWND m_hWndTop; // top level parent window (may be disabled)
#ifndef _AFX_NO_OCC_SUPPORT
_AFX_OCC_DIALOG_INFO* m_pOccDialogInfo;
virtual BOOL SetOccDialogInfo(_AFX_OCC_DIALOG_INFO* pOccDialogInfo);
#endif
virtual void PreInitDialog();
// implementation helpers
HWND PreModal();
void PostModal();
BOOL CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd,
void* lpDialogInit, HINSTANCE hInst);
BOOL CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd,
HINSTANCE hInst);
protected:
//{{AFX_MSG(CDialog)
afx_msg LRESULT OnCommandHelp(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnHelpHitTest(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM);
afx_msg LRESULT HandleSetFont(WPARAM, LPARAM);
//}}AFX_MSG
#ifndef _AFX_NO_GRAYDLG_SUPPORT
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
#endif
DECLARE_MESSAGE_MAP()
};
1: // Modeless construct
public:
CDialog();
噢,呵呵,从这个看出CDialog是一个现成的可以用的类,很好,我喜欢,,
2:
BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
2个构造函数,是一个使用资源标号,一个使用资源指针。属于overload函数,此外,还使用了默认参数。C++语言一览无遗。
BOOL CreateIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL, void* lpDialogInit = NULL);
BOOL CreateIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL);
间接创建。使用了全局句柄等参数,难道该成员函数是一个“工厂方法”??
// Modal construct
public:
CDialog(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
CDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
BOOL InitModalIndirect(LPCDLGTEMPLATE lpDialogTemplate, CWnd* pParentWnd = NULL,
void* lpDialogInit = NULL);
BOOL InitModalIndirect(HGLOBAL hDialogTemplate, CWnd* pParentWnd = NULL);
模态对话框与非模态对话框使用不同的构造函数创建,CDialog类是一个直接与用户打交道的类,再一次暴露了CDialog的实现细节。用户还得与这样的细节打交道。哎,MFC就是....,,如果是我自己编MFC程序的时候,一定要对CDialog类再次封装。
3:
void NextDlgCtrl() const;
void PrevDlgCtrl() const;
void GotoDlgCtrl(CWnd* pWndCtrl);
// default button access
void SetDefID(UINT nID);
DWORD GetDefID() const;
从这些函数看来,CDialog作为子控件的容器,势必与子控件形成紧耦合关系。如果我自己对MFC再度封装的话,如何解除他们的紧耦合呢?
4:这样的程序码我都不想看下去了,真是没有什么可以激起点脑力的,:(,,只是对WIN API简单包装而已,简单!,同时也让人去关注不必要的现实细节!