title: What do these C++ code snippets do?
body: <pre><code>#ifdef _DEBUG
      #define new DEBUG_NEW
      #undef THIS_FILE
      static char THIS_FILE[] = __FILE__;
  #endif
  </code></pre>
  
  <p>Why define these tags?</p>
  
  <pre><code>CSortHeaderCtrl::CSortHeaderCtrl()
      : m_iSortColumn( -1 )
      , m_bSortAscending( TRUE )
  {
  }
  </code></pre>
  
  <p>What are the two functions after colon used for?</p>
  
  <pre><code>BEGIN_MESSAGE_MAP(CSortHeaderCtrl, CHeaderCtrl)
      //{{AFX_MSG_MAP(CSortHeaderCtrl)
          // NOTE - the ClassWizard will add and remove mapping macros here.
      //}}AFX_MSG_MAP
  END_MESSAGE_MAP()
  </code></pre>
  
  <p>Are there any similar things in C# like this?</p>
  
  <p>What's this used for?</p>
  
  <pre><code>virtual ~CSortHeaderCtrl();
  </code></pre>
  
  <p>Why set the destructor function to be virtual?</p>
  
  <pre><code>void CSortHeaderCtrl::Serialize( CArchive&amp; ar )
  </code></pre>
  
  <p>When will this function be called?</p>
  
  <p>Is this extended from parent?</p>
  
  <p>By the way, when you want to extend a MFC class, what document you will read?</p>
  
  <p>Since we don't know what function it has, what function can we override?</p>
  
  <p>The following is the header file:</p>
  
  <pre><code>/* File: SortHeaderCtrl.h 
  
     Purpose:  Provides the header control, with drawing of
               the arrows, for the list control.
  */
  
  #ifndef SORTHEADERCTRL_H
  #define SORTHEADERCTRL_H
  
  #if _MSC_VER &gt; 1000
      #pragma once
  #endif // _MSC_VER &gt; 1000
  
  class CSortHeaderCtrl : public
  CHeaderCtrl { // Construction public:
      CSortHeaderCtrl();
  
      // Attributes public:
  
      // Operations public:
  
      // Overrides     // ClassWizard generated
      virtual function overrides
          //{{AFX_VIRTUAL(CSortHeaderCtrl)
          public:     virtual void Serialize(CArchive&amp; ar);
          //}}AFX_VIRTUAL
  
      // Implementation public:     virtual
      ~CSortHeaderCtrl();
  
      void SetSortArrow( 
          const int iColumn,
          const BOOL bAscending );
  
          // Generated message map functions
      protected:     
          void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct );
  
          int m_iSortColumn;     
          BOOL m_bSortAscending;
  
          //{{AFX_MSG(CSortHeaderCtrl)         //
          NOTE - the ClassWizard will add and
          remove member functions here.
          //}}AFX_MSG
  
      DECLARE_MESSAGE_MAP() };
  
  //{{AFX_INSERT_LOCATION}} // Microsoft
  Visual C++ will insert additional
  declarations immediately before the
  previous line.
  
  #endif // SORTHEADERCTRL_H
  </code></pre>