如何得到字节数小于2的窗口附加字节?

In355Hz 2001-03-17 07:09:00
MSDN上说,可以用GetWindowLong(hwnd, i)可以取得指定窗口的附加字节。由于GetWindowLong一次返回4位(一个DWORD值),i取值必须为0~cbExtraByte-4,我试了一下,发现当窗口附加字节数多于4时,可以正确返回对应的值(也就是和Spy读出的一样)而少于4个(经常是2个)时,得到的值为NULL(但Spy正常),为什么?
我用过GetWindowWord,也不行。
我甚至把i的值设为-3~2之间(-4是得到WindowProc),都得到NULL。
请问到底该整么做?
...全文
186 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sxbyl 2001-03-24
我也感到很奇怪,GWL_EXSTYLE的信息才一个字节,不可能是为了节省内存吧????
  • 打赏
  • 举报
回复
In355Hz 2001-03-24
其实我也是钻牛角尖了,只是最近突然想到好像没有什么书提到过全局类的实现,于是就想试一试,不过没想到第一步取窗口附加字节就出现问题。一般的窗口类附加字节都是4的倍数,但是有几个是2、6等值,也许和这些类是从16位Windows扩展来的有关。
  • 打赏
  • 举报
回复
sxbyl 2001-03-19
操纵或扩展这些全局类??你不会是想改变整个系统的全局窗口类吧?如果你是想这样做的话,我估计用这种方法不可能实现(起码在NT和2000下不行)。如果只是想改变自己程序的风格,子类化肯定还是首选。想搞清楚那么几个字节的具体含义还不如去看那些窗口类的反汇编代码,这些字节的含义是一个更黑的黑盒子,即是你知道这些字节是一个什么指针,但这些指针所指内容的数据结构你也很难搞清楚。
瞎说的,可能没用。
  • 打赏
  • 举报
回复
In355Hz 2001-03-18
为什么没人回答?
  • 打赏
  • 举报
回复
In355Hz 2001-03-18
我现在正做类似Spy的窗口探测程序。可是取Window Extra Bytes出现了问题,对于多于4字节的窗口是正确的,但是对于ComboBox它的附加字节为2个。用GetWindowLong始终取不到。
我的目的是想了解:对于这些特殊的全局窗口类,他们的局部数据结构是如何维护的?比如Edit的字符串,ListBox/ComboBox的Item List。
我们知道,在SDK中编写自定义控件,用窗口附加字节来保存一个窗口局部的结构数据指针是很方便的(这样可以保证对每个窗口拥有一份独立的数据,而且不需要创建任何全局或静态变量),我现在想看看这些全局窗口类是不是也用类似的方法保存它们的私有数据的。如果了解了这些结构,就可以方便的操纵或扩展这些全局类了(总觉的用子类化就象在一个黑盒子上敲敲打打,不够安全)。
  • 打赏
  • 举报
回复
In355Hz 2001-03-18
Up一下,早起的鸟儿有虫吃。
  • 打赏
  • 举报
回复
sxbyl 2001-03-18
GetWindowLong我没用过,看了你的问题,我用Spy++看了一下,发现那个Window Bytes每次运行的结果不一样,即使是同样一个程序的Edit,你可以再试一下。还有,能不能说一下这个有什么用。
  • 打赏
  • 举报
回复
In355Hz 2001-03-18
为什么?还是...
  • 打赏
  • 举报
回复
In355Hz 2001-03-18
没人回吗?
  • 打赏
  • 举报
回复
In355Hz 2001-03-17
也就是这样:如果6位附加字节(如Edit):01 23 45 67 89 AB
GetWindowLong(hwnd, 0) -> 0x01234567
GetWindowLong(hwnd, 4) -> 0x000089AB 正确
如果是2位(如ComboBox): 01 23
GetWindowLong(hwnd, i) -> 0x00000000 //i = -3~6 都这样。
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2001-03-17 07:09
社区公告

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