永发信息网

c# winform 如何清除picturebox控件关联的句柄

答案:4  悬赏:10  手机版
解决时间 2021-02-01 14:24
现在是通过picturebox控件显示视频图像,但是视频关闭的时候,picturebox控件中的图像还存在,如何清除。
最佳答案
CWnd::GetDlgItem
CWnd* GetDlgItem( int nID ) const;
void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;
返回值:
指向给定的控件或子窗口的指针,如果没有控件具有nID给出的整数ID,则返回NULL。
返回的指针可能是临时的,不能被保存以供将来使用。
参数: nID 指定了要获取的控件或子窗口的标识符。
phWnd 指向子窗口的指针。
说明:
这个函数获得对话框或其它窗口中指定控件或子窗口的指针。
返回的指针通常被强制转换为nID所标识的控件类型。
全部回答
picturebox.Image = null; //直接null不就行了?
picturebox的backcolor属性设置成color.transparent 然后设置picturebox.parent = 父容器; 一般地,在.net中,多个控件之间重叠时是不会实现透明效果的。 如下图所示: 下面开始介绍这几种解决方案:  第一种方案:记录不透明图片的路径,再设置透明效果。参考代码如下: ///      /// picturebox透明示例     /// date:2012-3-4 07:25:56     ///      public partial class form1 : form     {         [dllimport("user32.dll")]         public static extern int releasecapture();         [dllimport("user32.dll")]         public static extern int sendmessage(intptr hwnd, int wmsg, int wparam, int lparam);         public const int wm_syscommand = 0x0112;         public const int sc_move = 0xf010;         public const int htcaption = 0x0002;         public form1()         {             initializecomponent();             //this.picmodelimage.controls.add(this.pichair);         }         private void pichair_mousedown(object sender, mouseeventargs e)         {             setpictureboxtransparent(pichair, pichair.image);             //setpictureboxtransparent(picmodelimage, picmodelimage.image);             releasecapture();             sendmessage(this.pichair.handle, wm_syscommand, sc_move + htcaption, 0);         }         // 使用不安全的指针         // 返回不透明的图片路径         private unsafe graphicspath notegraphicspath(image image)         {             if (image == null)                 return null;             // 声明graphicspath类以便计算位图路径             graphicspath graphicspath = new graphicspath(fillmode.alternate);             bitmap bitmap = new bitmap(image);             int picwidth = bitmap.width;             int picheight = bitmap.height;             bitmapdata bitmapdata = bitmap.lockbits(new rectangle(0, 0, picwidth, picheight), imagelockmode.readwrite, pixelformat.format24bpprgb);             byte* point = (byte*)bitmapdata.scan0;             int offset = bitmapdata.stride - picwidth * 3;             int p0, p1, p2;             p0 = point[0];             p1 = point[1];             p2 = point[2];             int start = -1;             for (int h = 0; h < picheight; h++)             {                 for (int x = 0; x / 如果之前的点没有不透明且不透明                        if (start == -1 && (point[0] != p0 || point[1] != p1 || point[2] != p2))                     {                         start = x;                     }                     else if (start > -1 && (point[0] == p0 && point[1] == p1 && point[2] == p2))                     {                         // 如果之前的点是不透明                         graphicspath.addrectangle(new rectangle(start, h, x - start - 1, 1));                         start = -1;                     }                     // 如果之前的点是不透明且是最后一个点                       if (x == picwidth - 1 && start > -1)                     {                         graphicspath.addrectangle(new rectangle(start, h, x - start + 1, 1));                         start = -1;                     }                     point += 3;                 }                 point += offset;             }             bitmap.unlockbits(bitmapdata);             bitmap.dispose();             return graphicspath;         }         ///          /// 需要设置透明效果的控件调用该方法         ///          /// 要设置透明效果的控件         /// 控件的图片         public void setpictureboxtransparent(control control, image image)         {             graphicspath graphic = null;             graphic = notegraphicspath(image);             if (graphic == null)                 return;             control.region = new region(graphic);         } } 需要添加2个命名空间: using system.drawing.drawing2d; using system.drawing.imaging;   运行后效果如下所示: 注意:由于本示例有不安全的代码[关键字unsafe],需要在项目属性中设置"允许不安全代码",如下图: 第二种方案:使用gdi +中绘制图像与透明   这种方案是需要我使用gdi+绘制图像,具体步骤如下所示:   1. 需要添加两个组件类: pictureboxmodel.cs 和 panelextend.cs panelextend.cs 中代码: using system; using system.drawing; using system.windows.forms; using system.drawing.drawing2d; ///  /// panel扩展类 ///  public abstract class panelextend : panel {     protected graphics graphics;     protected override createparams createparams     {         get         {             createparams cp = base.createparams;             cp.exstyle |= 0x00000020; // 实现透明样式             return cp;         }     }     public panelextend()     {     }     protected override void onpaintbackground(painteventargs pevent)     {              }     protected override void onpaint(painteventargs e)     {         this.graphics = e.graphics;         this.graphics.textrenderinghint = system.drawing.text.textrenderinghint.antialias;         this.graphics.interpolationmode = system.drawing.drawing2d.interpolationmode.highqualitybilinear;         this.graphics.pixeloffsetmode = system.drawing.drawing2d.pixeloffsetmode.highquality;         this.graphics.smoothingmode = system.drawing.drawing2d.smoothingmode.highquality;         ondraw();     }     protected abstract void ondraw(); } pictureboxmodel.cs  代码: using system; using system.collections.generic; using system.text; using system.drawing; ///  /// 实现绘制图像 ///  public class pictureboxmodel : panelextend {     public pictureboxmodel()     {         //this.setstyle(system.windows.forms.controlstyles.supportstransparentbackcolor, true);     }     protected override void ondraw()     {         // 获取图像         image imagemodel = global::mypictureboxdemo.properties.resources.model;         image imagehair = global::mypictureboxdemo.properties.resources.hair;         //int width = imagemodel.size.width;         //int height = imagemodel.size.height;         int width = this.width;         int height = this.height;         rectangle recmodel = new rectangle(0, 0, width, height);         rectangle rechair = new rectangle(0, 0, imagehair.width, imagehair.height);                  this.graphics.drawimage(imagemodel, recmodel);         this.graphics.drawimage(imagehair, rechair);     } } 实现效果图如下所示
把控件销毁了重绘个新的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
快中考了,问一下我们考政治历史开卷可以在书
把肉放在电压力锅里定时8小时后再煲,肉会坏吗
诞得的意思是什么啊?知道的请说下!
california gold nutritiondha,和挪威小鱼哪
春节对于全球华人的意义
现在解释楞严经的注疏有哪些,南无阿弥陀佛
波浪湾地址好找么,我有些事要过去
内僧的意思是什么啊?知道的请说下!
伴娘该做些什么啊 ? 整新郎有什么好的新意吗
鱼缺氧死了还能救活吗
掐奶怎么不痛苦,有什么好办法吗?
爱民区牡丹江微孝易家健康体验中心哪位知道具
芳芳美容养生会所地址在什么地方,我要处理点
如果湖中水被污染 富营养化 湖水中的蓝藻会使
自由光仪表盘档位P档上面圈里的数字什么意思
推荐资讯
梁鸿的意思是什么啊?知道的请说下!
电子科技大学成都学院周围有小吃店吗?它的体
做完刨腹产6天了,伤口老有黄色液体流出正常吗
掇青拾紫的意思是什么啊?知道的请说下!
联通的预消费额度是怎么回事??????
mcafee杀毒软件到底怎么样?
需要把伴奏降调,求推荐软件。。。有人说唱吧
请用if改写To find out more about singles D
属于闭合性骨折的是A.耻骨骨折合并尿道损伤B.
补完牙齿嘴里有异味 补了两个月,可是那颗牙
梦见小白狗
oppo哪些手机是红色
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?