



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
setclasslong和setwindowlong 的区别SetWindowLong该函数改变指定窗口的属性函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。 SetClassLong该函数替换在额外类存储空间的指定偏移地址的32位长整型值,或替换指定窗口所属类的WNDCLASSEX结构. 以我的理解: SetClassLong是与窗口类有关,学过win32编程的人都知道,一个应用程序在创建某个类型的窗口(CreateWindow)前,必须首先注册该“窗口类”(Windows Class,WNDCLASS)。而这个Class即表示窗口类,所以SetClassLong是设置窗口类的属性。 SetWindowLong是已经创建好的窗口,所以它是设置窗口的属性。所以这两个还是有区别的,当我们想改变窗口的属性时就调用SetWindowLong,而改变窗口类的属性时最好调用SetClassLong,这只是我的个人见解,有不同意见的欢迎指正。 以下摘自百度百科,根据专业人士的总结让我们更清楚的理解它们两个的用法 函数原型:DWORD SetClassLong(HWND hWnd,int nlndex,LONG dwNewLong); hWnd:窗口句柄及间接给出的窗口所属的类。 nlndex:指定将被替换的32位值。在额外类存储空间中设置32位值,应指定一个大于或等于0的偏移量。 有效值的范围从0到额外类的存储空间的字节数一4;例如,若指定了12个字节或多于12个字节的额外类存储空间,则索引值为8时,对应的是第三个32位整数值。要设置WNDCLASSEX结构中的任何值,指定下面索引之一: GCL_CBCLSEXTRA:设置与类相关的尺寸的字节大小。设定该值不改变己分配的额外字节数。 GCL_CBWNDEXTRA:设置与类中的每一个窗口相关的尺寸的字节大小。设定该值不改变已分配额外字节数。查看如何进入该内存,参看SetWindowLOng。 GCL_HBRBACKGROUND:替换与类有关的背景刷子的句柄。 GCL_HCURSOR:替换与类有关的光标的句柄。GCL_HICON:替换与类有关的图标的句柄。 GCL_HMODULE:替换注册类的模块的句柄。GCL_STYLE:替换窗口类的风格位。 GCL_MENUNAME :替换菜单名字符串的地址。该字符串标识与类有关的菜单资源。 GCL_WNDPROC :替换与窗口类有关的窗口过程的地址。 由上可知,上面的属性都是GCL_+窗口类中的参数 ; dwNewLong:指定的替换值。 返回值:如果函数成功,返回值是原来类结构中32位整数;如果未事先设定,返回值为0。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。 备注;如果使用SetClassLong函数和GCL_WNDPROC索引值来替换窗口过程,新的窗口过程必须与WindowProc回调函数中所规定的规则一致。 以带GCL_WNDPROC索引值的SetClassLong函数修改的一个窗口类的的子类将会影响所有随后以该类创建的窗口。应用程序可以创建一个系统类的子类,但是不能创建由其他进程创建的类的子类。 通过使用RegisterClassEx函数将WNDCLASSEX结构中的cbWndExtra单元指定为一个非零值来保留额外的的类存储空间。 使用SetClassLong函数要小心。例如,可以通过使用SetClassLong来改变类的背景颜色,但是这种改变不会马上生效,直到属于该类的窗体下次重绘,除非使用UpdateWindow()强迫窗体更新。 LONG SetWindowLong(HWND hWnd,int nlndex,LONG dwNewLong); hWnd:窗口句柄及间接给出的窗口所属的类。 nlndex:指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数-4:例如若指定了12位或多于12位的额外类存储空间,则应设为第三个32位整数的索引位8。要设置其他任何值,可以指定下面值之一: GWL_EXSTYLE:设定一个新的扩展风格。 GWL_STYLE:设定一个新的窗口风格。 GWL_WNDPROC:为窗口过程设定一个新的地址。 GWL_ID:设置一个新的窗口标识符。 GWL_HINSTANCE:设置一个新的应用程序实例句柄。 GWL_USERDATA:设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。 当hWnd参数标识了一个对话框时,也可使用下列值: DWL_DLGPROC:设置对话框过程的新地址。 DWL_MSGRESULT:设置在对话框过程中处理的消息的返回值。 DWL_USER:设置的应用程序私有的新的额外信息,例如一个句柄或指针。 dwNewLong:指定的替换值。 返回值:如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。 如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用callingSetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError。也返回一个非零值。 如果由hWnd参数指定的窗口与调用线程不属于同一进程,将导致SetWindowLong函数失败。 指定的窗口数据是在缓存中保存的,因此在调用SetWindowLong之后再调用SetWindowPos函数才能使SetWindowLong函数所作的改变生效。 如果使用带GWL_WNDPROC索引值的SetWindowLong函数替换窗口过程,则该窗口过程必须与WindowProccallback函数说明部分指定的指导行一致。 如果使用带DWL_MSGRESULT索引值的SetWindowLong函数来设置由一个对话框过程处理的消息的返回值,应在此后立即返回TRUE。否则,如果又调用了其他函数而使对话框过程接收到一个窗口消息,则嵌套的窗口消息可能改写使用DWL_MSGRESULT设定的返回值。 可以使用带GWL_WNDPROC索引值的SetWindowLong函数创建一个窗口类的子类,该窗口类是用于创建该窗口的关。一个应用程序可以一个系统美为于类,但是不能以一个其他进程产生的窗口类为子类,SetwindowLong函数通过改变与一个特殊的窗口类相联系的窗口过程来创建窗口子类,从而使系统调用新的窗口过程而不是以前定义的窗口过程。应用程序必须通过调用CallWindowProc函数向前窗口传递未被新窗口处理的消息,这样作允许应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 普法考试题库及答案2024
- 森林防灭火综合知识培训课件
- 森林火灾培训知识课件
- 森林图书馆绘本课件
- 2025护士资格证考试题库及答案参考68
- 2025年陪诊师考试成功备考经验与试题及答案
- 2025年家政养老考试题库及答案
- 2025年篮球基本规则试题及答案
- 2026届重庆市七校化学高一上期中统考试题含解析
- 2025年少儿编程校外培训机构教师招聘面试模拟题与答案
- 港口无人驾驶行业深度报告:奇点已至蓝海启航
- 纪法考试题库及答案解析
- 骨灰管理员职业技能鉴定经典试题含答案
- 免疫复合物沉积-洞察及研究
- 火锅店股东协议合同范本
- 信息安全评估管理办法
- 销售岗位职级管理办法
- 村流动人口管理办法细则
- HY/T0305-2024养殖大型藻类和双壳贝类碳汇计量方法碳储量变化法
- 中式婚礼知识培训课件
- 滑雪培训课件文案范文
评论
0/150
提交评论