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

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

  • <strong id="5koa6"></strong>
  • 也談用VC制作工具條

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    國防科技大學電子工程學院 趙征宇 我用VC 開發 軟件已有兩年時間,自認為對 Windows 用戶界面技術也積累了不少經驗,下文就想從另一個角度談談工具條的制作。 其實,在VC的開發環境中,對工具條的支持并不是很方便,相比之下就不如其它的一些編程語言,如C++B
    國防科技大學電子工程學院 趙征宇

      我用VC開發軟件已有兩年時間,自認為對Windows用戶界面技術也積累了不少經驗,下文就想從另一個角度談談工具條的制作。

      其實,在VC的開發環境中,對工具條的支持并不是很方便,相比之下就不如其它的一些編程語言,如C++Build等。VC的應用程序向導(AppWizard)中基于單文檔和多文檔的程序為用戶創建了一個工具條,并提供了對工具條的可視化編輯,但它提供的工具條僅僅是按紐(Button)的簡單集合,不支持工具條中經常用到的編輯(Edit)控件、組合框(ComboBox)控件等,而在我們常見的軟件中,如Word等等,帶組合框(通常為下拉框,組合框的一種,不能編輯,只能選擇其中一條)等其它控件的工具條也大量用到,它大大方便了用戶的操作。本文提出了一個比較簡便的方法,利用VC的資源編輯器,可視化的確定控件在工具條中的位置,然后把控件作為工具條的子窗口創建,并實現控件的消息響應函數。

      下文就以組合框為例,詳細介紹在工具條中加入組合框的步驟。用應用程序向導(AppWizard)生成一個基于單文檔的工程(Project),首先打開VC的工具條資源編輯器,在要加入組合框的地方加一個空按紐,分配一個ID號,在本文的實例中為IDC_COMBOX。

      其次,從面向對象的思想出發,一個工具條作為一個整體,應該封裝為一個類,組合框控件應該作為這個類的一個成員變量。因此生成一個以CToolBar為基類的的新類CComboToolBar,這可以用VC的類向導(ClassWizard)來實現,先生成一個以CToolBarCtrl為基類的新類CComboToolBar,然后在文件編輯器中打開ComboToolBar.h和ComboToolBar.cpp文件,把CComboToolBar基類改為CToolBar。之所以有這番周折,是因為類向導不支持以CToolBar為基類生成新類。新類生成后,加入成員變量CComboBox m_combobox。

      然后把CMainFrame類中的工具條成員變量m_wndToolBar的類型由CToolBar改為CComboToolBar。編輯應用程序向導已經生成好的函數intCMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct),這個函數通常用來產生工具條和狀態條,在創建工具條的函數后加入以下代碼:

      CRect rect;

       //設置組合框的寬度,四個參數依次為控件在工具條中的索引號、ID號、風格、寬度

      m_wndToolBar.SetButtonInfo(4,IDC_COMBOX,TBBS_SEPARATOR,160);

       //得到組合框的位置

      m_wndToolBar.GetItemRect(4,&rect);

       //設置組合框的高度

      rect.bottom += 100; //COMBOHEIGHT;


       //創建組合框,四個參數依次為窗口風格、組合框位置、父窗口、ID號


    if(!m_wndToolBar.m_combobox.Create(CBS_DROPDOWN|WS_VISIBLE|

    WS_TABSTOP|CBS_AUTOHSCROLL,rect,&m_wndToolBar,IDC_COMBOX))

        return -1;

       //在組合框中加入字符串

      m_wndToolBar.m_combobox.AddString ("微波工程");

      m_wndToolBar.m_combobox.AddString ("通信工程");

      m_wndToolBar.m_combobox.AddString ("信號與信息處理專業");

      至此就可以編譯運行這個單文檔程序了,運行結果就會產生帶有組合框的工具條。

      但是僅僅產生組合框是不夠的,必須實現組合框的消息響應函數,才能方便地運用組合框。在VC中,消息響應函數通常都是用類向導來實現,但是此處由于組合框是用函數創建的,所以必須親自動手來寫代碼,也并不麻煩,與類向導生成的代碼格式是一樣的,可以參照來寫。下面在View類中實現響應組合框的CBN_SELCHANGE消息(當組合框選中一條字符串時,產生此消息)和CBN_EDITCHANGE消息(當對組合框內的字符進行編輯時,產生此消息)的函數。本實例中,當組合框選中一條字符串時,在下面的編輯(Edit)控件中立即顯示這一條字符串,而且在組合框中輸入字符時,下面的編輯控件也立即顯示相應的字符。為此,加入以下代碼即可。

      1、在頭(.h)文件中加入消息響應函數的定義:

      afx_msg void OnSelchangeCombo();

    //響應CBN_SELCHANGE消息的函數

      afx_msg void OnEditchangeCombo();

    //響應CBN_EDITCHANGE消息的函數


      2、在實現(.cpp)文件中加入消息映射宏:

    BEGIN_MESSAGE_MAP(CToolComboView,CFormView)

          //{{AFX_MSG_MAP(CToolComboView)

        ON_CBN_SELCHANGE(IDC_COMBOX,OnSelchangeCombo)

          ON_CBN_EDITCHANGE(IDC_COMBOX,OnEditchangeCombo)

          //}}AFX_MSG_MAP

    END_MESSAGE_MAP()

      3、在實現(.cpp)文件中加入函數實體:

    void CToolComboView::OnSelchangeCombo()

    {

      CMainFrame*frame=(CMainFrame*)AfxGetMainWnd();

      frame->m_wndToolBar.m_combobox.GetLBText(

      frame->m_wndToolBar.m_combobox.GetCurSel(),m_text);

      UpdateData(0);

    }

    void CToolComboView::OnEditchangeCombo()

    {

      CMainFrame*frame=(CMainFrame*)AfxGetMainWnd();

      CString cs;

      frame->m_wndToolBar.m_combobox.GetWindowText(cs);

      m_edit.SetWindowText(cs);

    }

      這樣,當選中組合框的字符串和編輯組合框內的字符時,程序就會執行相應的消息響應函數。至此,我們已經成功地在工具條中加入了組合框控件,并實現了對它的應用?!?nbsp;

    原文轉自: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>