一个类中难道不能使用2个自定义的消息吗,发送到2个类去?

zhdleo 2002-12-11 10:26:01
就像 见鬼了一样!
测试了一个成功后,把数量变为2个就出问题了!------ 按理解不该这样呀。
...全文
96 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhdleo 2002-12-11
  • 打赏
  • 举报
回复
这是两种方法的问题,
#define WM_MY_MESSAGE_TXT (WM_USER+200)
#define WM_MY_MESSAGE_HEX (WM_USER+201)
这种方式我是过了,还是这样!
一个可以,一个不行。

我都开始怀疑我的发送是不是有问题。
可两个都是一样,怎么会一个可以一个不行。

所以我还是在想为什么一个接收有问题。
waitingforyou 2002-12-11
  • 打赏
  • 举报
回复
static UINT WM_MY_MESSAGE_TXT=RegisterWindowMessage("MessageTxt");
和static UINT WM_MY_MESSAGE_HEX=RegisterWindowMessage("MessageHex");

呵呵,你直接点
#define WM_MY_MESSAGE_TXT WM_USER+200
#define WM_MY_MESSAGE_HEX WM_USER+201

有多少消息读能发送的
zhdleo 2002-12-11
  • 打赏
  • 举报
回复
在一个对话框类中,我定义了
static UINT WM_MY_MESSAGE_TXT=RegisterWindowMessage("MessageTxt");
和static UINT WM_MY_MESSAGE_HEX=RegisterWindowMessage("MessageHex");
两个自定义消息。想分别想两个结构类似,但名字不同的View类中发送消息。

对话框上一个按钮,根据一个参数变量的值,来决定是发送哪个消息。

在两个view中分别加入了类似的接收消息的代码,

我本一为,这样两个view都可以接收到消息,可是试过来试过去,都只是一个
view可以接收到消息,另一个不行。
//以通过代码测试,知道发送消息的命令都可执行,那么就说明只是接收的时候出了问题。
可是,2个结构相似的类,我接收代码怎么有误呢?

而且我已比较过2个接收的代码,都是一样的(除了各自的名字)。


所以现在我就在想,不会是一个类只能定义一个消息进行传送吧--------这不合逻辑呀!
zhdleo 2002-12-11
  • 打赏
  • 举报
回复
谢谢大家了!

我现在将我刚才最后调试好的代码公布如下:
-----------------------------------------
主要是这个发送的时候选择的View的问题
-----------------------------------------
void CMyFindDialog::OnButtonFind()
{
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMyLeftView* pLV=(CMyLeftView*)pMF->m_wndSplitter.GetPane(0,0);
CMyRightView* pRV=(CMyRightView*)pMF->m_wndSplitter.GetPane(0,1);

if(m_selTxt == TRUE)
{ if(pLV != NULL)
pLV->PostMessage(WM_MY_MESSAGE_TXT,0,0);
}
else if(m_selHex == TRUE)
{ //MessageBox("!!!!!!");
if(pRV != NULL)
{if(pRV->PostMessage(WM_MY_MESSAGE_HEX,0,0))
//MessageBox("????");
}
}
else
MessageBox("MUST CHOOSE THE FILE TPYE!");
}
--------------------------------------
看来只要得到视图的指针就行,不一定要是一个当前视类指针!
CView * active = pMF->GetActiveView();
对一个还好说,要是两个,有区别的,那就不行了!

-----------------------------------------------------

