sendmessage给派生自cwnd类的类发送消息问题

时间:2023-01-24 19:32:54
新建MFC对话框
新加类(派生自cwnd)
Test
在类头文件中中添加消息
#define WM_TEST WM_USER+1
afx_msg void testout(WPARAM, wparam);
在.cpp中添加
#include "test.h"
映射
//////////////
ON_MESSAGE(WM_TEST, testout)
//////////////
在对话框类中添加成员变量
Test m_test;
然后在对话框中添加按钮,然后函数下面写
::SendMessage(m_test.m_hWnd, WM_TEST, 1, 0);
而在testout(WPARAM wparam)函数内容我就不写了,因为根本没有进去到函数中。

请问那个sendmessage的使用是不是有问题。
我的目的已经表达出来,有心人帮忙实现!

5 个解决方案

#1


Test m_test; 这个放在Test类中可以通过编译?

发给自己的消息可以用CWnd的成员函数
SendMessage(WM_TEST,1,0)
或者
::SendMessage(this->GetSafeWnd(), WM_TEST, 1, 0)

#2


引用 1 楼 ryanwen 的回复:
Test m_test; 这个放在Test类中可以通过编译?

 发给自己的消息可以用CWnd的成员函数
 SendMessage(WM_TEST,1,0)
 或者
 ::SendMessage(this->GetSafeWnd(), WM_TEST, 1, 0)

没看到楼主的意思是要发送Test类吗?


afx_msg void testout(WPARAM, wparam);
这个函数的返回值应该是LRESULT类型的,你能通过编译?

发送消息的代码没什么问题,在发送消息前,你的m_test创建成功了吗?

#3


用CreateEx 创建了吗?看下b的值1为创建成功。

BOOL b=m_test.CreateEx(WS_EX_CLIENTEDGE, // Make a client edge label.
_T("STATIC"), "Hi",
WS_CHILD | WS_TABSTOP | WS_VISIBLE,
5, 5, 30, 30, m_hWnd, (HMENU)1234);

#4


Test m_test; 
这个只是定义了一个类对象,并没有创建对话框.因此m_test.m_hWnd应该为NULL,当然不能发送消息到对话框了

#5


现在明白了 ,我连个对话框都没创建所以消息谁也不会收到,根据这样的思想,我对合适的答案给了分,谢谢大家的讨论。小弟知识欠缺欢迎大家指教!

#1


Test m_test; 这个放在Test类中可以通过编译?

发给自己的消息可以用CWnd的成员函数
SendMessage(WM_TEST,1,0)
或者
::SendMessage(this->GetSafeWnd(), WM_TEST, 1, 0)

#2


引用 1 楼 ryanwen 的回复:
Test m_test; 这个放在Test类中可以通过编译?

 发给自己的消息可以用CWnd的成员函数
 SendMessage(WM_TEST,1,0)
 或者
 ::SendMessage(this->GetSafeWnd(), WM_TEST, 1, 0)

没看到楼主的意思是要发送Test类吗?


afx_msg void testout(WPARAM, wparam);
这个函数的返回值应该是LRESULT类型的,你能通过编译?

发送消息的代码没什么问题,在发送消息前,你的m_test创建成功了吗?

#3


用CreateEx 创建了吗?看下b的值1为创建成功。

BOOL b=m_test.CreateEx(WS_EX_CLIENTEDGE, // Make a client edge label.
_T("STATIC"), "Hi",
WS_CHILD | WS_TABSTOP | WS_VISIBLE,
5, 5, 30, 30, m_hWnd, (HMENU)1234);

#4


Test m_test; 
这个只是定义了一个类对象,并没有创建对话框.因此m_test.m_hWnd应该为NULL,当然不能发送消息到对话框了

#5


现在明白了 ,我连个对话框都没创建所以消息谁也不会收到,根据这样的思想,我对合适的答案给了分,谢谢大家的讨论。小弟知识欠缺欢迎大家指教!