VC新人,刚入门,想问问如何在文档类里面给视类发消息啊,网上那些办法试了下,好像没起作用呢,PostMessage执行了,不过视类收到了好像没反应啊
具体做法是在
Resource.h里面#define WM_MY_MESSAGE WM_USER+100
然后在View.h里面afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);
View.app里面ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
并且LPARAM CFieldWatchView::OnMyMessage(WPARAM wParam,LPARAM lParam)然后在文档类里面按照网上的文章里面执行的
CMDIFrameWnd *pFrame;
CMDIChildWnd *pChild;
CView *pView;
pFrame=(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
pChild=(CMDIChildWnd*)pFrame->GetActiveFrame();
pView=pChild->GetActiveView();
pView->PostMessage(WM_MY_MESSAGE,0,0);
观察那个OnMyMessage并未执行啊,小弟实在搞不定了,求高手帮忙下啊
具体做法是在
Resource.h里面#define WM_MY_MESSAGE WM_USER+100
然后在View.h里面afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);
View.app里面ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
并且LPARAM CFieldWatchView::OnMyMessage(WPARAM wParam,LPARAM lParam)然后在文档类里面按照网上的文章里面执行的
CMDIFrameWnd *pFrame;
CMDIChildWnd *pChild;
CView *pView;
pFrame=(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
pChild=(CMDIChildWnd*)pFrame->GetActiveFrame();
pView=pChild->GetActiveView();
pView->PostMessage(WM_MY_MESSAGE,0,0);
观察那个OnMyMessage并未执行啊,小弟实在搞不定了,求高手帮忙下啊
后面也pView=(CFieldWatchView*)pChild->GetActiveView();
这样试试,因为你是自定义消息。我记不准了。
在OnMyMessage(WPARAM wParam,LPARAM lParam){...}里面下个断点看看是不是消息过去了。要是像2楼说的你是多个View那就麻烦了,你得遍历所有的View。有一个省事儿的办法是把消息发给CMainFrame,然后由主窗口广播,这样就无论在哪个View都收到消息了。
应该是没过去,我在那个On里面第一行就执行了一个messagebox,结果没弹出的
CView *pView;
CFieldWatchView *pFiView;//CFieldWatchView是LZ收消息的视类名称
POSITION pos = pDoc->GetFirstViewPosition();
while(pos!=NULL)
{
pView = pDoc->GetNextView(pos);
if(pView->IsKindOf((RUNTIME_CLASS(CFieldWatchView))) )
{
pFiView = (CFieldWatchView*)pView;
break;
}
}
pFiView->PostMessage(WM_MY_MESSAGE,0,0);
AfxGetMainWnd()->SendMessageToDescendants(WM_MY_MESSAGE);
在哪儿都可以发消息,在任何子窗口都能收,比较适合自定义消息。不过你要是为了学习还是把PostMessage什么的搞搞清楚吧。