小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

CDialogBar使用手記--一片葉子的世界

 langzi6606 2010-11-18

CDialogBar使用手記

關(guān)鍵詞CDialogBar                                          

調(diào)試了兩天CDialogBar,終于搞定了。其中參考了CSDN上的幾篇文章(CSDN還是不錯(cuò)的)。

現(xiàn)在把調(diào)試心得寫(xiě)出來(lái)。

―――――――――――――――――――――――――――

以下一部分文章來(lái)自于CSDNhouen_study,我稍稍修改了一下文字:)

那就使用CDialogBar就可以擁有和CDialog一樣的方便和快捷。

    步驟1:添加一個(gè)CDialogBar派生類(lèi)

    在資源中添加一個(gè)對(duì)話框,再采用類(lèi)向?qū)?lái)添加類(lèi),找不到CDialogBar作為基類(lèi)吧,可以先用CDialog作為基類(lèi)產(chǎn)生一個(gè),然后把所以的“CDialog”替換為“CDialogBar”,替換完成了。編譯一下,^_^有錯(cuò)誤吧!?。ó?dāng)然有錯(cuò)誤,CDialogBar是從CControlBar中繼承過(guò)來(lái)的,不是從CDialogBar繼承過(guò)來(lái)的,不能直接替換)請(qǐng)看步驟2。

    步驟2:解決編譯錯(cuò)誤并完善該類(lèi)

其實(shí)錯(cuò)誤就是構(gòu)著函數(shù)調(diào)用基類(lèi)時(shí)有問(wèn)題,: CDialogBar(/*CDlgBar::IDD, pParent*/) 象這樣注釋掉就可以了,添加一個(gè)類(lèi)似OnInitDialog的函數(shù),在CDialogBar中是不存在OnInitDialog的消息的,至少我還不知道。

因?yàn)槌跏蓟窃趧?chuàng)建后調(diào)用的,所以我們就重寫(xiě)virtual BOOL Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID);這個(gè)函數(shù)。注意哦用向?qū)砑拥?/span>Create函數(shù)的參數(shù)是不對(duì)的喔,要按照上面的修改過(guò)來(lái)。

下面是實(shí)現(xiàn)代碼(很簡(jiǎn)單的)

BOOL CDlgXXX::Create(CWnd* pParentWnd,UINT nIDTemplate,UINT nStyle,UINT nID)

{

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

 BOOL bRes= CDialogBar::Create(pParentWnd,nIDTemplate,nStyle,nID );

 InitDialogBar();//在類(lèi)中添加一個(gè)成員函數(shù)就可以了

 return bRes;

}

BOOL CDlgXXX::InitDialogBar()

{

 UpdateData(FALSE);//這個(gè)一定要啊,這樣就會(huì)有和CDialog一樣的數(shù)據(jù)交換效果了

 return TRUE;

}

其實(shí)你也可以不用添加成員函數(shù),只用類(lèi)向?qū)砑右粋€(gè)OnInitDialog ()函數(shù),然后把CDialogBar::OnInitDialog();這句話注釋掉,呵呵,因?yàn)?/span>CControlBar沒(méi)有OnInitDialog()。然后添加UpdateData(FALSE);這句話就可以了,在UpdateData后面添加其他的控件初始化的工作就可以了。最后不要忘記在Create函數(shù)中顯式的調(diào)用OnInitDialog()函數(shù)。

步驟3:創(chuàng)建和使用

CMainFrameOnCreate函數(shù)中就可以創(chuàng)建和使用了

if (!m_barAttrib.Create(this,IDD_DLG_COM_ATTRIB,

CBRS_RIGHT|CBRS_GRIPPER, XXX))

 {

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

   return -1;

 }

XXX是一個(gè)資源id手工直接在資源的.h文件中添加一條。

步驟4:在添加CDialogBar上添加控件

在你創(chuàng)建的Dialog上面放一個(gè)按鈕,運(yùn)行程序試一試,怎么按鈕是灰色的,即使在Dialog中添加了響應(yīng)事件,也沒(méi)有用。這個(gè)問(wèn)題困擾了我好長(zhǎng)時(shí)間,最后在CSDN上找到答案。按鈕消息不是發(fā)到Dialog上,而是直接發(fā)給CMainFrame上,也就是說(shuō)cdialogbar上面的按鈕消息只有映射到CMainframe上面才好使。這回你在CMainframe上面處理消息看看,滿意了吧。

CSDN上有人是這么做的:

----------------------------------------------------

這個(gè)問(wèn)題我也遇到過(guò),dialogbar上的控件消息可以直接由Mainframe類(lèi)處理,如果通過(guò)派生CDialogBar類(lèi)來(lái)處理消息的話有時(shí)確實(shí)會(huì)出現(xiàn)明明映射了消息處理函數(shù),但控件就是灰色。

我是這么解決的,在MainFrame里為控件再做一次消息映射,但處理函數(shù)里什么都不做,這樣控件一定是已經(jīng)enable了,這時(shí)候如果在DialogBar派生類(lèi)里也做了消息映射那么你的處理函數(shù)就已經(jīng)起作用了。

也就是說(shuō)在dialogbar派生類(lèi)處理控件消息比在mainframe中處理優(yōu)先級(jí)高,但在mainframe中有處理函數(shù)一定會(huì)將控件enable。

-------------------------------------------------------------

但是當(dāng)我想改變按鈕狀態(tài)的時(shí)候,又出現(xiàn)問(wèn)題了,如何修改按鈕的屬性都不行,呵呵,又搞不定了:),繼續(xù)看。。。。。。

步驟5:如何使CDialogBar上的按鈕變灰

用下面的方法可以實(shí)現(xiàn):

先在MainFrm.h中加入一個(gè)變量:

bool ENABLE;

并手工加入一個(gè)消息函數(shù)聲明:

afx_msg void OnupdataButton(CCmdUI *pCmdUI);

然后在MainFrm.cpp中:

先在初始化中加入:

ENABLE=true;

手工加入一個(gè)消息映射:

ON_UPDATE_COMMAND_UI(IDC_BUTTON1,OnupdataButton)

再寫(xiě)函數(shù)的實(shí)現(xiàn)代碼:

void CMainFrame::OnupdataButton(CCmdUI *pCmdUI)

{

if(ENABLE)

{

pCmdUI->Enable(0);

}

Else

{

pCmdUI->Enable(1);

}

}

在你想改變此按鈕的是否禁用處只要寫(xiě)ENABLE=!ENABLE;就可以了。呵呵,如果想控制多個(gè)按鈕的話,就需要設(shè)定多個(gè)BOOL型變量,分別寫(xiě)消息函數(shù)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多