小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題_第1頁
小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題_第2頁
小心的使用消息傳送-傳送給多個View類時需要引起注意的一個問題_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論