![在C中輕松制作仿OutLook的界面_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/7b364cee-11e4-4ded-bf4c-e24629bbce7f/7b364cee-11e4-4ded-bf4c-e24629bbce7f1.gif)
![在C中輕松制作仿OutLook的界面_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/7b364cee-11e4-4ded-bf4c-e24629bbce7f/7b364cee-11e4-4ded-bf4c-e24629bbce7f2.gif)
![在C中輕松制作仿OutLook的界面_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/7b364cee-11e4-4ded-bf4c-e24629bbce7f/7b364cee-11e4-4ded-bf4c-e24629bbce7f3.gif)
![在C中輕松制作仿OutLook的界面_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/7b364cee-11e4-4ded-bf4c-e24629bbce7f/7b364cee-11e4-4ded-bf4c-e24629bbce7f4.gif)
![在C中輕松制作仿OutLook的界面_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/24/7b364cee-11e4-4ded-bf4c-e24629bbce7f/7b364cee-11e4-4ded-bf4c-e24629bbce7f5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、在C#中輕松制作仿OutLook的界面麗水市汽車運(yùn)輸集團(tuán)有限公司信息中心 茍安廷不知道從什么時(shí)候開始,許多軟件都開始模仿OutLook界面,最典型的莫過(guò)于大家經(jīng)常使用的QQ了,在網(wǎng)上搜索了好久,都沒(méi)有找到幾個(gè)滿意的控件,干脆,自己寫了一個(gè),非常簡(jiǎn)單實(shí)用,特拿出來(lái)共享。新建一個(gè)項(xiàng)目,不妨取名為MyOutLookFace吧,在上面放一個(gè)Panel控件用作容器,取名為:panFunMain,設(shè)置Dock屬性為L(zhǎng)eft(或Righ),設(shè)置BorderStyle屬性為Fixed3D,添加一個(gè)ImageList控件,設(shè)置其ImageSize為“32,32”,并添加幾個(gè)圖標(biāo)給它。在panFunMain中添加
2、n個(gè)按鈕(本例中n=3,用于顯示有幾組)和n個(gè)ListView控件(顯示某組中具體內(nèi)容),都用其默認(rèn)的名字,注意ListView控件個(gè)數(shù)必須和按鈕控件個(gè)數(shù)相同,都為n,設(shè)置各ListView控件的Lage imageList屬性為剛才添加的ImageList控件,選中第一個(gè)ListView控件,在屬性窗口中,選擇items,并點(diǎn)右邊的小按鈕“”,將彈出一個(gè)對(duì)話框,在這里添加幾個(gè)成員,并指定Text屬性和ImageIndex屬性,同樣,為第二、三個(gè)ListView指定Items成員。為了實(shí)現(xiàn)自動(dòng)隱藏,再添加一個(gè)計(jì)時(shí)器,最后布局如下:上面的插操作都是比較基本的,如不特殊說(shuō)明,都使用其默認(rèn)值,這里不
3、再贅述。本文最后還會(huì)提到播放聲音的方法,為合理利用資源,必須修改文件輸出路徑,選擇菜單“項(xiàng)目”“屬性”,會(huì)彈出如下一個(gè)對(duì)話框,在“配置(C)”后面的組合框中選擇“所有配置”,然后設(shè)置“配置屬性”的“生成”項(xiàng),在右邊的輸出路徑中填上“output”,這樣,無(wú)論是編譯成release文件還是debug文件,輸出的可執(zhí)行文件都會(huì)放到當(dāng)前項(xiàng)目中的output文件夾下(該文件會(huì)自動(dòng)創(chuàng)建)。至此,界面布置基本完成,切換到代碼窗口,添加幾個(gè)變量:/ <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)我們單擊一個(gè)按鈕后,必須顯示該按鈕對(duì)應(yīng)的ListView,并調(diào)整該按鈕的位置,故手工寫一個(gè)函數(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)/最后一個(gè)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;/顯示對(duì)應(yīng)的listviewfor(int i=0;i<ArrFunButton.Count;i+)ListView lsv=ArrFunListViewi as ListView;/當(dāng)前按鈕對(duì)應(yīng)的ListViewif(i=nIndex)lsv.Left=0;lsv.Width=btnNow.Width;lsv.Top=btnNow.Bottom;if(nIndex=ArrFunListView.Count-1)/最后一個(gè)l
8、sv.Height=this.panFunMain.Height-btnNow.Bottom-4;elselsv.Height=(ArrFunButtoni+1 as Button).Top-btnNow.Bottom;/將當(dāng)前ListView顯示出來(lái)if(!lsv.Visible)lsv.Visible=true;else /隱藏其他listviewif(lsv.Visible)lsv.Visible=false;當(dāng)我們雙擊ListView的圖標(biāo)時(shí),應(yīng)用程序會(huì)根據(jù)你雙擊的具體項(xiàng)做相應(yīng)處理,如QQ中彈出“發(fā)送消息”的對(duì)話框,我們這里只是簡(jiǎn)單地提示一句你雙擊的是哪一項(xiàng),為此,也是手工添加一個(gè)函數(shù)
9、:/雙擊listview后根據(jù)當(dāng)前項(xiàng)執(zhí)行操作private void lsvFun_DoubleClick(object sender, System.EventArgs e)/雙擊后執(zhí)行一個(gè)功能ListView lsv=sender as ListView;if(lsv=null)return;if(lsv.SelectedItems.Count=0)return;ListViewItem item=lsv.SelectedItems0;MessageBox.Show("你雙擊了:"+item.Text);本例中設(shè)置自動(dòng)隱藏功能,隱藏后(寬度為nPanFunHideWid
10、th),如果鼠標(biāo)在本工具條(也就是本例中的panFunMain中的全部?jī)?nèi)容)上移動(dòng)時(shí),重新將工具條顯示出來(lái),因此,手工添加一個(gè)鼠標(biāo)移動(dòng)事件響應(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á)到自動(dòng)隱藏的目的,我們?cè)O(shè)置了一個(gè)記時(shí)器,不斷檢測(cè)當(dāng)前鼠標(biāo)位
11、置,如果不在工具條中,自將工具寬帶設(shè)置為nPanFunHideWidth,起到隱藏的作用,當(dāng)然,不能設(shè)置為0,否則鼠標(biāo)移不上去就再也顯示不出來(lái)了。添加計(jì)時(shí)器的響應(yīng)代碼:private void timer1_Tick(object sender, System.EventArgs e)/當(dāng)前功能面板顯示出來(lái)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)備工作,添加一個(gè)函數(shù),將上面的代碼同具體的按鈕和Listview控件組合起來(lái):/ <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對(duì)應(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;/將按鈕的單擊事件和具體代碼對(duì)應(yīng)起來(lái)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)時(shí),同樣判斷當(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/將第一個(gè)功能按鈕點(diǎn)一下(ArrFunButton0 as Button).PerformClick();/別忘了打開記時(shí)器this.timer1.Enabled=true;最后,添加Form1的Load事件響應(yīng)函數(shù),用來(lái)初始化工具條:private void Form1_Load(object sender, System.EventArgs e)this.InitPanFun();現(xiàn)在運(yùn)行一下,效果是不是很不錯(cuò)?單擊按鈕時(shí),會(huì)顯示不同的分組,當(dāng)鼠標(biāo)離開窗口左邊時(shí),工具自動(dòng)隱藏,在
18、左邊移動(dòng)時(shí),工具自動(dòng)出現(xiàn),雙擊ListView某圖標(biāo)后,會(huì)彈出一個(gè)對(duì)話框,告訴你點(diǎn)了哪一項(xiàng),如下圖:通過(guò)設(shè)置panFunMain的Dock屬性,可以讓本工具條在停泊在窗口的左邊或右邊,本例中代碼的通用性較強(qiáng)(當(dāng)然,如果能做成控件就更好了),很容易復(fù)制到新的軟件中,上面的自動(dòng)隱藏是模仿QQ做的,我們還可以做得更象QQ一點(diǎn),當(dāng)用戶點(diǎn)了分組按鈕后,播放一個(gè)聲音,如果你安裝了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>/ 播放音樂(lè)文件/ </summary>/ <param name="p_FileName">音樂(lè)文件名稱</param>private void PlayMusic(string p_FileName)trymciSendString("close " +p_FileName ," "/*34個(gè)空格 */,0,0);mciSendString("open " + p_FileName," "/*34個(gè)空格 */,0,0);mciSend
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023九年級(jí)數(shù)學(xué)下冊(cè) 第27章 圓27.2 與圓有關(guān)的位置關(guān)系1點(diǎn)與圓的位置關(guān)系說(shuō)課稿 (新版)華東師大版
- 2025從“京派、海派”之爭(zhēng)辨析民間委托炒股合同的效力
- 2025合同模板股東合作合同范本
- 2025借款合同版(單位住房)
- 2025勞動(dòng)合同的有效要件范本
- 2025代工生產(chǎn)合同
- 清洗施工方案
- 路燈燈具整改施工方案
- 路燈改造工程施工方案
- Unit 3 Amazing animals PartA (說(shuō)課稿)-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
- 五年級(jí)數(shù)學(xué)(小數(shù)乘除法)計(jì)算題專項(xiàng)練習(xí)及答案匯編
- 上海市楊浦區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期英語(yǔ)期末考卷(含筆試答案無(wú)聽(tīng)力答案、原文及音頻)
- 2024年蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 2025年北京生命科技研究院招聘筆試參考題庫(kù)含答案解析
- 銀行金融機(jī)構(gòu)銀行金融服務(wù)協(xié)議
- GB/T 27697-2024立式油壓千斤頂
- 《消防機(jī)器人相關(guān)技術(shù)研究》
- 游泳館安全隱患排查
- 《媒介社會(huì)學(xué)》課件
- 成人手術(shù)后疼痛評(píng)估與護(hù)理團(tuán)體標(biāo)準(zhǔn)
- zemax-優(yōu)化函數(shù)說(shuō)明書
評(píng)論
0/150
提交評(píng)論