• <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>

            KISS(Keep It Simple, Standard)

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              10 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(10)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

              一、創(chuàng)建DialogBar的派生類

            首先,創(chuàng)建對(duì)話框資源:在對(duì)話框資源編輯器內(nèi)生成一個(gè)Dialog資源,并將其風(fēng)格(Style)屬性必須設(shè)置為Child,不能設(shè)置為OverlappedPopup,否則運(yùn)行肯定出錯(cuò);至于邊界屬性則隨用戶自己喜歡,一般都是選擇None。其余屬性也隨用戶選擇,一般沒有特殊要求還是選擇默認(rèn)的好。

            其次,創(chuàng)建基于CDialog的派生類:打開ClassWizard,為以上創(chuàng)建的資源添加一個(gè)以CDialog為基類的派生類(因?yàn)?/span>ClassWizard沒有將CDialogBar列在基類目錄清單中,所以用戶只能先以CDialog類派生)。

            再次,修改派生類以CDialogBar為基類:通常需要手工修改幾處代碼,在本例中派生類以CDataStatus命名。(注:以后講解中凡是手工改動(dòng)都是以灰背景顯示)

            1 在頭文件中修改繼承關(guān)系

            class CDataStatus : public CDialog 改為class CDataStatus : public CDialogBar

            2 在代碼文件中修該構(gòu)造函數(shù)繼承關(guān)系

            CDataStatus::CDataStatus(CWnd* pParent /*=NULL*/)

            : CDialog(CDataStatus::IDD, pParent)

            {

                //{{AFX_DATA_INIT(CDataStatus)

                       // NOTE: the ClassWizard will add member initialization here

                //}}AFX_DATA_INIT

            }

            改為

            CDataStatus::CDataStatus(CWnd* pParent /*=NULL*/)

            {

                //{{AFX_DATA_INIT(CDataStatus)

                       // NOTE: the ClassWizard will add member initialization here

                //}}AFX_DATA_INIT

            }

            3 DDX綁定函數(shù)中的繼承關(guān)系去掉

            即將void CDataStatus::DoDataExchange(CDataExchange* pDX)

            {

                CDialog::DoDataExchange(pDX);

                //{{AFX_DATA_MAP(CCurrentCheckDlg)

                ………..

                //}}AFX_DATA_MAP

            }

            改為

            void CDataStatus::DoDataExchange(CDataExchange* pDX)

            {

                //{{AFX_DATA_MAP(CCurrentCheckDlg)

                ………….

                //}}AFX_DATA_MAP

            }

            4、 重新初始化函數(shù)(這個(gè)相當(dāng)重要,如果不這么做的話,DDX函數(shù)形同虛設(shè),當(dāng)然用戶的工具條如果沒有用到DDX的話當(dāng)然可以不加這段代碼):

            首先在ClassWizardMessageMap中對(duì)消息該CDataStatus類的WM_INITDIALOG消息添加處理函數(shù)默認(rèn)名為OnInitDialog

            其次手工修改代碼如下:

            1、             添加消息映射函數(shù)。由于對(duì)話框形式的初始化函數(shù)消息并未加載到消息映射內(nèi),為此我們需要手工添加,要不然代碼無法攔截該工具條的初始化消息,形式如下:

            BEGIN_MESSAGE_MAP(CDataStatus, CDialogBar)

                   //{{AFX_MSG_MAP(CDataStatus)

                   .......

                   //}}AFX_MSG_MAP

            END_MESSAGE_MAP()

            改為:

            BEGIN_MESSAGE_MAP(CDataStatus, CDialogBar)

                   //{{AFX_MSG_MAP(CDataStatus)

                   .......

                   ON_MESSAGE(WM_INITDIALOG,OnInitDialog)

                   //}}AFX_MSG_MAP

            END_MESSAGE_MAP()

            2             修改OnInitDialog函數(shù),此函數(shù)并未傳遞參數(shù),但是在這里我們需要讓它傳遞參數(shù),代碼如下修改(當(dāng)然頭文件中,對(duì)聲明也要做修改,在這里就不作贅述了)

            BOOL CDataStatus::OnInitDialog()

            {

                   CDialogBar::OnInitDialog();

               

                   // TODO: Add extra initialization here

                   return TRUE; // return TRUE unless you set the focus to a control

                          // EXCEPTION: OCX Property Pages should return FALSE

            }

            改為:

            BOOL CDataStatus::OnInitDialog(UINT wParam,LONG lParam)

            {

                   //CDialogBar::OnInitDialog();

                    

                   // TODO: Add extra initialization here

                   BOOL bRet = HandleInitDialog(wParam,lParam);

                   if (!UpdateData(FALSE))

                   {

                          TRACE("InitCDataStatus Failed!");

                   }

                   return TRUE; // return TRUE unless you set the focus to a control

                                 // EXCEPTION: OCX Property Pages should return FALSE

            }

             

            二、在框架類中實(shí)現(xiàn)該派生類的對(duì)象化

            首先,在框架類的頭文件內(nèi)聲明實(shí)例對(duì)象,本例實(shí)例化:CDataStatus    m_wndDataStatus;當(dāng)然頭文件中不可避免要包含新派生類的頭文件。

            其次,在框架類的OnCreate函數(shù)內(nèi)創(chuàng)建對(duì)象并將對(duì)象綁定對(duì)話框資源。形式與創(chuàng)建ToolBar原理一樣,本例實(shí)例如下:

            if (!m_wndDataStatus.Create(this,IDD_DATASTATUS,WS_VISIBLE|WS_CHILD

            |CBRS_SIZE_DYNAMIC|CBRS_BOTTOM,IDD_DATASTATUS))

                  {

                         TRACE0("Failed to create CDataStatus bar!");

                         return -1;

                  }

            再次,最為關(guān)鍵的一點(diǎn)就是重寫框架類的OnCmdMsg虛函數(shù)。如果不重寫該函數(shù),那么不光DDX功能無法實(shí)現(xiàn),連最基本的OnCommand事件都無法實(shí)現(xiàn)。而且還得手工添加代碼,形式如下:

            BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra,

            AFX_CMDHANDLERINFO* pHandlerInfo)

            {

                  // TODO: Add your specialized code here and/or call the base class

                  return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

            }

            改為:

            BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)

            {

                  // TODO: Add your specialized code here and/or call the base class

                  if (m_wndDataStatus.OnCmdMsg(nID,nCode,pExtra,pHandlerInfo))

                         return    TRUE;

                  return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

            }

            三、CReBar上添加該實(shí)例化對(duì)象

            其實(shí)這一步倒是相當(dāng)簡(jiǎn)單,只是自己以前沒用過這個(gè)類,所以在這里也順便用了一下。

            首先,在框架類的頭文件中用CRebar聲明一個(gè)對(duì)象,如CReBar   m_wndReBar;

            其次,在框架類的代碼文件中的OnCreat函數(shù)體內(nèi),生成對(duì)象,代碼如下:

            if (!m_wndReBar.Create(this,RBS_BANDBORDERS,WS_CHILD |

            WS_VISIBLE| CBRS_BOTTOM|WS_CLIPSIBLINGS|WS_CLIPCHILDREN))

                  {

                         TRACE0("Failed to create Rebar \n");

                         return -1;

                  }

            再次,就是將所要添加的toolbar以及新生成的CDataStatus對(duì)象m_wndDataStatus加進(jìn)Rebar的對(duì)象m_wndReBar中,代碼如下:

            m_wndReBar.AddBar(&m_wndDataStatus,NULL,NULL,

            RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP);

            posted on 2007-08-24 17:17 QUIRE-0216 閱讀(713) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC
            999久久久免费国产精品播放| 久久无码专区国产精品发布| 国产精品久久久福利| 久久成人国产精品二三区| 四虎久久影院| 国产成人久久精品一区二区三区 | 91秦先生久久久久久久| 亚洲七七久久精品中文国产 | 久久精品国产半推半就| 国产亚州精品女人久久久久久 | 久久精品国产91久久麻豆自制 | 久久精品国产亚洲一区二区三区| 中文字幕热久久久久久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 色婷婷综合久久久中文字幕 | 久久亚洲sm情趣捆绑调教| 99久久777色| 久久国产高潮流白浆免费观看| 欧美久久亚洲精品| 一本久久a久久精品综合夜夜| 亚洲人成网亚洲欧洲无码久久 | 国产午夜福利精品久久2021| 日批日出水久久亚洲精品tv| AA级片免费看视频久久| 国产人久久人人人人爽| 久久只有这里有精品4| 久久久久国色AV免费看图片| 欧美亚洲国产精品久久蜜芽| 97久久香蕉国产线看观看| 色婷婷综合久久久久中文| 亚洲综合伊人久久综合| 亚洲精品无码久久久久sm| 老男人久久青草av高清| 伊人久久大香线蕉成人| 狠狠色丁香婷婷久久综合五月| 久久丝袜精品中文字幕| 久久亚洲色一区二区三区| 一本久久免费视频| 狠狠综合久久AV一区二区三区| 亚洲国产精品高清久久久| 日韩av无码久久精品免费|