在C中轻松制作仿OutLook的界面_第1页
在C中轻松制作仿OutLook的界面_第2页
在C中轻松制作仿OutLook的界面_第3页
在C中轻松制作仿OutLook的界面_第4页
在C中轻松制作仿OutLook的界面_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在C#中轻松制作仿OutLook的界面丽水市汽车运输集团有限公司信息中心 苟安廷不知道从什么时候开始,许多软件都开始模仿OutLook界面,最典型的莫过于大家经常使用的QQ了,在网上搜索了好久,都没有找到几个满意的控件,干脆,自己写了一个,非常简单实用,特拿出来共享。新建一个项目,不妨取名为MyOutLookFace吧,在上面放一个Panel控件用作容器,取名为:panFunMain,设置Dock属性为Left(或Righ),设置BorderStyle属性为Fixed3D,添加一个ImageList控件,设置其ImageSize为“32,32”,并添加几个图标给它。在panFunMain中添加

2、n个按钮(本例中n=3,用于显示有几组)和n个ListView控件(显示某组中具体内容),都用其默认的名字,注意ListView控件个数必须和按钮控件个数相同,都为n,设置各ListView控件的Lage imageList属性为刚才添加的ImageList控件,选中第一个ListView控件,在属性窗口中,选择items,并点右边的小按钮“”,将弹出一个对话框,在这里添加几个成员,并指定Text属性和ImageIndex属性,同样,为第二、三个ListView指定Items成员。为了实现自动隐藏,再添加一个计时器,最后布局如下:上面的插操作都是比较基本的,如不特殊说明,都使用其默认值,这里不

3、再赘述。本文最后还会提到播放声音的方法,为合理利用资源,必须修改文件输出路径,选择菜单“项目”“属性”,会弹出如下一个对话框,在“配置(C)”后面的组合框中选择“所有配置”,然后设置“配置属性”的“生成”项,在右边的输出路径中填上“output”,这样,无论是编译成release文件还是debug文件,输出的可执行文件都会放到当前项目中的output文件夹下(该文件会自动创建)。至此,界面布置基本完成,切换到代码窗口,添加几个变量:/ <summary>/ 记录当前功能面板中用到的按钮/ </summary>private ArrayList ArrFunButton=

4、new ArrayList();/ <summary>/ 记录当前功能面板中用到的listview/ </summary>private ArrayList ArrFunListView=new ArrayList();/ <summary>/ 功能面板的宽度/ </summary>private int m_nPanFunWidth=100;/功能面板隐藏后的宽度private int m_nPanFunHideWidth=2;当我们单击一个按钮后,必须显示该按钮对应的ListView,并调整该按钮的位置,故手工写一个函数:/功能按钮点击后的特

5、效private void btnFun_Click(object sender, System.EventArgs e)Button btnNow=sender as Button;if(btnNow=null)return;/单击的按钮在数组中的索引int nIndex=this.ArrFunButton.IndexOf(btnNow);/将该按钮前面的置顶for(int i=1;i<=nIndex;i+)Button btn=ArrFunButtoni as Button;btn.Top=(Button)ArrFunButtoni-1).Bottom;/将下面的按钮下移for(in

6、t i=ArrFunButton.Count-1;i>nIndex;i-)Button btn=ArrFunButtoni as Button;if(i=ArrFunButton.Count-1)/最后一个btn.Top=this.panFunMain.Height-btn.Height-4;elsebtn.Top=(Button)ArrFunButtoni+1).Top-btn.Height;/显示对应的listviewfor(int i=0;i<ArrFunButton.Count;i+)ListView lsv=ArrFunListViewi as ListView;/当前按

7、钮对应的ListViewif(i=nIndex)lsv.Left=0;lsv.Width=btnNow.Width;lsv.Top=btnNow.Bottom;if(nIndex=ArrFunListView.Count-1)/最后一个lsv.Height=this.panFunMain.Height-btnNow.Bottom-4;elselsv.Height=(ArrFunButtoni+1 as Button).Top-btnNow.Bottom;/将当前ListView显示出来if(!lsv.Visible)lsv.Visible=true;else /隐藏其他listviewif(l

8、sv.Visible)lsv.Visible=false;当我们双击ListView的图标时,应用程序会根据你双击的具体项做相应处理,如QQ中弹出“发送消息”的对话框,我们这里只是简单地提示一句你双击的是哪一项,为此,也是手工添加一个函数:/双击listview后根据当前项执行操作private void lsvFun_DoubleClick(object sender, System.EventArgs e)/双击后执行一个功能ListView lsv=sender as ListView;if(lsv=null)return;ifreturn;ListViewItem item=lsv.S

