c#如何把下面代码写在类里面作为函数供外界随意调用?

emhost 2014-01-06 08:55:36
c#如何把下面代码写在类里面作为函数供外界随意调用?
private const int WM_NCLBUTTONDOWN = 0x00A1;
private const int WM_NCHITTEST = 0x84;
private const int HT_CAPTION = 0x2;
private const int HT_CLIENT = 0x1;

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
pictureBox1.Capture = false;
Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);
WndProc(ref msg);
}
这段代码的作用是可以拖动控件来移动窗体,我想把它写成一个函数并用Control类型作为参数放在类库里面,但是不行,报错说WndProc受保护级别无法访问
...全文
292 点赞 收藏 10
写回复
10 条回复
普世编程技术 2014年01月07日
做GUI, 用微软任何库的都是傻逼. 有gnome, kde, qt, wxWidget等那么多好用的不用, 非用最垃圾的.
回复 点赞
以专业开发人员为伍 2014年01月07日
这里,关键点就是,把WndPro当作参数传给类库。
回复 点赞
以专业开发人员为伍 2014年01月07日
例如你的类库是
using System;
using System.Windows.Forms;

namespace YourNamespace
{
    public static class Class1
    {
        private const int WM_NCLBUTTONDOWN = 0x00A1;
        private const int WM_NCHITTEST = 0x84;
        private const int HT_CAPTION = 0x2;
        private const int HT_CLIENT = 0x1;

        public delegate void WndProDelegate(ref Message x);

        public static void MyDragMove(this Control ctl, IntPtr Handle, WndProDelegate wndpro)
        {
            ctl.Capture = false;
            Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);
            wndpro(ref msg);
        }
    }
}
那么在Form中可以这样调用:
pictureBox1.MyDragMove(this.Handle, this.WndProc);
回复 点赞
yuanzihahaha 2014年01月07日
建议你先做一个基类
回复 点赞
建议你做成一个基类,让所有需要这个功能的窗体直接继承它。
回复 点赞
Regan-lin 2014年01月06日
private改个public
回复 点赞
F_U_C_K_GFW 2014年01月06日

public class test
    {
       public int WM_NCLBUTTONDOWN
       {
           get { return 0x00A1; }
       }
    }
回复 点赞
jason成都 2014年01月06日
添加一个事件注册的方法在里面就可以了。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.4w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告