在C中輕松制作仿OutLook的界面_第1頁
在C中輕松制作仿OutLook的界面_第2頁
在C中輕松制作仿OutLook的界面_第3頁
在C中輕松制作仿OutLook的界面_第4頁
在C中輕松制作仿OutLook的界面_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、在C#中輕松制作仿OutLook的界面麗水市汽車運(yùn)輸集團(tuán)有限公司信息中心 茍安廷不知道從什么時候開始,許多軟件都開始模仿OutLook界面,最典型的莫過于大家經(jīng)常使用的QQ了,在網(wǎng)上搜索了好久,都沒有找到幾個滿意的控件,干脆,自己寫了一個,非常簡單實(shí)用,特拿出來共享。新建一個項(xiàng)目,不妨取名為MyOutLookFace吧,在上面放一個Panel控件用作容器,取名為:panFunMain,設(shè)置Dock屬性為Left(或Righ),設(shè)置BorderStyle屬性為Fixed3D,添加一個ImageList控件,設(shè)置其ImageSize為“32,32”,并添加幾個圖標(biāo)給它。在panFunMain中添加

2、n個按鈕(本例中n=3,用于顯示有幾組)和n個ListView控件(顯示某組中具體內(nèi)容),都用其默認(rèn)的名字,注意ListView控件個數(shù)必須和按鈕控件個數(shù)相同,都為n,設(shè)置各ListView控件的Lage imageList屬性為剛才添加的ImageList控件,選中第一個ListView控件,在屬性窗口中,選擇items,并點(diǎn)右邊的小按鈕“”,將彈出一個對話框,在這里添加幾個成員,并指定Text屬性和ImageIndex屬性,同樣,為第二、三個ListView指定Items成員。為了實(shí)現(xiàn)自動隱藏,再添加一個計(jì)時器,最后布局如下:上面的插操作都是比較基本的,如不特殊說明,都使用其默認(rèn)值,這里不

3、再贅述。本文最后還會提到播放聲音的方法,為合理利用資源,必須修改文件輸出路徑,選擇菜單“項(xiàng)目”“屬性”,會彈出如下一個對話框,在“配置(C)”后面的組合框中選擇“所有配置”,然后設(shè)置“配置屬性”的“生成”項(xiàng),在右邊的輸出路徑中填上“output”,這樣,無論是編譯成release文件還是debug文件,輸出的可執(zhí)行文件都會放到當(dāng)前項(xiàng)目中的output文件夾下(該文件會自動創(chuàng)建)。至此,界面布置基本完成,切換到代碼窗口,添加幾個變量:/ <summary>/ 記錄當(dāng)前功能面板中用到的按鈕/ </summary>private ArrayList ArrFunButton=

4、new ArrayList();/ <summary>/ 記錄當(dāng)前功能面板中用到的listview/ </summary>private ArrayList ArrFunListView=new ArrayList();/ <summary>/ 功能面板的寬度/ </summary>private int m_nPanFunWidth=100;/功能面板隱藏后的寬度private int m_nPanFunHideWidth=2;當(dāng)我們單擊一個按鈕后,必須顯示該按鈕對應(yīng)的ListView,并調(diào)整該按鈕的位置,故手工寫一個函數(shù):/功能按鈕點(diǎn)擊后的特

5、效private void btnFun_Click(object sender, System.EventArgs e)Button btnNow=sender as Button;if(btnNow=null)return;/單擊的按鈕在數(shù)組中的索引int nIndex=this.ArrFunButton.IndexOf(btnNow);/將該按鈕前面的置頂for(int i=1;i<=nIndex;i+)Button btn=ArrFunButtoni as Button;btn.Top=(Button)ArrFunButtoni-1).Bottom;btn.Anchor=Syst

6、em.Windows.Forms.AnchorStyles.Left |System.Windows.Forms.AnchorStyles.Top;/將下面的按鈕下移for(int 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;btn.Ancho

7、r=System.Windows.Forms.AnchorStyles.Left |System.Windows.Forms.AnchorStyles.Bottom;/顯示對應(yīng)的listviewfor(int i=0;i<ArrFunButton.Count;i+)ListView lsv=ArrFunListViewi as ListView;/當(dāng)前按鈕對應(yīng)的ListViewif(i=nIndex)lsv.Left=0;lsv.Width=btnNow.Width;lsv.Top=btnNow.Bottom;if(nIndex=ArrFunListView.Count-1)/最后一個l

8、sv.Height=this.panFunMain.Height-btnNow.Bottom-4;elselsv.Height=(ArrFunButtoni+1 as Button).Top-btnNow.Bottom;/將當(dāng)前ListView顯示出來if(!lsv.Visible)lsv.Visible=true;else /隱藏其他listviewif(lsv.Visible)lsv.Visible=false;當(dāng)我們雙擊ListView的圖標(biāo)時,應(yīng)用程序會根據(jù)你雙擊的具體項(xiàng)做相應(yīng)處理,如QQ中彈出“發(fā)送消息”的對話框,我們這里只是簡單地提示一句你雙擊的是哪一項(xiàng),為此,也是手工添加一個函數(shù)

9、:/雙擊listview后根據(jù)當(dāng)前項(xiàng)執(zhí)行操作private void lsvFun_DoubleClick(object sender, System.EventArgs e)/雙擊后執(zhí)行一個功能ListView lsv=sender as ListView;if(lsv=null)return;if(lsv.SelectedItems.Count=0)return;ListViewItem item=lsv.SelectedItems0;MessageBox.Show("你雙擊了:"+item.Text);本例中設(shè)置自動隱藏功能,隱藏后(寬度為nPanFunHideWid

10、th),如果鼠標(biāo)在本工具條(也就是本例中的panFunMain中的全部內(nèi)容)上移動時,重新將工具條顯示出來,因此,手工添加一個鼠標(biāo)移動事件響應(yīng)函數(shù):private void FunListView_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)if(this.panFunMain.Width=m_nPanFunHideWidth)this.panFunMain.Width=m_nPanFunWidth;this.timer1.Enabled=true;為了達(dá)到自動隱藏的目的,我們設(shè)置了一個記時器,不斷檢測當(dāng)前鼠標(biāo)位

