首页 > 代码库 > 设置WS_EX_CLIENTEDGE窗口风格
设置WS_EX_CLIENTEDGE窗口风格
关于该风格要注意几点的是:
- WS_EX_CLIENTEDGE窗口风格并不是对所有窗口都有效,只有窗口有客户区的时候才有效,这样当它用在比如button,combox,tab无客户区的控件时,它是无效的。
- 通过对话框模版创建的控件ListCtrl,如果你指定了WS_BORDER,这时WS_BORDER将被拿掉,而WS_EX_CLIENTEDGE会被设置上。但是如果你通过create手动创建则不会出现这种情况。
- 当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个像素,说明有像素重在一起的时候。
- WS_EX_CLIENTEDGE只在创建时设定有效,如果在创建之后设定,必须跟上另一个参数,SWP_DRAWFRAME或SWP_FRAMECHANGED,实际上这两者值完全一样。如下是通过create创建并添加WS_EX_CLIENTEDGE风格的例子:[cpp] view plaincopy
- 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正是为了触发该消息。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。