hur.cn - 华软网

 热门搜索

类中的消息ID定义

  作者:未知    来源:网络    更新时间:2011/1/10
VC6中, 我新建了一个类xxx
class xxx: public CWnd
{

}
我想在这个类中的类函数之间发送消息, 一般的消息定义为
#define WM_UPDATETIME6 WM_USER+1001 //定时一到发送消息
#define WM_UPDATETIME7 WM_USER+1002

请问如何定义才能保证这个类中的消息ID号码与工程中其余消息不重合?
---华软 网友回答---
自定义消息的值是你手动输入的,除非你2个都是WM_USER+1001,否则是不会重合的
---华软网友回复---
重复也没有问题吧,只需接受消息的句柄正确就能够
---华软网友回复---
WM_USER之后的消息至少与windows自己的消息是不重的,那么剩下的就是你自己的消息别互相重了就ok
---华软网友回复---
自定义消息的值是你手动输入的,除非你2个都是WM_USER+1001,否则是不会重合的
---华软网友回复---
你自己管理 肯定不会重复的
---华软网友回复---
我做的这个类有可能被其余程序员做独立的类运用,而且他们调用我的类后不一定会看到我定义的消息ID号码, 就担心调用该类的程序员忽略了这个消息ID.
---华软网友回复---
ID不是句柄获得消息得唯一值,还要指定对句柄,句柄无效,窗口没法响应事件。
---华软网友回复---
一般从WM_USER+100起头
---华软网友回复---
引用 6 楼 cokeliu 的回复:
我做的这个类有可能被其余程序员做独立的类运用,而且他们调用我的类后不一定会看到我定义的消息ID号码, 就担心调用该类的程序员忽略了这个消息ID.

写详细的说明文档,接口、消息什么的肯定要有详细的文字,否则他人没看懂就可能自己重写个了
---华软网友回复---
自定义的集中放在一块,方便自己查看,以免出现重复
---华软网友回复---
引用 6 楼 cokeliu 的回复:
我做的这个类有可能被其余程序员做独立的类运用,而且他们调用我的类后不一定会看到我定义的消息ID号码, 就担心调用该类的程序员忽略了这个消息ID.
你给人试总要有个运用说明啊
在说明文档标注即可
否则没有语言级的解决方案
这不是技术问题
是制度问题
---华软网友回复---
另外一个问题就是我这个类是继承CWnd类做的.我类中有个多媒体定时器和其回调函数
TimerID_1ms = timeSetEvent(wTimerRes_1ms, wAccuracy, (LPTIMECALLBACK) OneMilliSecondProc1,(DWORD)this,TIME_PERIODIC);

我在其回调函数中发送消息给该类的成员函数
void PASCAL OneMilliSecondProc1(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2) 
{
    Oscilloscope *pthis =(Oscilloscope *)dwUser;
    pthis->SendMessage(WM_UPDATETIME6,0,0); //如果需要能够发送消息给其其余任务
}
调试时候发现运行到pthis->SendMessage(WM_UPDATETIME6,0,0); 就出现毛病.
单步调试到pthis->SendMessage(WM_UPDATETIME6,0,0); 发现pthis的CWnd为0. 是否是着个原因致使运行犯错: Debug Assertion Failed!


---华软网友回复---
#define WM_UPDATETIME6 WM_USER+1001 //定时一到发送消息
#define WM_UPDATETIME7 WM_UPDATETIME6+1

---华软网友回复---
现在调试发现发送消息犯错: Debug Assertion Failed!
---华软网友回复---
引用 14 楼 cokeliu 的回复:
现在调试发现发送消息犯错: Debug Assertion Failed!

Debug下打开call stack窗口看看哪一个函数调用的时候抛出的异常
---华软网友回复---
OneMilliSecondProc1(unsigned int 16, unsigned int 0, unsigned long 1244620, unsigned long 0, unsigned long 0) line 54
WINMM! 76b454e3()
WINMM! 76b5adfe()
WINMM! 76b5af02()
KERNEL32! 7c80b729()
以上是调试时候从call stack中显示犯错的函数
---华软网友回复---
pthis->SendMessage(WM_UPDATETIME6,0,0); 犯错时候
pthis = 0x0012fdcc {Oscilloscope hWnd=0x00000000}
是否于hWnd句柄为0有关系? 这个类的hWnd应该就是为零吧.      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。