Your SlideShare is downloading. ×
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
建立視窗框架
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

建立視窗框架

1,924

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,924
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 建立視窗框架
    • 葉建榮
    • 巨匠電腦台北東區認證中心
  • 2. 視窗框架物件
    • 視窗框架物件就是您在電腦螢幕上看到的視窗。在剛剛的程式範例裡,將直接利用 CFrameWnd 類別建立一個供應用程式物件建立的視窗框架物件。
  • 3.
    • 由 CFrameWnd 類別所建立的視窗框架物件,提供了基本視窗所具備的功能,如 系統選單 及右上角的三個 視窗控制按鈕。
    視窗框架物件 系統選單 視窗控制按鈕
  • 4.
    • 產生視窗框架物件與建立、顯示視窗,並不是同一件事,因為在視窗程式裡,產生一個視窗框架物件,是指在程式裡建立了一個視窗框架物件,當在程式裡,需要操作視窗框架時,我們可以直接操作該物件。
    • 建立一個視窗框架物件,則是指利用 CFrameWnd::Create 函數,向作業系統註冊了這個視窗框架。經過了視窗框架的產生、建立的過程後,才能利用 CFrameWnd::ShowWindow 函數,將視窗顯示在螢幕上。
    視窗框架物件
  • 5.
    • BOOL InitInstance() // 程式進入點
    • {
    • CFrameWnd *Frame = new CFrameWnd();
    • // 建立 CFrameWnd 物件
    • m_pMainWnd = Frame; // 將 m_pMainWnd 設定為 Frame
    • Frame->Create(NULL,"Hello MFC"); // 建立視窗
    • Frame->ShowWindow(SW_SHOW); // 顯示視窗
    • return true;
    • }
    視窗框架物件 產生、建立 、 顯示 視窗框架物件
  • 6.
    • BOOL virtual CFrameWnd::Create(
    • LPCTSTR lpszClassName,
      • LPCTSTR lpszWindowName,
      • DWORD dwStyle =
      • WS_OVERLAPPEDWINDOW,
      • const RECT& rect = rectDefault,
      • CWnd* pParentWnd = NULL,
      • LPCTSTR lpszMenuName = NULL,
      • DWORD dwExStyle = 0,
      • CCreateContext* pContext = NULL );
    建立視窗框架的函數
  • 7.
    • 八個參數中的後六個參數都有預設值,只有前兩個參數必須指定。
    • 第一個參數 lpszClassName 指定 WNDCLASS 視窗類別,放置 NULL 是要以 MFC 內建的視窗類別產生一個標準的外框視窗。
    • 第二個參數 lpszWindowName 指定視窗標題,本例指定 "Hello MFC" 。
    建立視窗框架的函數
  • 8.
    • 第三個參數 dwStyle 指定視窗風格 (Windows Stylus) ,預設是 WS_OVERLAPPEDWINDOW ,是最常用的一種,它被定義為 ( 在 WINDOWS.H 之中 ) :
      • #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)
    • 視窗風格 (Windows Stylus) 的參數如下表所示:
    建立視窗框架的函數
  • 9. Window Styles 建立一個視窗時,即將該視窗宣告為不可接收任何訊息。 WS_DISABLED 建立雙外框,但沒有標題的的視窗。 WS_DLGFRAME 當子視窗收到一個重繪訊息時,將不會重繪被其他子視窗覆蓋的部份。 WS_CLIPSIBLINGS 將視窗設定為第一個控制項,通常用於由控制項群組所組成的對話盒視窗,並可利用方向鍵在控制項間移動。 WS_GROUP 當在父視窗中繪圖時,繼會避開被子視窗遮蓋的部份不畫。 WS_CLIPCHILDREN 此祝窗為子視窗,但不能與 WS_POPUP 並用。 WS_CHILD 有標題欄 ( 含 WS_BORDER) ,但不可與 WS_DLGFRAME 樣式並用。 WS_CAPTION 有外框。 WS_BORDER 說明 特性參數
  • 10. Window Styles 建立一個可重疊的視窗。 WS_OVERLAPPED 建立一個具有下列特性的視窗: WS_OVERLAPPED 、 WS_CAPTION 、 WS_SYSMENU 、 WS_THICKFRAME 、 WS_MINIMIZEBOX 、 WS_MAXIMIZEBOX 。 WS_OVERLAPPEDWINDOW 建立一個有最小化按鈕的視窗 ( 須與 WS_SYSMENU 並用 ) 。 WS_MINIMIZEBOX 建立一個彈出式視窗 ( 不可與 WS_CHILD 並用 ) 。 WS_POPUP 建立一個起始大小為最小化的視窗。 WS_MINIMIZE 建立一個有最大化按鈕的視窗 ( 須與 WS_SYSMENU 並用 ) 。 WS_MAXIMIZEBOX 建立一個起始大小為最大化的視窗。 WS_MAXIMIZE 建立一個具有水平捲軸的視窗。 WS_HSCROLL 說明 特性參數
  • 11. Window Styles 建立一個具有垂直捲軸的視窗。 WS_VSCROLL 設定視窗一開始即顯示在螢幕上。 WS_VISIBLE 建立一個可用滑鼠調整大小的細外框視窗。 WS_THICKFRAME 設定使用者可以利用 Tab 鍵在視窗的控制項中移動。 WS_TABSTOP 建立一個左上角可拉出系統選單的視窗。 WS_SYSMENU 建立一個彈出式視窗並具有 WS_BORDER 、 WS_POPUP 、 WS_SYSMENU 等特性。 WS_POPUPWINDOW 說明 特性參數
  • 12.
    • 因此若不想要視窗右上角的極大極小鈕,就得這麼做:
      • Create(NULL, "Hello MFC", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, rectDefault, NULL, "MainMenu");
    • 若希望視窗有垂直捲軸,可在第三個參數上增加 WS_VSCROLL 。
    • 除了上述標準的視窗風格,另有所謂的擴充風格,可以在 Create 的第七個參數 dwExStyle 指定之。擴充風格唯有以 ::CreateWindowEx( 而非 ::CreateWindow) 函式才能完成。事實上, CFrameWnd::Create 最終呼叫的正是 ::CreateWindowEx 。
    建立視窗框架的函數
  • 13.
    • Create 的第四個參數 rect 指定視窗的位置與大小。預設值 rectDefault 是 CFrameWnd 的一個 static 成員變數,告訴 Windows 以預設方式指定視窗位置與大小,就好像在 SDK 程式中以 CW_USEDEFAULT 指定給 CreateWindow 函式一樣。如果你很有主見,希望視窗在特定位置有特定大小,可以這麼做:
      • Create(NULL,"Hello MFC",WS_OVERLAPPEDWINDOW,
      • CRect(40, 60, 240, 460), // 起始位置 (40,60) ,寬 200 ,高 400)
      • NULL,"MainMenu");
    建立視窗框架的函數
  • 14.
    • 第五個參數 pParentWnd 指定父視窗。對於一個 top-level 視窗而言,此值應為 NULL ,表示沒有父視窗 ( 其實是有的,父視窗就是 desktop 視窗 ) 。
    • 第六個參數 lpszMenuName 指定一個定義在資源檔 (RC 檔 ) 的選單名稱。
    • 第八個參數 pContext 是一個指向 CCreateContext 結構的指標, framework 利用它,在具備 Document/View 架構的程式中初始化外框視窗。本例不具備 Document/View 架構,所以不必指定 pContext 參數,預設值為 NULL 。
    建立視窗框架的函數
  • 15. 建立視窗框架的函數
    • 擴充風格 ( 第七個參數 dwExStyle) :
    設定視窗接受檔案以拖拽方式開啟。 WS_EX_ACCEPTFILES 讓視窗有向左對齊的屬性,此為預設值。 WS_EX_LEFT 建立一個雙外框且具有標題欄的視窗。 WS_EX_DLGMODALFRAME 允許使用者使用 Tab 鍵操作子視窗。 WS_EX_CONTROLPARENT 建立一個在標題欄具有問號按鈕的視窗,當使用者點擊該問號時,視窗將會收到 WM_HELP 訊息。 WS_EX_CONTEXTHELP 建立具有 3D 立體感的視窗 ( 帶陰影的邊界 ) 。 WS_EX_CLIENTEDGE 說明 參數
  • 16. 建立視窗框架的函數 =WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE WS_EX_OVERLAPPEDWINDOW =WS_EX_WINDOWEDGE | WS_EX_TOPMOST WS_EX_PALETTEWINDOW 在視窗的客戶區左方效置一個捲軸。 WS_EX_LEFTSCROLLBAR 在視窗的客戶區左方效置一個捲軸,此為預設值。 WS_EX_RIGHTSCROLLBAR 讓視窗具有向右對齊的特性。 WS_EX_RIGHT 設定子視窗不必於被建立或消減時傳出 WM_PARENTNOTIFY 訊息給父視窗。 WS_EX_NOPATARENTNOTIFY 建立一個多文件的子視窗。 WS_EX_MDICHILD 以左向右的方式顯示視窗文字,預設值。 WS_EX_LTRREADING 說明 參數
  • 17. 建立視窗框架的函數 建立一個透明視窗。 WS_EX_TRANSPARENT 以右向左的方式顯示視窗文字, WS_EX_RTLREADING 建立一個具有浮雕外框的視窗。 WS_EX_WINDOWEDGE 設定視窗置於所有不具 WS_EX_TOPMOST 特性視窗之上,即使該視窗並不處於有效狀態。 WS_EX_TOPMOST 建立一個工具視窗,該視窗被當成一個浮動的工具列使用。 WS_EX_TOOLWINDOW 建立一個 3D 外框的視窗,且不接受使用者之資料輸入。 WS_EX_STATICEDGE 說明 參數
  • 18.
    • BOOL CWnd::ShowWindow(int nCmdShow)
    顯示視窗框架的函數 以最小化方式顯示視窗。 SW_SHOWMINIMIZED 將視窗最小化,縮成一個 icon 。 SW_SHOWMINNOACTIVE 以最大化方式顯示視窗。 SW_SHOWMAXIMIZED 隱藏視窗,並將控制權交給其視窗。 SW_HIDE 以設計大小,顯示視窗。 SW_SHOW 顯示窗,如果視窗處於最大化或者最小化,則還原到預設的大小。 SW_RESTORE 將視窗最小化,並將控制權交給目前作業系統中最上層的視窗。 SW_MINIMIZE 說明 參數
  • 19. 顯示視窗框架的函數 以目前的狀態顯示視窗。 SW_SHOWNA 顯示視窗,並將其設定為活動視窗,如果視窗為最小化或最大化,則還原至預設的位置與大小。 SW_SHOWNORMAL 以上一次顯示的大小與位置顯示視窗。 SW_SHOWNOACTIVE 說明 參數

×