首页 > 其他 > 详细

C# 跨越ListView的滚动条截图

时间:2014-03-14 18:44:49      阅读:591      评论:0      收藏:0      [点我收藏+]


[原文链接: http://blog.csdn.net/zgke/article/details/3836712]

因对ListView控件的打印需求,借鉴了原文的思想得以实现,在此向原文作者表示感谢!

1. 通过Control.DrawToBitmap()方法对ListView的当前显示状态截图,存储于PictureBox中
2. 把PictureBox覆盖到ListView上
3. 通过ListView.GetItemRect(ListView.Items.Count - 1, ItemBoundsPortion.Entire)
    获取扩展后不带滚动条的ListViewItem的高度和宽度
4. 根据最后一条ListViewItem的信息重新计算整个ListView的尺寸(应包括绘制到位图后的滚动条信息)
5. 再次通过Control.DrawToBitmap()方法获取ListView的全部形(绘制时应排除灰色滚动条信息)


bubuko.com,布布扣
 1     // <summary>  
 2     /// ListView跨越滚动截图  
 3     /// </summary>  
 4     /// <param name="listView">ListView</param>  
 5     /// <returns>图形</returns>  
 6     public static Image GetListViewImage(ListView listView)  
 7     {  
 8         PictureBox pic = new PictureBox();  
 9         pic.Size = listView.Size;  
10         pic.Location = listView.Location;  
11         Bitmap bmpPre = new Bitmap(pic.Width, pic.Height);  
12         listView.DrawToBitmap(bmpPre, new Rectangle(0, 0, pic.Width, pic.Height));  
13         pic.Image = bmpPre;  
14         listView.Parent.Controls.Add(pic);  
15 
16         listView.Visible = false;  
17         Size sizePre = listView.Size;  
18 
19         // 获取扩展后 * 无滚动条 * 情况下最后一条ListViewItem的边框信息
20         // (相对于ListView的左边距、上边距、完全显示的宽度、ListViewItem的高度,不包括滚动条信息)
21         Rectangle rect = listView.GetItemRect(listView.Items.Count - 1, ItemBoundsPortion.Entire);  
22         
23         // 每条ListViewItem的宽度加 4 (留出右侧灰色滚动条的位置,绘制到位图时会出现灰色滚动条)
24         int width = rect.Width + rect.X + (listView.Columns.Count * 4);  
25         if (width > listView.Width) listView.Width = width;  
26 
27         // 每条ListViewItem的高度加 3 (留出下侧灰色滚动条的位置,绘制到位图时会出现灰色滚动条)
28         int height = rect.Height + rect.Y + (listView.Items.Count * 3);  
29         if (height > listView.Height) listView.Height = height;  
30 
31         // 重绘控件以正确绘制到位图
32         listView.Refresh(); 
33 
34         // 绘制ListView到位图(不绘制灰色滚动条)
35         Bitmap bmpNew = new Bitmap(width - (listView.Columns.Count * 3), height - (listView.Items.Count * 2));  
36         listView.DrawToBitmap(bmpNew, new Rectangle(0, 0, bmpNew.Width, bmpNew.Height)); 
37         
38         listView.Size = sizePre;  
39         listView.Visible = true;  
40         listView.Parent.Controls.Remove(pic);  
41         bmpPre.Dispose();  
42         pic.Dispose();  
43         return bmpNew; 
44     }
bubuko.com,布布扣

 



C# 跨越ListView的滚动条截图,布布扣,bubuko.com

C# 跨越ListView的滚动条截图

原文:http://www.cnblogs.com/tjm-1990/p/3599089.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!