也算是一个总结:
对于一个类(CMyFindDialog)定义2个自定义消息,并分别发送给
2个不同的视图类(CMyLeftView和CMyRightView)一定要小心一点,
如果用GetActiveView()获得当前视图类指针,那么必然只能获得其中的一个
视图类,那么要是传送2个消息的话,必然会有一个失败。
所以还是分别获得2个视图类的指针(例如:(针对切分窗口)
CMyLeftView* pLV=(CMyLeftView*)pMF->m_wndSplitter.GetPane(0,0);
CMyRightView* pRV=(CMyRightView*)pMF->m_wndSplitter.GetPane(0,1);


然后再用不同的指针发送这2个消息,那么就都可以收到了。
-------------------------------------------------------

cbc 2002-12-11
  • 打赏
  • 举报
回复
改为sendmeessage试试,参数是一样的啊
zhdleo 2002-12-11
  • 打赏
  • 举报
回复
太感谢-----lllhaier(天地大方)


你的一席话使我茅塞顿开!

就是这样呀!

我把“焦点"
先转移到右边,那么在打开对话框,执行那两个消息,
左边的又不行,右边的可以了!!!

就是这个原因!!!太感谢!!!
haitaozhao 2002-12-11
  • 打赏
  • 举报
回复
按说Postmessage是要指定发送到的窗口的据并的,但看你的代码,是不是都发到同一个活动的视图类里了?我不太懂MFC。
lllhaier 2002-12-11
  • 打赏
  • 举报
回复
我想是这样的,你是往活动视图中发送消息,但是你的活动视图总是左边的那个视图,你可以是右边的那个视图获得焦点之后在试试。
ProgrameMan 2002-12-11
  • 打赏
  • 举报
回复
可能是你要接收消息的类出问题了吧!
zhdleo 2002-12-11
  • 打赏
  • 举报
回复

由于CWnd::PostMessage的返回值是BOOL型:
Return Value
Nonzero if the message is posted; otherwise 0.
所以我用进一步进行了测试,使用代码:
if(active->PostMessage(WM_MY_MESSAGE_HEX,0,0)) //使用PostMessage发送消息
MessageBox("????"); //此句执行了,说明Post了,
//所以关于变量m_selTxt 和 m_selHex 是否赋对值的问题就不攻自破,---那个正确着
要不怎么执行这个检测。
-------------------------------------------------
至于---用sendmessage看看到底发到指定的view里没? 这个方法我不会,
还是请教大家了,谁能教我一下。
zhdleo 2002-12-11
  • 打赏
  • 举报
回复
m_selTxt 和 m_selHex 两个变量是与两个选择--RADIO BUTTON框关联的
代码--
void CMyFindDialog::OnClickedRadioTxt()
{ UpdateData(TRUE);
m_selTxt = TRUE;
m_selHex = FALSE;
}
void CMyFindDialog::OnClickedRadioHex()
{ UpdateData(TRUE);
m_selTxt = FALSE;
m_selHex = TRUE;
}
--------------
这个与创送消息并没有太大关系,
你没看到我前一个回复里的测试语句:
{ MessageBox("!!!!!!"); //测试
if(activeleft != NULL)
{ active->PostMessage(WM_MY_MESSAGE_HEX,0,0);
MessageBox("????"); //测试
表试都已经执行了---active->PostMessage(WM_MY_MESSAGE_HEX,0,0);
你可能没注意到把!
------------------------------------------------
一个类中定义2个自定义消息,分别发给另2不同类的情况吗?
真的没人用过????????不会吧!
zx_sanjin 2002-12-11
  • 打赏
  • 举报
回复
用sendmessage看看到底发到指定的view里没?
F9+F10+F11肯定会出结果的

good luck
isdong 2002-12-11
  • 打赏
  • 举报
回复
m_selHex 是不是正确?这种东西为什么不用iskindof来判断??
hljalong 2002-12-11
  • 打赏
  • 举报
回复
我想你可以查一下两次获得的active是否为不同的视类对象,因为我不知你的m_selTxt 和 m_selHex 两个变量是与什么相关联的,所以也就不知是否可以只凭它们的真就可知当前被激活的视类对应你想要的。
zhenxizhou 2002-12-11
  • 打赏
  • 举报
回复
这个倒真没试过。怎么会有这个问题?
关注。
zhdleo 2002-12-11
  • 打赏
  • 举报
回复
我追加我的发送方的代码:
------------------------------
是一个按钮的响应,根据参数决定进行哪个消息的传送。
------------------------------------------------
void CMyFindDialog::OnButtonFind()
{ //点击“查找”后,根据选择,发送消息!
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针
CView * active = pMF->GetActiveView();//才能获取当前视类指针

if(m_selTxt == TRUE)
{ if(active != NULL) //获取了当前视类指针才能发送消息
active->PostMessage(WM_MY_MESSAGE_TXT,0,0); //使用PostMessage发送消息WM_MY_MESSAGE_TXT
} //往左边的视图类里发消息可以收到!

else if(m_selHex == TRUE)
{ MessageBox("!!!!!!");
//上面这个有显示,表示进入m_selHex == TRUE
if(activeleft != NULL) //获取了当前视类指针才能发送消息
{ active->PostMessage(WM_MY_MESSAGE_HEX,0,0);
//使用PostMessage发送消息WM_MY_MESSAGE_HEX
MessageBox("????");
//上面这个有显示,表示前面一句发送应该已经执行,
//所以我的判定是消息发送了,但没收到!
}
} //但往右边的视图类里发消息却收不到!
else
MessageBox("MUST CHOOSE THE FILE TPYE!");
----------------------------------------------------------
我的判断是否真确呢?

------------------------
难道没人遇到过,一个类中定义2个自定义消息,分别发给另2不同类的情况吗?
我的这个不会这么特殊吧!
内容概要:本书《Deep Reinforcement Learning with Guaranteed Performance》探讨了基于李雅普诺夫方法的深度强化学习及其在非线性系统最优控制中的应用。书中提出了一种近似最优自适应控制方法,结合泰勒展开、神经网络、估计器设计及滑模控制思想,解决了不同场景下的跟踪控制问题。该方法不仅保证了性能指标的渐近收敛,还确保了跟踪误差的渐近收敛至零。此外,书中还涉及了执行器饱和、冗余解析等问题,并提出了新的冗余解析方法,验证了所提方法的有效性和优越性。 适合人群:研究生及以上学历的研究人员,特别是从事自适应/最优控制、机器人学和动态神经网络领域的学术界和工业界研究人员。 使用场景及目标:①研究非线性系统的最优控制问题,特别是在存在输入约束和系统动力学的情况下;②解决带有参数不确定性的线性和非线性系统的跟踪控制问题;③探索基于李雅普诺夫方法的深度强化学习在非线性系统控制中的应用;④设计和验证针对冗余机械臂的新型冗余解析方法。 其他说明:本书分为七章,每章内容相对独立,便于读者理解。书中不仅提供了理论分析,还通过实际应用(如欠驱动船舶、冗余机械臂)验证了所提方法的有效性。此外,作者鼓励读者通过仿真和实验进一步验证书中提出的理论和技术。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