/// <summary>
        ///
        /// </summary>
        /// <param name="pe"></param>
        protected virtual void OnColumnHeaderPaint(ColumnHeaderPaintEventArg pe)
        {
            if (this.SortOnColumnClick)
            {
                if (m_lvwColumnSorter.SortColumn == pe.ColumnHeader.Index)
                {
                    Rectangle rc      = pe.ClipRectangle;
                    Rectangle rcArrow = new Rectangle(rc.Right - 8 - 8, rc.Top + 4, 8, 8);

                    if (m_lvwColumnSorter.Order == SortOrder.Ascending)
                    {
                        DrawDownArrow(pe.Graphics, rcArrow);
                    }
                    else if (m_lvwColumnSorter.Order == SortOrder.Descending)
                    {
                        DrawUpArrow(pe.Graphics, rcArrow);
                    }
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="m"></param>
        protected virtual void CddsItemPostPaint(ref System.Windows.Forms.Message m)
        {
            NMCUSTOMDRAW nmcd = ( NMCUSTOMDRAW )m.GetLParam(typeof(NMCUSTOMDRAW));

            int iColumn = nmcd.dwItemSpec;

            Rectangle rcHeader = new Rectangle(nmcd.rc.left,
                                               nmcd.rc.top,
                                               nmcd.rc.right - nmcd.rc.left,
                                               nmcd.rc.bottom - nmcd.rc.top);

            using (Graphics g = Graphics.FromHdc(nmcd.hdc))
            {
                ColumnHeaderPaintEventArg pe = new ColumnHeaderPaintEventArg(g, rcHeader, this.Columns[iColumn]);

                OnColumnHeaderPaint(pe);
            }

            // free resources and say to control skip default drawing
            m.Result = ( IntPtr )CustomDrawReturnFlags.CDRF_SKIPDEFAULT;
        }