WNDCLASS与WNDCLASSEX区别与使用

chester_lp 2008-07-22 09:25:30
在MSDN中发现WNDCLASS与WNDCLASSEX的区别仅有两个,WNDCLASSEX多的是:一个是指定数据结构的cbsize,一个是支持“小图标”的hIconsm,不知道实际意义在于哪里?美化?在实际工作中,哪个用到的更多一些呢?
...全文
1995 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiatsing 2008-09-30
  • 打赏
  • 举报
回复
都是高手啊!!!
chester_lp 2008-07-26
  • 打赏
  • 举报
回复
嗯10楼的理解办法不错,引用之。呵呵
咋了啦 2008-07-24
  • 打赏
  • 举报
回复
同意楼上的,那只是一个窗口属性的集合。我们button也是一个窗口,还不是我选择了那个struct中的一些参数。它是个通用的,在vc中很多空间就是一个特殊的窗口,楼主以后会习惯的。
lzg0001 2008-07-24
  • 打赏
  • 举报
回复
不要把“窗口类”按一般的类来理解,个人认为把它看成纯 C 风格下的 struct 更恰当些,就是一些控制窗口属性的数据结构罢了,不过这些数据结构外界看不着、摸不到;而 WNDCLASS/WNDCLASSEX 的作用就是把这些数据结构中可以由外界设置的部分集合到一起以一种新的 struct 形式出现以便让外界设定其值。

--------------------

个人观点,仅供参考!

chester_lp 2008-07-24
  • 打赏
  • 举报
回复
直接把MSDN弄上了。。呵呵
wangjs720 2008-07-23
  • 打赏
  • 举报
回复
The WNDCLASSEX structure contains window class information. It is used with the RegisterClassEx and GetClassInfoEx functions.

The WNDCLASSEX structure is similar to the WNDCLASS structure. There are two differences. WNDCLASSEX includes the cbSize member, which specifies the size of the structure, and the hIconSm member, which contains a handle to a small icon associated with the window class.

lonkil 2008-07-23
  • 打赏
  • 举报
回复
可以认为是WNDCLASS的增加版,可以兼容以往程序,又加了新的属性。
chester_lp 2008-07-23
  • 打赏
  • 举报
回复
顶上!
Conry 2008-07-22
  • 打赏
  • 举报
回复
cbsize为了以后的系统兼容老程序
假设在windows 8 里面,又加了一个成员,hxyz;
而你的程序是在xp上写的,那么你的cbsize肯定要比系统的要小,RegisterClassEx调用的时候就按你提供的cbsize大小来处理,否则肯定内存访问出错
zaodt 2008-07-22
  • 打赏
  • 举报
回复
这个问题问的好,说明楼主是个好学生!


Windows 操作系统也是一步步发展而来。

WNDCLASS 是早期的版本, EX 是后来加上的;


像这种情况在 API 中还有好多。



实际使用时,用 EX 的。


早期版本的 Windows 会遇到问题,但现在已经看不到那些版本了。
thirddata 2008-07-22
  • 打赏
  • 举报
回复
保留WNDCLASS主要是为了兼容老程序,一般用WNDCLASSEX比较多
chester_lp 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zaodt 的回复:]
这个问题问的好,说明楼主是个好学生!


Windows 操作系统也是一步步发展而来。

WNDCLASS 是早期的版本, EX 是后来加上的;


像这种情况在 API 中还有好多。


实际使用时,用 EX 的。


早期版本的 Windows 会遇到问题,但现在已经看不到那些版本了。
[/Quote]

呵呵,确实是个学生,但是不算好。本科学校只开了java,没有设置c++课程,所以暑假自学,
以便以后学习的需要。个人感觉,(学了几天)以前java的思维相对于c++的影响较大,

比如在c++中,窗体WNDCLASS需要继续设计才可以使用,(而WNDCLASS本身这个类含有未赋值的
成员变量)并且registerclass,才可以建立对象,或者叫窗体变量。

但是从java角度,不是很好理解为啥WNDCLASS这个类中的成员,非要赋予初值,成为设计的结果,
才可以以模板的形式去进行对象设计。觉得不大习惯。因为在java中,类在设计的时候,并没有强制
要求成员变量需要赋值,就可以建立对象的。

无奈,从现在的角度,只有理解成WNDCLASS在赋值后,成为其子类,然后由子类进行建立对象。不知
道对不对?
更让我不大适应的是,当我去把WNDCLASS赋值后,成为我心目中的类的时候,(我理解其为类名,比如WNDCLASS wndcls)
于是,wndcls.lpszClassName="class name";这个语句,就让我郁闷了,类名,在这里。而wndcls,
算啥?无奈,我又理解成class name未wndcls的另一种称呼,像那个宏定义一样,不知道是不是贴切。。
chester_lp 2008-07-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Conry 的回复:]
cbsize为了以后的系统兼容老程序
假设在windows 8 里面,又加了一个成员,hxyz;
而你的程序是在xp上写的,那么你的cbsize肯定要比系统的要小,RegisterClassEx调用的时候就按你提供的cbsize大小来处理,否则肯定内存访问出错
[/Quote]

windows 8??你意指新的比xp更高的os而言吧?大致明白你的意思,
cbsize用于指明结构,然后便于os识别,并与之处理。
那个,hIconsm看来用的都不多,ls几位高手都没提哈?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