ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:429.21KB ,
资源ID:6898235      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6898235.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(811一周工作安排分享.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

811一周工作安排分享.docx

1、811一周工作安排分享项目开发周期表开发项目名称: 开发人员: 序号开发内容预计开始时间预计结束时间备注1解决:自定义组件的鼠标控制滚动条和点击事件冲突兼容上下分页和鼠标控制滚动框FileControl组件的MouseClick事件拆分为MouseDown&MouseUp2文件预览TextPreviewPicturePreviewWordPreview31、 用1-5位的0-9a-z的36个字符根据匹配算法(*)生成互不冲突的账号集合使用者签名: 质量评测: (优秀、良好)备注:开发环境:win7 & VS2013 Framework3.5 & office2007 & Date(2014-8

2、)验收人员: 日期: 开发人员: 1、 鼠标移动列表【改】(11)鼠标拖动页面,以查看超出显示范围之外的部分内容来自:using System.Runtime.InteropServices;以下API函数和常量就是实现上述功能的关键了:DllImport(user32.dll)private static extern int SetScrollPos(IntPtr hwnd, int nBar, int nPos, bool bRedraw);DllImport(user32.dll)private static extern int GetScrollPos(IntPtr hwnd, i

3、nt nBar);DllImport(user32.dll)private static extern bool PostMessage(IntPtr hWnd, int nBar, int wParam, int lParam);DllImport(user32, CharSet = CharSet.Auto)private static extern bool GetScrollRange(IntPtr hWnd, int nBar, out int lpMinPos, out int lpMaxPos);private const int SB_HORZ = 0x0;private co

4、nst int SB_VERT = 0x1;private const int WM_HSCROLL = 0x114;private const int WM_VSCROLL = 0x115;private const int SB_THUMBPOSITION = 4;简单说明一下吧:SetScrollPos:设置所指定滚动条中的滚动按钮的位置GetScrollPos:获取指定滚动条的滚动按钮的位置GetScrollRange:获取指定滚动条的滚动按钮的位置最大最小值PostMessage:这个函数是关键中的关键,它负责向Windows控件发送相应的消息,以真正执行相应的操作。一些网友实现了滚

5、动条中滑块位置的移动,但却没有引起控件中内容的移动,其原因就是因为没有调用这个函数,没有把移动内容的消息发送给控件。SB_HORZ :代表水平滚动条SB_VERT :代表垂直滚动条WM_HSCROLL :代表水平滚动事件WM_VSCROLL :代表垂直滚动事件SB_THUMBPOSITION :至于这个常量,其含义我也不是很清楚好了,准备工作做好了,就可以开工了。先声明几个变量: bool Preview_move = false;/是否按下鼠标,表示处理移动状态。 Point MoveStart;/移动开始时,鼠标的坐标点 Point MoveEnd;/移动过程中鼠标的坐标点在控件的Mous

6、eDown事件中,当鼠标按下时开始移动页面,并记下起始坐标点: private void previewer_MouseDown(object sender, MouseEventArgs e) Preview_move = true; MoveStart = e.Location; 在控件的MouseUp事件中,记得当鼠标放开后要置回非移动状态: private void previewer_MouseUp(object sender, MouseEventArgs e) Preview_move = false; 以下就是实现移动页面的关键部分了,在控件的MouseMove实现用代码间接控

7、制控件的滚动条位置并实现页面实时移动: private void previewer_MouseMove(object sender, MouseEventArgs e) if (!Preview_move) return; MoveEnd = e.Location; int MinH,MaxH,MinV,MaxV;/获得鼠标在X和Y两个方向上的移动量。/除以10是为是让移动页面的速度变慢一点。/而前面的负号则是用来调节页面移动方向的。 int MoveX = -(MoveEnd.X - MoveStart.X)/10; int MoveY = -(MoveEnd.Y - MoveStart.

8、Y)/10; /获取滚动条的最大最小位置和当前位置 GetScrollRange(previewer.Handle, 0, out MinH, out MaxH); GetScrollRange(previewer.Handle, 1, out MinV, out MaxV); int PosH = GetScrollPos(previewer.Handle, 0); int PosV = GetScrollPos(previewer.Handle, 1);/计算最终滚动条的位置(注意最终位置不要超出最大最小值的范围) int PosH1 = PosH + MoveX; if (PosH1 =

9、 MinH & PosH1 = MinV & PosV1 = MaxV) SetScrollPos(previewer.Handle, SB_VERT, PosV1, true); PostMessage(previewer.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * PosV1, 0); OK,一个能用鼠标实时移动页面内容的打印预览功能作好了。其实,对于.net中很多控件都可以用相似的方面实现对滚动条的控制。MouseClick=MouseDown+MouseUp拆分鼠标点击事件,使程序能够识别区分点击事件和按下+拖动+离开的鼠标组合事件

10、。自定义组件FileControl组件图1 自定义FileControl组件图2 控件间类图1) 增加对FileControl组件的MouseDown MouseMove MouseUp事件的处理函数2) 增加状态标识变量_isMouseClick,状态图如下:图3 组合事件解决冲突的事件3) 组件事件的传递将FileControl组件容器中的其他空间的MouseDown MouseMove MoseUp事件处理函数指向该FileControl组件的Mosuedown MouseMove MouseUp事件处理函数;组件容器中的控件和组件存在在层次关系,如下图的床垫剖析图,VS开发工具提供了最

