当前位置: 代码迷 >> Windows Mobile >> wince+C#上,重载OnPaint方法
  详细解决方案

wince+C#上,重载OnPaint方法

热度:6041   发布时间:2013-02-26 00:00:00.0
wince+C#下,重载OnPaint方法
想弄一个位图按钮,用PictureBox做,处理单击事件很慢。
所以想到从Button类继承,发现重载OnPaint无效。
下面这段代码PC上正常的,能看到效果。 
class ImageButton:Button
    {
        private Image image;

        public Image Image
        {
            get
            {
                return image;
            }
            set
            {
                image = value;
            }
        }
             
        protected override void OnPaint(PaintEventArgs pe)
        {
             Graphics g = pe.Graphics;
             Rectangle rect = pe.ClipRectangle;

             if (image != null)
             {
                 g.DrawImage(image, 0, 0, rect, GraphicsUnit.Pixel);
             }
             else
             {
                 base.OnPaint(pe);
             }
        }
    }

------解决方案--------------------------------------------------------
把 Rectangle rect = pe.ClipRectangle  =>    Rectangle rect = this.ClientRectangle.试试
------解决方案--------------------------------------------------------
从Control继承是比较可行的办法,所有的背景、文字等都自绘。
需要处理MouseDown、MouseUp等事件。
我这么做过,没发现4楼说的慢的问题,项目到目前还没有人反映说按钮单击响应慢。
个人认为楼主可以放心的按这个思路做下去。
------解决方案--------------------------------------------------------
顶楼上!!
------解决方案--------------------------------------------------------
引用:
奇怪的是,重载OnPaint为什么不生效呢?
而PC上的win from程序就生效。

有些控件是不会自动调用OnPaint的,之前我只研究过重写TextBox,重载OnPaint后就没有用。
只能通过用WinProc拦截Windows消息,调用Onpaint才行。
PC和WM区别还是挺大的,建议别再弄这个了,耽误时间。
挺麻烦的,建议楼主还是继承Control做吧,并不复杂。
------解决方案--------------------------------------------------------
Button是没有OnPaint重载的   OnBackGroudPaint也没有     根本不支持重绘   
现在流行的做法就是继承Control     如果你觉得太慢   那就想问   你用这个Button不就为了点击一下么
------解决方案--------------------------------------------------------
  相关解决方案