查找常见 Windows 标志的工具





5.00/5 (4投票s)
2002 年 2 月 20 日
2分钟阅读

50749

1367
一个简单的工具,用于解码 Windows 标志,例如窗口样式、扩展样式。支持拖放。
引言
标志查找是一个简单的实用工具,用于将标志解码为组合它们以形成它们的各个值。它还演示了在 VC++ 调试器和您的应用程序之间拖放值。它可以找到用于窗口样式、扩展窗口样式、类样式和 SetWindowPos 标志的标志值。
描述
我们通过组合单个位(例如 WS_CHILD | WS_BORDER
)来为某些 Windows 函数创建标志。问题在于,在调试时,给定一个组合值,很难找到用于 OR 运算以创建它的各个值。此实用程序读取该值并在列表框中显示每个位。
您可以将其复制粘贴一个值,或从调试器窗口中拖放它。目前,它已为窗口样式、扩展窗口样式、类样式和 SetWindowPos 标志实现。您可以毫不费力地添加新的集合。
工作原理
用于显示的字符串定义在数组中,如下所示
const char* bExtendedStyles[128]= { "WS_EX_RIGHTSCROLLBAR", //0x00000000L "WS_EX_DLGMODALFRAME", //0x00000001L "", "WS_EX_NOPARENTNOTIFY", //0x00000004L "WS_EX_TOPMOST", //0x00000008L "WS_EX_ACCEPTFILES", //0x00000010L "WS_EX_TRANSPARENT", //0x00000020L . . . }
数组的顺序必须与位的顺序相同(即二进制 0001、0010、0100、1000 等)。我通过复制 Windows 头文件(在本例中为 winuser.h)中的 #defines
来创建数组。对于每种类型(窗口样式、扩展窗口样式等)将有一个单独的数组。我只是将相应的数组传递给显示字符串的函数。
现在,查找值的逻辑很简单,我遍历输入值中的每个位,如果该位已设置(=1),我就从数组中获取相应的值并将其添加到列表框中。
为了实现拖放,有一个类 CFLDropTarget
,它是从 COleDropTarget
派生的。覆盖了 OnDrop
函数。在此函数中,使用以下内容来获取从调试器“变量”窗口拖入的值。
BOOL CFLDropTarget::OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) { HGLOBAL hData = pDataObject->GetGlobalData(CF_TEXT); char *pData = (char*)GlobalLock(hData); CString strData = pData; int nIndex = strData.ReverseFind('\t'); strData = strData.Mid(nIndex+1); strData.TrimLeft(); strData.TrimRight(); . . . . . .
Dlg 类具有 CFLDropTarget
对象作为成员。在对话框类的 OnCreate
中调用成员上的 Register
方法。