11、底层的夹白色材料的黄褐色平整板,上面几层淡黄、蓝色、绿色、紫色的材料,就是我们添加的控件,如FileControl中的PictureBox CheckBox Label。如何才能让最底层的组件容器接收到MouseDown MouseMove MouseUp,就需要我们进行事件传递:this.OnMouseDown() this.OnMouseMove this.OnMouseUp(this表示FileControl组件的实例对象),或者事件处理函数指向:pictureBox1.MouseDown+=new MouseEventHandler(this.FileControl_MouseDown

12、)(或者在属性面板的事件列表中直接指定MouseDown MouseUp MouseMove事件的处理函数)。图4 床垫剖析图4) 给一个事件绑定多个处理函数我们在该FileControl内部对MouseDown MouseMove MouseUp事件进行处理函数的绑定,在FileSysControl组件中,动态添加FileControl对象时,又对FileControl对象的MouseDown MouseMove MouseUp事件进行处理方法的绑定,用于鼠标控制滚动条的处理;从测试效果中可以看出,这两部分的代码都是有效的,我称之为事件处理函数集。当前处理函数的执行顺序为:FileContr

13、ol处理函数FileSysControl的处理函数,对这个顺序,有如下推断:事件处理函数集有序,VS编译顺序,先FileControl对象初始化,这时进行FileControl事件处理函数的绑定,然后在FileSysControl中对FileControl对象动态事件处理函数绑定。C#编程书籍给出一段例子,连续对同一事件绑定不同的处理函数,我们可以跟踪函数集的处理顺序,得出初步结论。5) TableLayoutPanel的ScrollBar会维持最大的列表长度的状态 (无法解决)2、 打印预览(11)Text PreviewPicture PreviewWord Preview暂时实现着三类文

14、档的预览1) Text Preview FunctionReference:来自: 将文本文件的内容转成jpg,png等格式的图片下面是一个将文本文件data.txt内容转成图片并生成在根目录下的例子,调用方法:ConvertTextFileToImage(Server.MapPath(/Data.txt), Server.MapPath(/Data.jpg);方法代码:using System.Drawing;using System.Drawing.Printing;using System.IO; protected void ConvertTextFileToImage(String

15、textFile, String imageFile) const int FixedWidth = 1024;/期望的显示宽度 System.Drawing.Font drawFont = new System.Drawing.Font(宋体, 12); System.Drawing.Bitmap image = new System.Drawing.Bitmap(1, 1); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image); String text = System.IO.File.ReadAllTe

