• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在Visual C++中實現特性表

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    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,特性表的每一頁都作為一個對話框列于其中,只要對它們進行編輯,再在程序中實現相應功能就可以了?,F在,一個特性表已經全部完成。

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

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

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

    ---- 3. control ID 不能是DWORD 類型;

    ---- 4. 不能在頁的字體中設置粗細、斜體、字符集等屬性。

    ---- 如果不能遵循以上規則,程序運行時將會出現錯誤。

    特性表的使用技巧
    ---- 用Com ent 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, BUTTONRIGHT, BUTTONBOTTOM);
    m_btn.Create("MyButton", BS_PUSHBUTTON|WS_VISIBLE,
    rect, this, ID_MYBUTTON);
    最后,在程序中完成點按按鈕的響應函數:
    void CMyPropertySheet::OnBnClicked()
    {
    ......
    }

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

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>