9、electedItems0;MessageBox.Show("你双击了:"+item.Text);本例中设置自动隐藏功能,隐藏后(宽度为nPanFunHideWidth),如果鼠标在本工具条(也就是本例中的panFunMain中的全部内容)上移动时,重新将工具条显示出来,因此,手工添加一个鼠标移动事件响应函数:private void FunListView_MouseMove(objectif(this.panFunMain.Width=m_nPanFunHideWidth)this.panFunMain.Width=m_nPanFunWidth;this.timer1.

10、Enabled=true;为了达到自动隐藏的目的,我们设置了一个记时器,不断检测当前鼠标位置,如果不在工具条中,自将工具宽带设置为nPanFunHideWidth,起到隐藏的作用,当然,不能设置为0,否则鼠标移不上去就再也显示不出来了。添加计时器的响应代码:private void timer1_Tick(object sender, System.EventArgs e)/当前功能面板显示出来if(this.panFunMain.Width=m_nPanFunWidth)/检查光标位置是否在面板内Point p1=this.panFunMain.PointToScreen(new Point

11、(0,0);Point p2=this.panFunMain.PointToScreen(new Point(panFunMain.Right,panFunMain.Bottom);Point pCur=Cursor.Position;/当前鼠标光标位置if(pCur.X<p1.X | pCur.X>p2.X | pCur.Y<p1.Y | pCur.Y>p2.Y)/隐藏panfunmainthis.panFunMain.Width=m_nPanFunHideWidth;this.timer1.Enabled=false;/if前面都是准备工作,添加一个函数,将上面的代

12、码同具体的按钮和Listview控件组合起来:/ <summary>/ 初始化功能面板/ </summary>private void InitPanFun()/设置功能面板的位置和宽带this.panFunMain.Width=m_nPanFunWidth;this.panFunMain.Dock=DockStyle.Left;/记录功能按钮ArrFunButton.Add(this.button1);ArrFunButton.Add(this.button2);ArrFunButton.Add(this.button3);/记录功能面板中的listview,注意要和

13、上面的button对应ArrFunListView.Add(this.listView1);ArrFunListView.Add(this.listView2);ArrFunListView.Add(this.listView3);int nCount=ArrFunButton.Count;/布置各功能按钮的位置和ListView的属性for(int i=nCount-1;i>=0;i-)Button btn=ArrFunButtoni as Button;btn.Width=this.panFunMain.Width-4;btn.Left=0;/将按钮的单击事件和具体代码对应起来btn

14、.Click += new System.EventHandler(btnFun_Click);if(i=0)btn.Top=0;btn.Anchor=AnchorStyles.Left |AnchorStyles.Top;elseif(i=nCount-1)btn.Top=this.panFunMain.Height-btn.Height-4;elsebtn.Top=(ArrFunButtoni+1 as Button).Top-btn.Height;btn.Anchor=AnchorStyles.Left | AnchorStyles.Bottom;/鼠标在按钮上移动时,同样判断当前工具条

15、是否隐藏btn.MouseMove+=new MouseEventHandler(FunListView_MouseMove);/设置listview的anchor属性ListView lsv=ArrFunListViewi as ListView;if(lsv!=null)lsv.Anchor=AnchorStyles.Left | AnchorStyles.Top |AnchorStyles.Right |AnchorStyles.Bottom;/隐藏功能listviewlsv.Visible=false;/设置listview双击事件lsv.DoubleClick+=new EventH

16、andler(lsvFun_DoubleClick);lsv.MouseMove+=new MouseEventHandler(FunListView_MouseMove);/pan/for int i/将第一个功能按钮点一下(ArrFunButton0 as Button).PerformClick();/别忘了打开记时器this.timer1.Enabled=true;最后,添加Form1的Load事件响应函数,用来初始化工具条:private void Form1_Load(object sender, System.EventArgs e)this.InitPanFun();现在运行一

17、下,效果是不是很不错?单击按钮时,会显示不同的分组,当鼠标离开窗口左边时,工具自动隐藏,在左边移动时,工具自动出现,双击ListView某图标后,会弹出一个对话框,告诉你点了哪一项,如下图:通过设置panFunMain的Dock属性,可以让本工具条在停泊在窗口的左边或右边,本例中代码的通用性较强(当然,如果能做成控件就更好了),很容易复制到新的软件中,上面的自动隐藏是模仿QQ做的,我们还可以做得更象QQ一点,当用户点了分组按钮后,播放一个声音,如果你安装了QQ,将其安装路径中sound文件夹下面的folder.wav声音文件复制到本项目的output文件夹中(也就是本项目EXE文件输出路径中)

18、,其中播放/停止声音的代码如下:DllImport("winmm.dll")public static extern long mciSendString(string lpstrCommand,string lpstrReturnString,long length,long hwndcallback);/ <summary>/ 播放音乐文件/ </summary>/ <param name="p_FileName">音乐文件名称</param>private void PlayMusic(string p_FileName)trymciSendString("close " +p_FileName ," "/*34个空格 */,0,0);mciSendString("open " + p_FileName," "/*34个空格 */,0,0);mciS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论