建立視窗框架 <ul><li>葉建榮 </li></ul><ul><li>巨匠電腦台北東區認證中心 </li></ul>
視窗框架物件 <ul><li>視窗框架物件就是您在電腦螢幕上看到的視窗。在剛剛的程式範例裡,將直接利用 CFrameWnd 類別建立一個供應用程式物件建立的視窗框架物件。 </li></ul>
<ul><li>由 CFrameWnd 類別所建立的視窗框架物件,提供了基本視窗所具備的功能,如 系統選單 及右上角的三個 視窗控制按鈕。 </li></ul>視窗框架物件 系統選單 視窗控制按鈕
<ul><li>產生視窗框架物件與建立、顯示視窗,並不是同一件事,因為在視窗程式裡,產生一個視窗框架物件,是指在程式裡建立了一個視窗框架物件,當在程式裡,需要操作視窗框架時,我們可以直接操作該物件。 </li></ul><ul><li>建立一個...
<ul><li>BOOL InitInstance() // 程式進入點 </li></ul><ul><li>{ </li></ul><ul><li>CFrameWnd *Frame = new CFrameWnd(); </li></ul><...
<ul><li>BOOL virtual CFrameWnd::Create( </li></ul><ul><li>LPCTSTR lpszClassName,  </li></ul><ul><ul><li>LPCTSTR lpszWindow...
<ul><li>八個參數中的後六個參數都有預設值,只有前兩個參數必須指定。 </li></ul><ul><li>第一個參數 lpszClassName  指定 WNDCLASS 視窗類別,放置 NULL 是要以  MFC  內建的視窗類別產生一...
<ul><li>第三個參數 dwStyle 指定視窗風格 (Windows Stylus) ,預設是 WS_OVERLAPPEDWINDOW ,是最常用的一種,它被定義為 ( 在  WINDOWS.H  之中 ) : </li></ul><ul...
Window Styles  建立一個視窗時,即將該視窗宣告為不可接收任何訊息。 WS_DISABLED 建立雙外框,但沒有標題的的視窗。 WS_DLGFRAME 當子視窗收到一個重繪訊息時,將不會重繪被其他子視窗覆蓋的部份。 WS_CLIPS...
Window Styles  建立一個可重疊的視窗。 WS_OVERLAPPED 建立一個具有下列特性的視窗: WS_OVERLAPPED 、 WS_CAPTION 、 WS_SYSMENU 、 WS_THICKFRAME 、 WS_MINIM...
Window Styles  建立一個具有垂直捲軸的視窗。 WS_VSCROLL 設定視窗一開始即顯示在螢幕上。 WS_VISIBLE 建立一個可用滑鼠調整大小的細外框視窗。 WS_THICKFRAME 設定使用者可以利用 Tab 鍵在視窗的控...
<ul><li>因此若不想要視窗右上角的極大極小鈕,就得這麼做: </li></ul><ul><ul><li>Create(NULL, &quot;Hello MFC&quot;, WS_OVERLAPPED | WS_CAPTION | WS...
<ul><li>Create  的第四個參數 rect 指定視窗的位置與大小。預設值 rectDefault 是 CFrameWnd 的一個  static  成員變數,告訴  Windows  以預設方式指定視窗位置與大小,就好像在 SDK ...
<ul><li>第五個參數 pParentWnd 指定父視窗。對於一個 top-level 視窗而言,此值應為 NULL ,表示沒有父視窗 ( 其實是有的,父視窗就是  desktop  視窗 ) 。 </li></ul><ul><li>第六個...
建立視窗框架的函數 <ul><li>擴充風格 ( 第七個參數 dwExStyle)  : </li></ul>設定視窗接受檔案以拖拽方式開啟。 WS_EX_ACCEPTFILES 讓視窗有向左對齊的屬性,此為預設值。 WS_EX_LEFT 建立...
建立視窗框架的函數 =WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE WS_EX_OVERLAPPEDWINDOW =WS_EX_WINDOWEDGE | WS_EX_TOPMOST WS_EX_PALETTEWINDO...
建立視窗框架的函數 建立一個透明視窗。 WS_EX_TRANSPARENT 以右向左的方式顯示視窗文字, WS_EX_RTLREADING 建立一個具有浮雕外框的視窗。 WS_EX_WINDOWEDGE 設定視窗置於所有不具 WS_EX_TOP...
<ul><li>BOOL CWnd::ShowWindow(int nCmdShow) </li></ul>顯示視窗框架的函數 以最小化方式顯示視窗。 SW_SHOWMINIMIZED 將視窗最小化,縮成一個 icon 。 SW_SHOWMIN...
顯示視窗框架的函數 以目前的狀態顯示視窗。 SW_SHOWNA 顯示視窗,並將其設定為活動視窗,如果視窗為最小化或最大化,則還原至預設的位置與大小。 SW_SHOWNORMAL 以上一次顯示的大小與位置顯示視窗。 SW_SHOWNOACTIVE...
Upcoming SlideShare
Loading in...5
×

建立視窗框架

1,937

Published on

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

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

No notes for slide

Transcript of "建立視窗框架"

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

×