コード例 #1
0
        protected override IntPtr OnCommand(IntPtr hWnd, WM msg, IntPtr wParam, IntPtr lParam)
        {
            BN code = (BN)(wParam.ToInt32() >> 16);

            switch (code)
            {
            case BN.CLICKED:
                OnClick(EventArgs.Empty);
                Win32Window.SendMessage(m_hwndControl, (int)BM.SETCHECK, (int)BST.CHECKED, 0);
                return(IntPtr.Zero);

            case BN.KILLFOCUS:
                OnLostFocus(EventArgs.Empty);
                return(IntPtr.Zero);

            case BN.SETFOCUS:
                OnGotFocus(EventArgs.Empty);
                return(IntPtr.Zero);

            case BN.DBLCLK:
                OnDoubleClick(EventArgs.Empty);
                return(IntPtr.Zero);

            default:
                return(Win32Window.CallWindowProc(prevWndProc, hWnd, msg, wParam, lParam));
            }
        }
コード例 #2
0
 protected virtual IntPtr WndProc(IntPtr hWnd, WM msg, IntPtr wParam, IntPtr lParam)
 {
     //System.Diagnostics.Debug.WriteLine(string.Format("{1:X} {0}", ((WM)msg).ToString(), hWnd));
     // For WM_DESTROY - unsubclass the control
     if ((WM)msg == WM.DESTROY)
     {
         IntPtr p = prevWndProc;
         Unsubclass();
         return(Win32Window.CallWindowProc(p, hWnd, msg, wParam, lParam));
     }
     else if ((WM)msg == WM.DRAWITEM)
     {
         return((IntPtr)OnDrawItem(hWnd, msg, wParam, lParam));
     }
     else if ((WM)msg == WM.MEASUREITEM)
     {
         return((IntPtr)OnMeasureItem(hWnd, msg, wParam, lParam));
     }
     else if ((WM)msg == WM.NOTIFY)
     {
         return((IntPtr)OnNotify(hWnd, msg, wParam, lParam));
     }
     else if ((WM)msg == WM.COMMAND)
     {
         return((IntPtr)OnCommand(hWnd, msg, wParam, lParam));
     }
     else if ((WM)msg == WM.SIZE)
     {
         OnResize(EventArgs.Empty);
         return(IntPtr.Zero);
     }
     else
     {
         return(Win32Window.CallWindowProc(prevWndProc, hWnd, msg, wParam, lParam));
     }
 }
コード例 #3
0
        protected override IntPtr OnNotify(IntPtr hWnd, WM msg, IntPtr wParam, IntPtr lParam)
        {
            if (prevWndProc == IntPtr.Zero)
            {
                return(IntPtr.Zero);
            }


            NMCUSTOMDRAW nmcd = (NMCUSTOMDRAW)Marshal.PtrToStructure(lParam, typeof(NMCUSTOMDRAW));

            //System.Diagnostics.Debug.WriteLine(string.Format("{0}", (NM)nmcd.hdr.code));

            if (nmcd.hdr.code == (int)NM.DBLCLK)
            {
                OnDoubleClick(EventArgs.Empty);
                return(IntPtr.Zero);
            }

            if (nmcd.hdr.code != (int)NM.CUSTOMDRAW || nmcd.hdr.hwndFrom != control.Handle)
            {
                return(Win32Window.CallWindowProc(prevWndProc, hWnd, msg, wParam, lParam));
            }


            CustomDrawType cd = (CustomDrawType)Marshal.PtrToStructure(lParam, typeof(CustomDrawType));

            //System.Diagnostics.Debug.WriteLine(cd.dwDrawStage);
            try
            {
                switch (cd.dwDrawStage)
                {
                case CDDS.PREPAINT:
                    if (FullPaint && !OnPrepaint(ref cd))
                    {
                        return((IntPtr)CDRF.DODEFAULT);
                    }
                    return((IntPtr)(CDRF.NOTIFYITEMDRAW | CDRF.NOTIFYPOSTERASE | CDRF.NOTIFYSUBITEMDRAW | CDRF.NOTIFYPOSTPAINT));

                case CDDS.ITEMPREPAINT:
                    //if (listView.View == View.Details)
                    //    return (int)CDRF.NOTIFYSUBITEMDRAW;
                    if (!OnPrepaintItem(ref cd))
                    {
                        return((IntPtr)CDRF.DODEFAULT);
                    }
                    if (fullPaint)
                    {
                        return((IntPtr)(CDRF.SKIPDEFAULT));
                    }
                    else
                    {
                        return((IntPtr)(CDRF.NOTIFYSUBITEMDRAW));
                    }

                case CDDS.SUBITEMPREPAINT:
                    if (!OnPrepaintItem(ref cd))
                    {
                        return((IntPtr)CDRF.DODEFAULT);
                    }
                    if (fullPaint)
                    {
                        return((IntPtr)(CDRF.SKIPDEFAULT));
                    }
                    else
                    {
                        return((IntPtr)(CDRF.NOTIFYITEMDRAW));
                    }

                case CDDS.ITEMPOSTPAINT:
                    return((IntPtr)(CDRF.SKIPDEFAULT));

                case CDDS.PREERASE:
                    if (fullPaint || !OnPreerase(ref cd))
                    {
                        return((IntPtr)CDRF.DODEFAULT);
                    }
                    return((IntPtr)(CDRF.NOTIFYPOSTERASE));
                }
            }
            finally
            {
                Marshal.StructureToPtr(cd, lParam, false);
            }

            return((IntPtr)CDRF.DODEFAULT);
        }
コード例 #4
0
 protected override IntPtr OnCommand(IntPtr hWnd, WM msg, IntPtr wParam, IntPtr lParam)
 {
     return(Win32Window.CallWindowProc(prevWndProc, hWnd, msg, wParam, lParam));
 }