推扬网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
推扬网 门户 你问我答 查看内容

何智慧:0x80000 等于多少啊?

2020-8-12 14:12| 发布者: admin| 查看: 117| 评论: 0

摘要: 刘卫高的回答: 0x开头的表示16位进制数,以此题为例转换成10进制的方法为 8*16^4+0*16^3+0*16^2+0*16^1+0*16^0=8*16^4=2^3+2^16=2^19; 周欣宇的回答: 0x开头的表示16位进制数,以此题为例转换成10进制的方法为 8*1 ...

刘卫高的回答:

0x开头的表示16位进制数,以此题为例转换成10进制的方法为 8*16^4+0*16^3+0*16^2+0*16^1+0*16^0=8*16^4=2^3+2^16=2^19;

周欣宇的回答:

0x开头的表示16位进制数,以此题为例转换成10进制的方法为 8*16^4+0*16^3+0*16^2+0*16^1+0*16^0=8*16^4=2^3+2^16=2^19;

江湖艺人的回答:

首先这种写法是让对话框透明时用到的,因为要使窗体拥有透明效果,则窗口必须有ws_ex_layered扩展属性,而一般情况下窗口是不具有ws_ex_layered属性的,所以要加上这个属性,ws_ex_layered = 0x80000,所以才有了这样的写法。 但其实这种写法是错误的,为什么这样说呢,因为^运算符的含义是按位异或的意思,与0x80000异或就是第19位取反,其他位不变,也就是说当窗口没有ws_ex_layered属性时给窗口加上ws_ex_layered属性,而当窗口具有ws_ex_layered属性时去掉ws_ex_layered属性;显然这不是我们刚才提到的要使窗口透明就必须给窗口加上ws_ex_layered属性的初衷。所以这种写法是错误的。这种写法来源于老的sdk程序,老的sdk中没有定义这个属性,所以使用^0x80000加上了这个属性。 正确的写法应写成: setwindowlong(this->getsafehwnd(),gwl_exstyle,\ getwindowlong(this->getsafehwnd(),gwl_exstyle)|0x80000);//直接加上ws_ex_layered属性 或者判断一下,当不具有ws_ex_layered属性时再这样操作: dword dwexstyle=getwindowlong(this->getsafehwnd(),gwl_exstyle); if((dwexstyle&0x80000)!=0x80000) setwindowlong(this->getsafehwnd(),gwl_exstyle,dwexstyle^0x80000); 另外如果你在vs2003以上版本的mfc里时可以不用这么麻烦,直接用下面两行代码就可以实现窗口透明的效果了: modifystyleex(0, ws_ex_layered);//修改窗口属性为ws_ex_layered setlayeredwindowattributes(0, 192, lwa_alpha); //实现透明效果

邓鸿的回答:

0 这也来问

朝源的回答:

0


鲜花

握手

雷人

路过

鸡蛋

最新评论

热门推荐
最新资讯

广告服务|投稿要求|禁言标准|版权说明|免责声明|手机版|小黑屋|推扬网 ( 粤ICP备18134897号 )|网站地图 | 邮箱:vayae@hotmail.com

GMT+8, 2025-5-1 20:40 , Processed in 0.058922 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部