谈谈WS_EX_CLIENTEDGE窗口风格

关于该风格要注意几点的是:

  1. WS_EX_CLIENTEDGE窗口风格并不是对所有窗口都有效,只有窗口有客户区的时候才有效,这样当它用在比如button,combox,tab无客户区的控件时,它是无效的。
  2. 通过对话框模版创建的控件ListCtrl,如果你指定了WS_BORDER,这时WS_BORDER将被拿掉,而WS_EX_CLIENTEDGE会被设置上。但是如果你通过create手动创建则不会出现这种情况。
  3. 当WS_EX_CLIENTEDGE设置上,在控件边缘和客户区之间将有2个像素大小的空隙,与其他做比较:WS_BORDER,一个像素,WS_EX_WINDOWEDGE为3个象素;WS_EX_STATICEDGE为1个像素,当WS_EX_CLIENTEDGE|WS_EX_WINDOWEDGE,有5个像素,而WS_EX_CLIENTEDGE|WS_EX_STATICEDGE|WS_EX_STATICEDGE还是5个像素,说明有像素重在一起的时候。
  4. WS_EX_CLIENTEDGE只在创建时设定有效,如果在创建之后设定,必须跟上另一个参数,SWP_DRAWFRAME或SWP_FRAMECHANGED,实际上这两者值完全一样。如下是通过create创建并添加WS_EX_CLIENTEDGE风格的例子:
    m_list.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT,CRect(0,0,100,100),this,0);
    m_list.ModifyStyleEx(0,WS_EX_CLIENTEDGE,SWP_FRAMECHANGED);

    原因在于当添加WS_EX_CLIENTEDGE实际上要重设客户区大小才能起作用,而重设客户区只能通过WM_NCCALCSIZE来设定,但是这个消息只有才创建时才会触发,单纯修改WGL_EXSTYLE属性并不会触发,添加SWP_FRAMECHANGED正是为了触发该消息。

转自 http://www.cnblogs.com/snake-hand/archive/2013/06/06/3122993.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值