• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            潛心看書(shū)研究!

            常用鏈接

            留言簿(19)

            隨筆分類(lèi)(81)

            文章分類(lèi)(89)

            相冊(cè)

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 216441
            • 排名 - 117

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            轉(zhuǎn)自:http://hi.baidu.com/blue_never_died/blog/item/04398694249ef71ed21b7007.html

            說(shuō)實(shí)話,我剛開(kāi)始看見(jiàn)Tab Control的時(shí)候,覺(jué)得很簡(jiǎn)單。哪知道用了一下,才發(fā)現(xiàn)自己錯(cuò)了。

            要用好它,還是需要一些技巧的。經(jīng)過(guò)網(wǎng)上搜索資料,以及我自己的摸索,把一些要點(diǎn)記錄在這里。

            Tab Control的運(yùn)行效果有點(diǎn)像Property Sheet,但兩者還是有一些區(qū)別。我的理解就是Property Sheet主要用在對(duì)話框中,對(duì)數(shù)據(jù)進(jìn)行進(jìn)行分類(lèi)管理。而Tab Control使用范圍更廣一些,既可以用在對(duì)話框,也可以用在視圖中,除了可以管理配置數(shù)據(jù)外,還可以對(duì)軟件的組織進(jìn)行規(guī)劃,比如可以通過(guò)它來(lái)切換不同的視圖等等。

            當(dāng)然這不是沒(méi)有代價(jià)的,Tab Control的編程就比Property Sheet的復(fù)雜很多。

             我最初有點(diǎn)搞不懂,如何在Tab Control中使用不同的Page,就象Property Page一樣,Tab Control并沒(méi)有提供便利的機(jī)制讓你輕松做到這一點(diǎn)。還好,VC是最棒的,撒花~通過(guò)變通的方法還是可以做到這一點(diǎn)。

            不羅嗦了,上代碼。

            假如我現(xiàn)在有個(gè)SDI程序,View是Form View,想在上面放個(gè)Tab Control,包含兩個(gè)Page。現(xiàn)在讓我們來(lái)看看應(yīng)該怎樣處理。

            首先當(dāng)然要增加一個(gè)Tab Control資源,然后利用Class Wizard,在View中增加一個(gè)Control變量。

            接著建立兩個(gè)對(duì)話框資源,別忘了把Style改為Child,Border改為None。然后就可以在上面加其他控件了。

            接著利用Class Wizard,分別為這兩個(gè)對(duì)話框建立兩個(gè)類(lèi),比如CPage1和CPage2。

            然后在View類(lèi)頭文件中,加入這兩個(gè)對(duì)話框?qū)ο蟆M瑫r(shí)增加一個(gè)變量int m_CurSelTab,用了表明是哪個(gè)Page即將被切換。

            為了避免用戶(hù)在切換Tab時(shí),程序?qū)ab Index的枚舉,可以利用數(shù)組來(lái)做這個(gè)事情。

            在View的初始化函數(shù)中需要把CPage1、CPage2和Tab Control關(guān)聯(lián)起來(lái),并保存頁(yè)面地址,設(shè)置初始頁(yè)面,等等。

            void CTab_testView::OnInitialUpdate()
            {
               CFormView::OnInitialUpdate();
               GetParentFrame()->RecalcLayout();
               ResizeParentToFit();
                
                //為T(mén)ab Control增加兩個(gè)頁(yè)面
                m_tab.InsertItem(0, _T("First"));
                m_tab.InsertItem(1, _T("Second"));
               
                //創(chuàng)建兩個(gè)對(duì)話框
                m_page1.Create(IDD_DIALOG1, &m_tab);
                m_page2.Create(IDD_DIALOG2, &m_tab);

                //設(shè)定在Tab內(nèi)顯示的范圍
                CRect rc;
                m_tab.GetClientRect(rc);
                rc.top += 20;
                rc.bottom -= 8;
                rc.left += 8;
                rc.right -= 8;

                m_page1.MoveWindow(&rc);
                m_page2.MoveWindow(&rc);

                //把對(duì)話框?qū)ο笾羔槺4嫫饋?lái)
                pDialog[0] = &m_page1;
                pDialog[1] = &m_page2;

                //顯示初始頁(yè)面
                pDialog[0]->ShowWindow(SW_SHOW);
                pDialog[1]->ShowWindow(SW_HIDE);

                //保存當(dāng)前選擇
                m_CurSelTab = 0;
            }

            這里面需要注意的是,我用了一個(gè)CDialog指針數(shù)組來(lái)進(jìn)行保存,數(shù)組的大小是Tab Control頁(yè)面的個(gè)數(shù),數(shù)組下標(biāo)對(duì)應(yīng)著每個(gè)頁(yè)面的索引(這樣方便快速存取)。

            用戶(hù)切換時(shí),需要響應(yīng)相關(guān)的消息。

            void CTab_testView::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
            {
             // TODO: Add your control notification handler code here
               
                pDialog[m_CurSelTab]->ShowWindow(SW_HIDE);
                m_CurSelTab = m_tab.GetCurSel();
                pDialog[m_CurSelTab]->ShowWindow(SW_SHOW);

             *pResult = 0;
            }

            首先我們先把當(dāng)前的頁(yè)面隱藏起來(lái),然后得到新的頁(yè)面索引,最后就把相關(guān)頁(yè)面顯示出來(lái)即可。這比一個(gè)個(gè)去枚舉簡(jiǎn)單多了。

            還有一點(diǎn)比較有意思,那就是DDX/DDV機(jī)制的運(yùn)用。要想獲得Tab Control各個(gè)頁(yè)面的數(shù)據(jù),可以利用DDX/DDV機(jī)制,但需要注意,因?yàn)檫@是多個(gè)頁(yè)面,所以需要顯式調(diào)用多次。

            void CTab_testView::OnButton1()
            {
             // TODO: Add your control notification handler code here
                m_page1.UpdateData();
                m_page2.UpdateData();
                CString str1 = m_page1.m_str1;
                CString str2 = m_page2.m_str2;
                AfxMessageBox(str1);
                AfxMessageBox(str2);
            }

            經(jīng)過(guò)這幾步處理,基本上我們就可以利用Tab Control的強(qiáng)大功能了。

            posted on 2007-09-25 23:37 閱讀(3410) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): MFC
            99久久精品国产毛片| 国内精品九九久久精品| 久久综合香蕉国产蜜臀AV| 亚洲欧洲精品成人久久奇米网| 韩国三级大全久久网站| jizzjizz国产精品久久| 国产精品美女久久久| 久久精品中文闷骚内射| 国产精品久久久久久久久| 2021精品国产综合久久| 久久综合九色综合久99| 91精品日韩人妻无码久久不卡| 欧美日韩中文字幕久久伊人| 精品久久久久久久久中文字幕| 99久久精品午夜一区二区| 久久国产精品久久| 久久亚洲中文字幕精品一区四| 久久精品一区二区三区中文字幕| 久久久久久毛片免费看| 香蕉久久影院| 精品熟女少妇a∨免费久久| 99久久99这里只有免费的精品| 国内精品久久久人妻中文字幕| 99久久精品国产免看国产一区| 香港aa三级久久三级| 久久99精品久久久久久噜噜| 久久久国产视频| 粉嫩小泬无遮挡久久久久久| 精品久久久久久无码免费| 99精品国产免费久久久久久下载| 久久久一本精品99久久精品88| 国产精品久久久久无码av| 国产精品日韩欧美久久综合| 久久人人爽人人爽人人爽| 日本精品久久久久中文字幕8| 日韩精品无码久久一区二区三| 新狼窝色AV性久久久久久| 国产综合成人久久大片91| 久久久久人妻精品一区二区三区 | 久久午夜无码鲁丝片秋霞| 久久亚洲AV成人无码国产 |