Esempio n. 1
0
 /// <summary>
 /// Осуществляет Custom Draw для TreeView применително к checkbox
 /// </summary>
 private void TreeViewCustomDraw(ref Message msg, Win32.NMTVCUSTOMDRAW tvDraw)
 {
     try
     {
         int hTreeNode = (int)tvDraw.nmcd.dwItemSpec;
         if (hTreeNode == 0)
         {
             msg.Result = new IntPtr((int)Win32.CDRF.CDRF_DODEFAULT);
             return;
         }
         TreeNode curNode = TreeNode.FromHandle(this, new IntPtr(hTreeNode));
         if (curNode == null)
         {
             msg.Result = new IntPtr((int)Win32.CDRF.CDRF_DODEFAULT);
             return;
         }
         TreeView tree = curNode.TreeView;
         if (tree != null)
         {
             if (this.nonCheckedNodes.Contains(curNode))
             {
                 UnckeckNode(curNode.Handle.ToInt32());
             }
         }
     }
     finally
     {
         msg.Result = new IntPtr((int)Win32.CDRF.CDRF_DODEFAULT);
     }
 }
Esempio n. 2
0
 /// <summary>
 /// Проверяет, содержит ли сгобщение флаг CUSTOMDRAW и если
 /// да, то обрабатывает его
 /// </summary>
 private void CheckAndProceedCustomDrawMsg(ref Message m)
 {
     // Обработка сообщения NMTVCUSTOMDRAW, а именно - не осуществляется отрисовка checkbox'ов у
     // узлов, находящихся в nonCheckedNodes
     Win32.NMHDR nmHeader = (Win32.NMHDR)m.GetLParam(typeof(Win32.NMHDR));
     if (nmHeader.code == (int)Win32.NM_CUSTOMDRAW)
     {
         Win32.NMTVCUSTOMDRAW tvDraw = (Win32.NMTVCUSTOMDRAW)m.GetLParam(typeof(Win32.NMTVCUSTOMDRAW));
         if ((int)Win32.CDDS.CDDS_PREPAINT == tvDraw.nmcd.dwDrawStage)
         {
             m.Result = new IntPtr((int)Win32.CDRF.CDRF_NOTIFYITEMDRAW);
         }
         else if ((int)Win32.CDDS.CDDS_ITEMPREPAINT == tvDraw.nmcd.dwDrawStage)
         {
             TreeViewCustomDraw(ref m, tvDraw);
         }
     }
 }