16、xt(textFile, System.Text.Encoding.GetEncoding(GB2312); System.Drawing.SizeF sf = g.MeasureString(text, drawFont, FixedWidth); System.Drawing.Size showSize = new System.Drawing.Size(Convert.ToInt32(sf.Width), Convert.ToInt32(sf.Height); image = new System.Drawing.Bitmap(image, showSize); g = System.D

17、rawing.Graphics.FromImage(image); g.Clear(System.Drawing.Color.White); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; g.DrawString(text, drawFont, System.Drawing.Brushes.Black, new System.Drawing.RectangleF(new System.Drawing.PointF(0, 0), sf); image.Save(imageFile, Sy

18、stem.Drawing.Imaging.ImageFormat.Png); g.Dispose(); image.Dispose(); 2) Picture Preview FunctionImage Image.ImageForm(path);3) Word Preview FunctionReference:来自:C#技术分享【Word转换成图片和PDF2种方案】分类:C#.NetPdf-Word-图片2012-02-22 19:24Aspose.Wordsc#Word转PDFWord转图片GitHub Clone Adress :(you get it).4) Structure 总分

19、结构图5 缩略图总分结构 var ext = Path.GetExtension(inputFile.ToLower(); var guid = Guid.NewGuid(); string imgFolder = Environment.CurrentDirectory + + Environment.UserName; string imgPath = Path.Combine(imgFolder, guid.ToString() + .png); /If the file is a text file. if (ext = .txt) new TextPreview().ConvertT

20、extFileToImage(inputFile, imgPath); preview.setPicture(imgPath); preview.Show(); return true; /If the file is a Word Document file. else if (ext = .doc | ext = .docx | ext = .rtf) WordPreview.ConvertWordToImage(inputFile, imgFolder, guid.ToString(), 1, 1, null, 0); preview.setPicture(imgPath); previ

21、ew.Show(); return true; /If the file is a Excel file. else if (ext = .xls | ext = .xlsx) /If the file is a Power Point file. else if (ext = .ppt | ext = .pptx) /If the file is a PDF file. else if (ext = .pdf) /If the file is a HTML file. else if (ext = .htm | ext = .html) /If the file is a image fil

22、e. else if (ext = .jpg | ext = .jpeg |ext = .png | ext = .gif) preview.setPicture(inputFile); preview.Show(); return true; 分析:利用Guid生成Guid码存放文档生成的图片,在某种程度上解决了文件句柄的冲突,缺点是会造成文件碎片过多,需要管理员手动清扫。所以,分析资源的流动,解决同一个缓存文件存放临时图片的句柄冲突问题,在当下环境,需要在PreviewForm的Hide()时对PictureBox的Image进行Dispose:界面隐藏时,对静态资源进行回收。3、 账号匹

23、配和相关文件生成:WFormStringComparea) Int类型和char类型的隐士转换b) 0-9和a-z在ASCII表的排列顺序c) 基于全排列的基数组:10个数字和26个小写字母d) 生成排列算法的sleep(1) foreach (string str1 in store.AccountList) foreach (string str2 in store.AccountList) foreach (string str3 in store.AccountList) foreach (string str4 in store.AccountList) list.Add(str1

24、+ str2 + str3 + str4); /Thread.Sleep(1); 36*36*36*36(百万级)次运算,自己弄了一个计时器,如果没有sleep(1),只需要一秒的时间,如果使用了sleep(1),十分钟还没有运算出结果。Sleep(1)的初衷,是均衡系统资源,避免内存和CPU消耗速率过高,但sleep(1)在这个事例中并不适用。e) 系统为每个程序分配的内存是有限的,我们需要把运算过程中,产生的结果,及时存放在磁盘文件,避免产生的百万级数的字符串数据在无需二次使用时,耗尽内存资源。f) WinForm开发,使用了功能驱动,对每一个可以产生输出、产生UI交互的操作,先进行人工控

25、制,把整套流程测试完毕,直接进行组合。g) XML序列化和反序列化i. 对一个公共类public进行可序列化声明Serializableii. 对序列化的元素访问级别为public,集合类采用List集合类iii. 序列化:XML序列化实例+写入流 public void mySerialize(string filename) string path = string.Format(pathFormat, filename); XmlSerializer myserializer = new XmlSerializer(typeof(StorageHelper); StreamWriter

26、myWriter = new StreamWriter(path); myserializer.Serialize(myWriter, this); myWriter.Close(); this.AccountList.Clear(); iv. 反序列化:XML序列化实例+文件流 public List myDeserialize(string filename) AccountList.Clear(); string path = string.Format(pathFormat, filename); if (File.Exists(path) XmlSerializer mySerial

27、izr = new XmlSerializer(typeof(StorageHelper); FileStream myFileStream = new FileStream(path, FileMode.Open); StorageHelper instance = (StorageHelper)mySerializr.Deserialize(myFileStream); AccountList = instance.AccountList; myFileStream.Close(); return AccountList; v. XML序列化和反序列化的优势使用类来做存储结构,而不是SQL的表结构来做存储结构,轻量等优点。vi. h) 基于MVC架构的自定义代码开发窗体调用一个操作类

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1