关于该风格要注意几点的是:
- 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风格的例子:
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