在VC中實現特性表

發表于:2007-07-04來源:作者:點擊數: 標簽:
特 性 表 Windows 95 以 及Windows NT 4.0 較 之 以 前 的Windows 操 作 系 統 增 加 了 許 多 先 進 特 性, 特 性 表 就 是 其 中 之 一。 大 家 熟 知 的 特 性 表 實 例 是Windows 中 屏 幕 顯 示 屬 性 的 設 置, 它 包 括 背 景、 屏 幕 保 護 程 序
 

  特 性 表

  Windows 95 以 及Windows NT 4.0 較 之 以 前 的Windows 操 作 系 統 增 加 了 許 多 先 進 特 性, 特 性 表 就 是 其 中 之 一。 大 家 熟 知 的 特 性 表 實 例 是Windows 中 屏 幕 顯 示 屬 性 的 設 置, 它 包 括 背 景、 屏 幕 保 護 程 序、 外 觀、 設 置 等 特 性 頁。 使 用 特 性 表 的 最 大 好 處 在 于 它 可 以 非 常 方 便 地 將 大 量 的 信 息 提 供 給 用 戶, 從 而 有 效 地 節 省 屏 幕 空 間, 因 為 它 是 包 含 若 干 個 其 他 對 話 框 的 對 話 框。

  創 建 特 性 表

  Visual C + + 中MFC 提 供 了 兩 個 類:CPropertySheet 和CPropertyPage, 使 編 程 人 員 可 以 輕 松 地 在 程 序 中 實 現 特 性 表。 以VC4.0 為 例, 在 程 序 中 建 立 一 個 特 性 表 的 步 驟 如 下:

  1. 在Microsoft Developer Studio 中 選 擇 菜 單Insert /Component..., 屏 幕 上 會 彈 出 一 個“Component Gallery” 對 話 框( 注 意: 此 對 話 框 本 身 就 是 特 性 表 的 一 種)。

  2. 在 對 話 框 中 的Microsoft 頁 選 中Property Sheet, 單 擊“Insert”, 屏 幕 上 出 現 創 建 特 性 表 的 向 導。

  3. 在 向 導 的 第 一 步 選 擇“Property Sheet”; 第 二 步 選 擇 是 否 生 成 無 模 式 的 特 性 表 以 及 是 否 要 在 特 性 表 中 支 持 預 覽 功 能; 第 三 步 選 擇 創 建 特 性 表 函 數 作 為 哪 一 個 類 的 成 員 函 數( 即 在 哪 一 個 類 中 啟 用 特 性 表); 第 四 步 設 置 特 性 表 所 包 含 的 頁 數; 第 五 步 為 新 生 成 的 類( 特 性 表 本 身 及 其 包 含 的 每 一 頁 都 是 一 個 單 獨 的 類) 確 定 名 稱。 這 樣, 一 個 特 性 表 就 生 成 了。Visual C + + 已 經 編 寫 了 基 本 的 源 代 碼。

  4. 在 自 動 生 成 的 代 碼 中, 啟 動 此 特 性 表 的 函 數 一 般 名 為OnProperties( ), 在 需 要 的 地 方 調 用 它, 進 行 編 譯、 連 接、 運 行, 然 后 會 看 到 一 個 特 性 表 已 經 可 以 在 需 要 的 地 方 彈 出 來 了。

  5. 至 此, 特 性 表 中 的 每 一 頁 還 是 空 白。 在 一 頁 中 加 入 需 要 的 控 件(controls) 和 一 般 的 對 話 框 一 樣 簡 單, 因 為 它 本 身 就 是 一 種 對 話 框。 打 開ResourceView 中 的Dialog, 特 性 表 的 每 一 頁 都 作 為 一 個 對 話 框 列 于 其 中, 只 要 對 它 們 進 行 編 輯, 再 在 程 序 中 實 現 相 應 功 能 即 可。 現 在, 一 個 特 性 表 已 經 全 部 完 成。

  特 性 表 中 的 頁 雖 然 和 普 通 對 話 框 基 本 一 致, 但 還 有 幾 點 需 要 注 意:

  1. 頁 中 的 各 控 件 不 能 使 用 其 擴 展 風 格(extended styles);

  2. 頁 中 的 各 控 件 不 能 使 用Help ID;

  3. Control ID 不 能 是DWORD 類 型;

  4. 不 能 在 頁 的 字 體 中 設 置 粗 細、 斜 體、 字 符 集 等 屬 性。 如 果 不 能 遵 循 以 上 規 則, 程 序 運 行 時 將 會 出 現 錯 誤。

  特 性 表 的 編 程

  用Component Gallery 創 建 的 特 性 表 的 下 端 包 括 確 定、 取 消、 應 用、 幫 助 等 按 鈕。 但 是, 有 時 侯 我 們 需 要 的 不 是 這 幾 個 按 鈕, 甚 至 完 全 不 需 要 按 鈕, 那 么 如 何 修 改 呢 ?

  在MFC 程 序 內 部, 這 幾 個 按 鈕 都 有 著 自 己ID, 分 別 為IDOK、IDCANCEL、ID_APPLY_NOW、IDHELP。 這 些 宏 在 文 件AFXRES.H 和WINRES.H 中 定 義, 應 用 程 序 一 般 已 經 間 接 地 包 含 了 它 們, 可 以 直 接 引 用。 利 用 它 們 調 用GetDlgItem 函 數 可 以 得 到 各 按 鈕 的 窗 口 句 柄。 有 了 句 柄, 對 按 鈕 進 行 改 動 就 變 得 非 常 簡 單: 用SetWindowText 改 變 按 鈕 的 字 符, 用ShowWindow 和EnableWindow 隱 含 按 鈕, 用MoveWindow 改 變 按 鈕 位 置。

  假 設 特 性 表 的 類 名 為CMyPropertySheet, 以 隱 含‘ 應 用’、‘ 幫 助’ 兩 個 按 鈕 為 例, 則 在 特 性 表 的 程 序 中 加 入 如 下 代 碼:

. . . . . . static int rgiButtons[]= { IDOK, IDCANCEL, ID_APPLY_NOW, IDHELP }; . . . . . . BOOL CMyPropertySheet::OnInitDialog() { BOOL bResult = CPropertySheet::OnInitDialog(); for ( int i = 2; i < 4; i + + ) { HWND hWnd = ::GetDlgItem( m_hWnd, rgiButtons[i]); if ( hWnd != NULL ) { ::ShowWindow( hWnd, SW_HIDE ); ::EnableWindow( hWnd, FALSE ); } } CenterWindow(); return bResult; }

  如 果 在 四 個 按 鈕 之 外 還 需 加 入 另 外 一 些 按 鈕 則 相 對 復 雜 一 些, 因 為 這 不 能 在ResourceView 中 實 現, 必 須 完 全 在 代 碼 中 完 成。

  首 先, 在 類CMyPropertySheet 中 加 入 成 員 變 量:

protected: CButton m_btn;

  其 次, 為 按 鈕 加 入 點 按 響 應 的 成 員 函 數 的 定 義。 為 了 使 之 能 為ClassWizard 所 識 別, 代 碼 如 下:

protected: //{{AFX_MSG(CMyPropertySheet) afx_msg void OnBnClicked(); //}}AFX_MSG

  然 后, 在 程 序 中 加 入 如 下 消 息 映 射:

BEGIN_MESSAGE_MAP(CMyPropertySheet, CPropertySheet) //{{AFX_MSG_MAP(CMyPropertySheet) ON_BN_CLICKED(ID_MYBUTTON,OnBnClicked) //}}AFX_MSG_MAP END_MESSAGE_MAP()

  以 上 準 備 工 作 完 畢 之 后, 在OnInitDialog 函 數 中 創 建 此 按 鈕:

CRect rect; rect.SetRect(BUTTONLEFT, BUTTNTOP, BUTTON RIGHT, BUTTONBOTTOM); m_btn.Create(“MyButton", BS_PUSHBUTTON|WS_VISIBLE, rect, this, ID_MYBUTTON);

  最 后, 在 程 序 中 完 成 點 按 按 鈕 的 響 應 函 數:

void CMyPropertySheet::OnBnClicked() { . . . . . . }

  結 論

  基 本 上 大 部 分Windows 95 程 序 都 會 用 到 特 性 表, 特 性 表 可 以 有 效 地 節 省 屏 幕 空 間。 本 文 介 紹 了 一 些 相 關 技 術, 相 似 的 技 術 也 可 以 用 在 另 一 項 技 術 ─ ─ 向 導(Wizard) 中, 讀 者 可 以 自 己 去 嘗 試。

back.gif (1185 字節)

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97