11、置,如果不在工具條中,自將工具寬帶設(shè)置為nPanFunHideWidth,起到隱藏的作用,當(dāng)然,不能設(shè)置為0,否則鼠標(biāo)移不上去就再也顯示不出來了。添加計(jì)時器的響應(yīng)代碼:private void timer1_Tick(object sender, System.EventArgs e)/當(dāng)前功能面板顯示出來if(this.panFunMain.Width=m_nPanFunWidth)/檢查光標(biāo)位置是否在面板內(nèi)Point p1=this.panFunMain.PointToScreen(new Point(0,0);Point p2=this.panFunMain.PointToScreen(

12、new Point(panFunMain.Right,panFunMain.Bottom);Point pCur=Cursor.Position;/當(dāng)前鼠標(biāo)光標(biāo)位置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前面都是準(zhǔn)備工作,添加一個函數(shù),將上面的代碼同具體的按鈕和Listview控件組合起來:/ <summary>/ 初始化

13、功能面板/ </summary>private void InitPanFun()/設(shè)置功能面板的位置和寬帶this.panFunMain.Width=m_nPanFunWidth;this.panFunMain.Dock=DockStyle.Left;/記錄功能按鈕ArrFunButton.Add(this.button1);ArrFunButton.Add(this.button2);ArrFunButton.Add(this.button3);/記錄功能面板中的listview,注意要和上面的button對應(yīng)ArrFunListView.Add(this.listView1)

14、;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;/將按鈕的單擊事件和具體代碼對應(yīng)起來btn.Click += new System.EventHandler(btnFun_Clic

15、k);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;/鼠標(biāo)在按鈕上移動時,同樣判斷當(dāng)前工具條是否隱藏btn.MouseMove+=new MouseEventHandler(FunL

16、istView_MouseMove);/設(shè)置listview的anchor屬性ListView lsv=ArrFunListViewi as ListView;if(lsv!=null)lsv.Anchor=AnchorStyles.Left | AnchorStyles.Top |AnchorStyles.Right |AnchorStyles.Bottom;/隱藏功能listviewlsv.Visible=false;/設(shè)置listview雙擊事件lsv.DoubleClick+=new EventHandler(lsvFun_DoubleClick);lsv.MouseMove+=new

17、 MouseEventHandler(FunListView_MouseMove);/pan/for int i/將第一個功能按鈕點(diǎn)一下(ArrFunButton0 as Button).PerformClick();/別忘了打開記時器this.timer1.Enabled=true;最后,添加Form1的Load事件響應(yīng)函數(shù),用來初始化工具條:private void Form1_Load(object sender, System.EventArgs e)this.InitPanFun();現(xiàn)在運(yùn)行一下,效果是不是很不錯?單擊按鈕時,會顯示不同的分組,當(dāng)鼠標(biāo)離開窗口左邊時,工具自動隱藏,在

18、左邊移動時,工具自動出現(xiàn),雙擊ListView某圖標(biāo)后,會彈出一個對話框,告訴你點(diǎn)了哪一項(xiàng),如下圖:通過設(shè)置panFunMain的Dock屬性,可以讓本工具條在停泊在窗口的左邊或右邊,本例中代碼的通用性較強(qiáng)(當(dāng)然,如果能做成控件就更好了),很容易復(fù)制到新的軟件中,上面的自動隱藏是模仿QQ做的,我們還可以做得更象QQ一點(diǎn),當(dāng)用戶點(diǎn)了分組按鈕后,播放一個聲音,如果你安裝了QQ,將其安裝路徑中sound文件夾下面的folder.wav聲音文件復(fù)制到本項(xiàng)目的output文件夾中(也就是本項(xiàng)目EXE文件輸出路徑中),其中播放/停止聲音的代碼如下:DllImport("winmm.dll&quo

19、t;)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);mciSend

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論