下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題編制僅供參考審核批準生效日期地址:電話:傳真:郵編:小心的使用消息傳送--傳送給多個View類時需要引起注意的一個問題我的前一篇文章里說的是關(guān)于《兩種自定義消息的發(fā)送與接收的方法實現(xiàn)》可當(dāng)我在一次使用消息傳送的時候也遇到一個讓人迷惑的問題,好在最后解決了。-------------------------------------------------------------
原來我對于一個消息的傳送也做過,使用的是
CMainFrame*pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
//通過獲取當(dāng)前框架指針
CView*active=pMF->GetActiveView();//獲取當(dāng)前視類指針
if(active!=NULL)
active->PostMessage(WM_MY_MESSAGE,0,0);
//使用PostMessage發(fā)送消息
來發(fā)送我定義的消息的。
很順利的,我就在要接收的View類里接收到了該消息。可是當(dāng)一個類中定義了2個自定義的消息,并要分別發(fā)送給兩個不同的View視圖類的時候,如果還般照上面的代碼,就要出一些問題了。為什么說是照搬就會出現(xiàn)問題呢請注意一個地方:
上面的代碼中,是如何得到View類的指針的。對,就是使用的函數(shù)GetActiveView(),這個函數(shù)的作用是獲得"當(dāng)前"視圖指針。我之所以出問題,使得其中的一個View類不能接收到消息也就是這個原因。------------------------------------------------------------下面詳細說明我出錯的過程和解決過程。來源:一個SDI被我用靜態(tài)切分的方式,且分成左右大小相等的兩個部分,并使這兩個部分分別指向自行創(chuàng)建的兩個新類:CMyLeftView和CMyRightView,它們的基類都是CEditView。所以說這兩個準備接收消息的視圖類除了名字,其他并沒有什么不太一樣的地方。一個對話框(CMyFindDialog類),其上有2個RADIOBUTTON控件,和一個確定按鈕,這兩個RADIOBUTTON控件在選擇的時候,使其只能進行單選,他們也就分別對應(yīng)于前面所說的左右兩個部分,選擇后,點擊確定按鈕,便表示向哪個視圖發(fā)送消息。做好了發(fā)送和接收部分,運行發(fā)現(xiàn)只能有一個消息被接收到,
voidCMyFindDialog::OnButtonFind()
{
MainFrame*pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CView*active=pMF->GetActiveView();//獲取當(dāng)前視類指針
//錯就錯在上一句得到的active是個“不確定“的對象。
if(m_selLeft==TRUE)
{
if(active!=NULL)
active->PostMessage(WM_MY_MESSAGE_LEFT,0,0);
}
elseif(m_selRight==TRUE)
{
if(active!=NULL)
active->PostMessage(WM_MY_MESSAGE_RIGHT,0,0);
}
else
MessageBox("MUSTCHOOSEONE!");
}通過GetActiveView()得到的當(dāng)前視類指針,那么如果你打開對話框之前,焦點(光標(biāo))在左邊,那么就是左邊能接收到消息,右邊怎么也接收不到。如果你打開對話框之前,焦點(光標(biāo))在右邊,那么就是右邊能接收到消息,左邊怎么也接收不到。程序運行后,焦點(光標(biāo))默認的是在左邊,這也就導(dǎo)致我總一為是右邊的接收消息的部分有問題。其實,如果在程序運行后,先把焦點(光標(biāo))改換到右邊,再打開對話框測試發(fā)送與接收,就成了左邊收不到消息,右邊可以收到消息。(這還是在論壇中,別人的話提醒了,才找到了錯誤的所在。要不然還在考慮是不是接收部分出了問題。)對于這樣一個向2個View類發(fā)送消息問題,就是要注意你所執(zhí)行發(fā)送(PostMessage)的對象是誰!正確的代碼如下:voidCMyFindDialog::OnButtonFind(){
CMainFrame*pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMyLeftView*pLV=(CMyLeftView*)pMF->(0,0);
CMyRightView*pRV=(CMyRightView*)pMF->(0,1);
//對于我這個題,是通過切分對象m_wndSplitter的GetPane函數(shù)得到它實際并確定的
//視圖類指針的。
//如果你也是多個視圖類,但不是切分,而是別的,只要注意
//獲得的是個你確定視圖對象指針。
if(m_selLeft==TRUE)
{
if(pLV!=NULL)
pLV->PostMessage(WM_MY_MESSAGE_LEFT,0,0);
}
elseif(m_selRight==TRUE)
{
if(pRV!=NULL)
pRV->PostMessage(WM_MY_MESSAGE_RIGHT,0,0);
}
else
MessageBox("MUSTCHOOSEONE!");
}總結(jié):
當(dāng)你需要發(fā)送消息給多個視圖對象的時候,要考慮你是向什么樣的視圖對象發(fā)送消息。如果你就是向多個視圖對象中當(dāng)前的視圖對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際貨運代理行業(yè)營銷策略方案
- 使用在皮膚上的驅(qū)蚊劑產(chǎn)品供應(yīng)鏈分析
- 廢棄物資源化利用行業(yè)市場調(diào)研分析報告
- 電動綠籬修剪機產(chǎn)品供應(yīng)鏈分析
- 維生素軟糖細分市場深度研究報告
- 芥末罐商業(yè)機會挖掘與戰(zhàn)略布局策略研究報告
- 牙膏細分市場深度研究報告
- 書包產(chǎn)品供應(yīng)鏈分析
- 電源連接器市場發(fā)展前景分析及供需格局研究預(yù)測報告
- 蒸汽供暖裝置用氣閥細分市場深度研究報告
- 托卡馬克裝置原理2[1]
- “模擬法庭”在高中法律教學(xué)中的應(yīng)用與探究
- 江蘇自考數(shù)學(xué)教育學(xué)知識點
- [二手房買賣合同正式版] 二手房買賣合同最新版
- 部編版五年級語文上冊第四單元集體備課教學(xué)計劃和全部教案
- 五年級語文上冊 第六單元 22《蟬》課后練習(xí) 北京版-北京版小學(xué)五年級上冊語文試題
- 最新部編版五年級道德與法治上冊第四單元教材分析
- 課程設(shè)計 基于電阻應(yīng)變片的S型稱重傳感器設(shè)計
- 中國血液透析用血管通路專家共識
- cosplay評分標(biāo)準
- 中醫(yī)真實世界臨床研究技術(shù)規(guī)范(草案)
評論
0/150
提交評論