logo

关于 带CheckBoxs的ListView在双击时如何不改变Checked状态? 的评论:

评论日期:2010年04月01日 10:36:50 评论人:SONIC3D
多谢大侠的文章,帮了我大忙,我稍作了点改动,以取得正确的鼠标点击坐标和产生MouseDblClick事件

    class DblClickableListView : ListView
    {
        private const int WM_LBUTTONDBLCLK = 0x0203;

        public DblClickableListView()
            : base()
        {
        }

        protected override void WndProc(ref Message m)
        {
            if(m.Msg == WM_LBUTTONDBLCLK)
            {
                Point p = new Point(SignedLOWORD(m.LParam), SignedHIWORD(m.LParam));
                ListViewItem lvi = GetItemAt(p.X, p.Y);
                if(lvi != null)
                    lvi.Selected = true;
                OnDoubleClick(EventArgs.Empty);
                OnMouseDoubleClick(new MouseEventArgs(MouseButtons.Left, 2, p.X, p.Y, 0));
            }
            else
                base.WndProc (ref m);
        }



        // 以下函数抄自System.Windows.Forms.NativeMethods.Util类
        private static int SignedLOWORD(int n)
        {
            return (short)(n & 0xffff);
        }

        private static int SignedLOWORD(IntPtr n)
        {
            return SignedLOWORD((int)((long)n));
        }

        private static int SignedHIWORD(int n)
        {
            return (short)((n >> 0x10) & 0xffff);
        }

        private static int SignedHIWORD(IntPtr n)
        {
            return SignedHIWORD((int)((long)n));
        }
    }

sonic3d[at]gmail.com
评论日期:2010年05月08日 19:59:59 评论人:
这个挺好
发表评论:(由于众所周知的原因,评论需要审核后才能显示,请勿重复发评论。谢谢!!)
标题:
用户名:
内容:
验证码: 请输入右边图像中的文字。验证码