消息值,托管字符串,扰乱代码及其它
2006-07-20 11:39:33 来源:WEB开发网但是我真的要为 CMyOpenDlg 使用 WM_APP 吗?CMyOpenDlg 介于 Windows 和应用程序之间。我把它写成一个扩展 ,以便其他程序员可以在其应用程序中使用。如果某个程序员已经在使用 WM_APP,并且是用 CMyOpenDlg,那么是否有冲突呢?在文件打开对话情况中这是不太可能的——但如果我正在写一个自定义控件 ,比如工具栏或进度条并需要定义自己的消息时该怎么办呢?我可以让他们基于 WM_APP 来避免和基本控件冲突(但是这时存在与应用程序冲突的风险)或者我可以选一个 消息号如:WM_USER+400,它远远超出 Windows 控件消息范围。不幸的是,这里没有正确的答案。这是一个自 Windows 发布以来就一直 折磨着控件和类库设计者的问题。简直就没有一个十全十美方法来划分消息空间而保证绝不导致冲突。你每次都必须根据经验来采取决定。对于 CMyOpenDialog,我 将选择 WM_USER+10 这样的消息,它不会与 DM_XXX 消息冲突。用注册消息可能又太夸张了。
说到注册消息,WM_APP 取值范围和已注册消息取值范围(0xC000 - 0xFFFF)有什么不同,什么时候应该选用其中一个而不是另一个? 如果你只是在对自己说——就是,如果你打算仅仅将发送消息到自己应用程序的窗口中,你可以使用 WM_APP 取值范围。注册消 息则是全局消息,用于发送到别的程序员写的其它应用程序。举个例子,如果你正在写一个协作-管理应用程序,它自己能通过发送一个特定的消息来 确定具有相似意向的程序,这时你应该使用注册消息:
UINT WM_SAYHELLO = RegisterWindowMessage(_T("WmSayHello"));
这时其它协作应用程序可以用这个特定的名称“WmSayHello”注册并获得相同的值,于是他们都可以互相通信。每个 Windows 会话实际的 WM_SAYHELLO 值 将会各不相同,但在某一个对话中,注册它的所有应用程序将具有相同的值。当然,该值将总在 0xC000 - 0xFFFF 范围之内。糟了——MSDN® 杂志有最精明的读者!
更多精彩
赞助商链接