hur.cn - 华软网

 热门搜索

想在view.cpp中用PostMessage调用自定义消息,出现问题

  作者:未知    来源:网络    更新时间:2011/1/11
自定义消息WM_DATAREADY建立进程以下:
在Resource.h中增加
#define WM_DATAREADY WM_USER+202
在view.h中增加
afx_msg void OnDataReady();
在view.cpp中增加
ON_MESSAGE(WM_DATAREADY,OnDataReady)
...
//建立自定义消息响应函数
void View::OnDataReady(){
AfxMessageBox("aaaaa");

}


然后我在view的一个按钮函数中增加以下内容试图让view中响应WM_DATAREADY,弹出一个提醒框aaaaa
        CWnd* pWnd=CWnd::FindWindow(NULL,"viewname");//viewname为窗口名

        if (pWnd==0)
{
AfxMessageBox("pWnd不是一个有效的窗口");
}
         else
 {
             pWnd->PostMessage(WM_DATAREADY,1,0);
 }

组建,编译都无问题,然则提醒框就是弹不出来,不知道是我增加自定义消息犯错了照旧那里犯错了?
---华软 网友回答---
C++">afx_msg void OnDataReady();
->
afx_msg LRESULT OnDataReady(WPARAM wParam, LPARAM lParam);

BEGIN_MESSAGE_MAP()
...
ON_MESSAGE(WM_DATAREADY, OnDataReady)
END_MESSAGE_MAP()

LRESULT CXXView::OnDataReady(WPARAM wParam, LPARAM lParam)
{
 ...
 return 0;
}

如果你的下面的FindWindow获得CWnd*没有错的话
---华软网友回复---
引用 1 楼 visualeleven 的回复:
C/C++ code
afx_msg void OnDataReady();
->
afx_msg LRESULT OnDataReady(WPARAM wParam, LPARAM lParam);

BEGIN_MESSAGE_MAP()
...
ON_MESSAGE(WM_DATAREADY, OnDataReady)
END_MESSAGE_MAP()

LRESULT……

照2楼方法,修改了函数的前往值和定义,编译组建无问题,然则提醒框照旧没法出现
---华软网友回复---
引用 2 楼 tingwhere 的回复:
引用 1 楼 visualeleven 的回复:
C/C++ code
afx_msg void OnDataReady();
->
afx_msg LRESULT OnDataReady(WPARAM wParam, LPARAM lParam);

BEGIN_MESSAGE_MAP()
...
ON_MESSAGE(WM_DATAREADY, OnDataReady)
EN……

CWnd* pWnd=CWnd::FindWindow(NULL,"viewname");//viewname为窗口名
---------------
你这里的pWnd是你的View类的窗口指针吗?
---华软网友回复---
引用 3 楼 visualeleven 的回复:
引用 2 楼 tingwhere 的回复:
引用 1 楼 visualeleven 的回复:
C/C++ code
afx_msg void OnDataReady();
->
afx_msg LRESULT OnDataReady(WPARAM wParam, LPARAM lParam);

BEGIN_MESSAGE_MAP()
...
ON_MESSAGE(WM_DATA……

我试图用这个方法获得view类的窗口指针
然则看文献猎取指针应该用AfxGetApp(),详细也不知道怎么用。。
适才在else里加上了
else

   AfxMessageBox("起头发送DATA");
  pWnd->PostMessage(WM_DATAREADY,1,0);
}

起头发送DATA文字能够显示,然则貌似照旧调用不了WM_DATAREADY
看来似乎是指针没用对?先谢谢 
VisualEleven大大了



---华软网友回复---
我将猎取指针用以下方法改变后
        CMainFrame *pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd; 
        CMap1View* pView = (CMap1View *)pMain->GetActiveView(); 
 if (pMain==0)
{
AfxMessageBox("pWnd不是一个有效的窗口");
}
  else
{
  AfxMessageBox("起头发送DATA");
  pMain->PostMessage(WM_DATAREADY,1,0);
}

问题依旧,不知道出在那里
---华软网友回复---
pMain->PostMessage(WM_DATAREADY,1,0);
pView->PostMessage(WM_DATAREADY,1,0);

---华软网友回复---
如果前面窗口正常建立,应该是 showwindow将Hide酿成Show即可
---华软网友回复---
HWND hwnd=::FindWindow("CXXXView类名","View窗口名字");
::PostMessage(hwnd,WM_DATAREADY,1,0);

---华软网友回复---
引用 6 楼 schlafenhamster 的回复:
pMain->PostMessage(WM_DATAREADY,1,0);
pView->PostMessage(WM_DATAREADY,1,0);


问题出在这里,谢谢 schlafenhamster的点睛之处,谢谢VisualEleven
的指点 
下面结贴
---华软网友回复---
引用 8 楼 gudufuyun 的回复:
HWND hwnd=::FindWindow("CXXXView类名","View窗口名字");
::PostMessage(hwnd,WM_DATAREADY,1,0);

这个方法也可行      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。