• 您的位置我爱Aspx >> VC.Net >> 走出MFC子类化的迷宫
  • 走出MFC子类化的迷宫

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:49:05  关键字:
  • void CProg1Dlg::OnSetfocusEdit1()

    {

    // TODO: Add your control notification handler code here

    m_edit.SetWindowText("");

    m_edit.SetFocus();

    }

    OK,一切搞定!和SDK的子类化方法比起来,这是多么的容易!

    我们看看MFC背着我们到底做了什么!这里主要解决两个容易让初学者比较疑惑的问题:

    1、 m_edit只是我们定义的一个C++类对象,为什么通过它调用其成员函数SetWindowText便可以控制我们程序中资源编号为:IDC_EDIT1的控件?

    2、 CSuperEdit类为什么可以处理WM_CHAR消息?

    大家都知道,控制Windows窗口、控件、资源……都是通过它们的句柄来实现,如

    HHANDLE、HWND、HDC都是句柄,它表现为一个32位长整形数据,存放于Windows中的特定区域,我们可以把它理解为指向我们想控制的窗口、控件、资源的索引,有了它,我们就可以控制我们想要控制的对象。

    这里你可以想到为什么多数API函数都有一个参数HWND hwnd了吧!

    BOOL SetWindowText( HWND hWnd, // handle to window or control LPCTSTR lpString // title or text); 我们的C++变量m_edit要想控制IDC_EDIT1,也要通过它的句柄,但这又是如何实现的呢?您可能注意到了m_edit.SubclassDlgItem(IDC_EDIT1,this);一句,对了,这就是关键所在! 在此处F9设置断点,F5之后,程序到达此处,F11跟入SubclassDlgItem函数: BOOL CWnd::SubclassDlgItem(UINT nID, CWnd* pParent) { ASSERT(pParent != NULL); ASSERT(::IsWindow(pParent->m_hWnd)); // check for normal dialog control first HWND hWndControl = ::GetDlgItem(pParent->m_hWnd, nID);我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:传递自动化字符串数组
    下一篇:C#和C++的速度大比拼(二)
  • 相关文章