我在主框架中调用dll,某一处理,动态库中需要往主程序中发送消息 POSITION pos;
pos = m_pListener->m_ptrListReader.GetHeadPosition();
void *ptr = NULL;
while(pos)
{
ptr = NULL;
ptr = m_pListener->m_ptrListReader.GetNext(pos); if(ptr == NULL)
continue; HWND hWnd = (HWND) ptr; if(::IsWindow(hWnd))
{
CWnd *pWnd;
//hWnd = pWnd->GetSafeHwnd(); //CWnd->HWND
pWnd = CWnd::FromHandle(hWnd); //HWND->CWnd PostMessage(hWnd,ID_MSG_TUXEDO_TPSETUNSOL,0,(LPARAM)pMap);
pWnd->PostMessage(ID_MSG_TUXEDO_TPSETUNSOL,0,(LPARAM)pMap); }
}动态库中的某个执行过程是这样的,发消息后,注册窗体收不到消息
pos = m_pListener->m_ptrListReader.GetHeadPosition();
void *ptr = NULL;
while(pos)
{
ptr = NULL;
ptr = m_pListener->m_ptrListReader.GetNext(pos); if(ptr == NULL)
continue; HWND hWnd = (HWND) ptr; if(::IsWindow(hWnd))
{
CWnd *pWnd;
//hWnd = pWnd->GetSafeHwnd(); //CWnd->HWND
pWnd = CWnd::FromHandle(hWnd); //HWND->CWnd PostMessage(hWnd,ID_MSG_TUXEDO_TPSETUNSOL,0,(LPARAM)pMap);
pWnd->PostMessage(ID_MSG_TUXEDO_TPSETUNSOL,0,(LPARAM)pMap); }
}动态库中的某个执行过程是这样的,发消息后,注册窗体收不到消息
解决方案 »
- 关于<CDialog,CFile>和<CView,CDocument>的问题
- 谁知道SQLConfigDataSource配置ODBC连接informix?
- 如何用MFC显示一个gif图片?
- 在SDI应用程序的其他类中包含CMyView.h的头文件怎么会出错???????
- 请问怎样把一个i*j的内存copy到一个a[i][j]的数组中?
- *****再问个关于new、delete的小问题
- 难道我启动的这个程序没有释放内存吗?
- 如何释放一个资源?
- 帮个忙,朋友们,怎样使CSliderCtrl控件的背景透明
- 给VC版推荐一个版主,Kevin_qing,请大家表态
- CPtrList类可以用来做什么,是否可以用来传输数据呢!
- 如何提取网页中的IP地址
ON_MESSAGE(ID_MSG_TUXEDO_TPSETUNSOL, OnTuxedoMessage)
LRESULT CMainFrame::OnTuxedoMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("Very good!");
return 0;
}
你应该在dll中发送消息给 CMainFrame,把pMap和ptr作为参数一起发送,
再由CMainFrame::OnTuxedoMessage发送消息给ptr。
if(pApp != NULL)
{
if(pApp->m_pListener != NULL)
pApp->m_pListener->AddReader(this->GetSafeHwnd());
}应该就是main的Hwnd啊
已经解决了,在框架创建完后注册订阅的,AfxGetMainWnd()->m_hWnd其他的接收不到我在App中initstance里面做的, if(m_pListener != NULL)
{
m_pListener->AddReader(AfxGetMainWnd()->m_hWnd);
}
总结:1、在主框架中,加入消息相应
afx_msg LRESULT OnTuxedoMessage(WPARAM wParam, LPARAM lParam);
ON_MESSAGE(ID_MSG_TUXEDO_TPSETUNSOL, OnTuxedoMessage)
LRESULT CMainFrame::OnTuxedoMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("Very good!");
return 0;
}2、调用dll中的函数,加入主框架Hwnd句柄
3、dll中某函数调用消息
SendMessage,postMessage都可以,看如何使用了说明:必须使用主框架Hwnd句柄,子框架什么的消息相应不到AfxGetMainWnd()->m_hWnd