創建C# Windows窗體應用程序淺析
啟動Visual Studio .Net 2005,創建C# Windows窗體應用程序,將解決方案命名為TaskbarForm,包含的項目名也為TaskbarForm,首先創建程序的主窗體Form1,在上面添加兩個Button控件,一個用于顯示通知窗體,另一個則終止程序。然后在解決方案管理器中右擊項目,單擊"添加 - Windows 窗體",我們把新創建C# Windows窗體應用程序命名為TaskbarForm。
在類TaskbarForm定義的下方,我們創建用于顯示的字符串和其顏色的變量,再定義幾個Rectangle對象的變量用于放置標題、提示內容以及可以拖動窗體的區域和關閉按鈕的區域。然后,我們需要保存窗體在浮動時的高度以便計算移 動后的新高度,intervalValue變量用來確定窗體顯示和隱藏的速度。進行平臺調用時我們需要提前定義好常量的值用來傳遞給函數,WM_NCLBUTTONDOWN和HT_CAPTION常量用于拖動窗體,他們的值都保存在WinUser.h頭文件中,所對應的動態鏈接庫名為:user32.dll。我們用到的Win32API為:SendMessage、 ReleaseCapture和ShowWindow,通過使用DllImportAttribute可以導入相應的函數并在程序中重新進行定義,如下:
- [DllImportAttribute("user32.dll")]
- public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
- //發送消息//winuser.h 中有函數原型定義
- [DllImportAttribute("user32.dll")]
- public static extern bool ReleaseCapture(); //釋放鼠標捕捉winuser.h
- [DllImportAttribute("user32.dll")] //winuser.h
- private static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);
SendMessage向消息循環發送標題欄被按下的消息來模擬窗體的拖動,ShowWindow用來將特定句柄的窗體顯示出來,注意第二個參數nCmdShow,它表示窗體應該怎樣顯示出來,而我們需要窗體不獲得焦點顯示出來,SW_SHOWNOACTIVATE可以滿足我們要求,繼續在WinUser.h文件中搜索找到該常量對應的值為4,于是我們就可以這樣調用來顯示窗體了:
- ShowWindow(this.Handle, 4);
我們創建了一個自定義函數ShowForm用來封裝上面的ShowWindow用來是顯示窗體,同時傳遞了所用到的幾個Rectangle矩形區域對象,最后調用ShowWindows函數將窗體顯示出來,代碼片段如下:
- public void ShowForm(string ftitletext, string fcontenttext,
Rectangle fRegionofFormTitle, Rectangle fRegionofFormTitlebar,
Rectangle fRegionofFormContent, Rectangle fRegionofCloseBtn)- {
- titleText = ftitletext;
- contentText = fcontenttext;
- WorkAreaRectangle = Screen.GetWorkingArea(WorkAreaRectangle);
- this.Top = WorkAreaRectangle.Height + this.Height;
- FormBorderStyleFormBorderStyle = FormBorderStyle.None;
- WindowState = FormWindowState.Normal;
- this.SetBounds(WorkAreaRectangle.Width - this.Width,
WorkAreaRectangle.Height - currentTop, this.Width, this.Height);- CurrentState = 1;
- timer1.Enabled = true;
- TitleRectangle = fRegionofFormTitle;
- TitlebarRectangle = fRegionofFormTitlebar;
- ContentRectangle = fRegionofFormContent;
- CloseBtnRectangle = fRegionofCloseBtn;
- ShowWindow(this.Handle, 4); //#define SW_SHOWNOACTIVATE 4
- }
以上介紹創建C# Windows窗體應用程序。
【編輯推薦】