对MFC指手划脚(2)

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简单包装而已,简单!,同时也让人去关注不必要的现实细节!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值