社区
界面
帖子详情
WS_THICKFRAME风格去边角问题
ToCpp
2009-03-07 11:45:47
我的问题是如果窗体有WS_THICKFRAME样式,当使用rgn去边角时总是感觉右下角的坐标不太对劲,不知道为什么,是不是和WM_NCCALCSIZE有关呢,我响应这个消息貌似还是有问题,SM_CYSIZEFRAME获取到的值为4,但是用SPY看到的客户区矩形却是从(3,3)开始的,也就是客户区和非客户区之间的距离是3而不是4?
...全文
2489
12
打赏
收藏
WS_THICKFRAME风格去边角问题
我的问题是如果窗体有WS_THICKFRAME样式,当使用rgn去边角时总是感觉右下角的坐标不太对劲,不知道为什么,是不是和WM_NCCALCSIZE有关呢,我响应这个消息貌似还是有问题,SM_CYSIZEFRAME获取到的值为4,但是用SPY看到的客户区矩形却是从(3,3)开始的,也就是客户区和非客户区之间的距离是3而不是4?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zjj9850
2009-09-05
打赏
举报
回复
QQ2009内嵌的是"网页"了~~~已经不是普通的窗口唠~~~
和WPF有类似的机制了~~
lanlan014
2009-04-16
打赏
举报
回复
WS_THICKFRAME具体是什么含义啊。。。。。。
ToCpp
2009-03-10
打赏
举报
回复
响应WM_NCHITTEST消息确实可以实现边框拖动,但是好像窗体不能有WS_SYSMENU风格,这个对于一般窗体来说肯定是不行的,我看QQ系列可以改变窗口大小的软件都有WS_THICKFRAME风格,总体上边框拖动还是用系统自带的比较好。
菜牛
2009-03-10
打赏
举报
回复
要做异型窗口最好不要边框,否则本来边框被裁掉就不好看,自己绘制好了;处理边框的拖动也很简单,只要响应WM_NCHITTEST消息,在计算好的边框上分别返回需要的值即可(具体参考该消息)。
ToCpp
2009-03-09
打赏
举报
回复
但是QQ啊,好多界面都是这样的啊,虽然一般不加WS_CAPTION, WS_BORDER, WS_OVERLAPPEDWINDOW,但是WS_THICKFRAME还是需要的,要不还得自己模拟拖动大小效果
liuzxchina
2009-03-09
打赏
举报
回复
如果是改变窗口的形状,一般都不加WS_CAPTION, WS_BORDER, WS_OVERLAPPEDWINDOW, WS_THICKFRAME, WS_EX_STATICEDGE,等样式
abesky
2009-03-09
打赏
举报
回复
ws_thickframe风格的操作系统会自动加上border,所以你可以去掉此样式要么创建RGN时偏移一下
ToCpp
2009-03-08
打赏
举报
回复
为什么我发的帖子看不到呢?
ToCpp
2009-03-08
打赏
举报
回复
可能是说得不够明白吧,就是做一个带有ws_thickframe风格的不规则窗口应该注意哪些地方?
ToCpp
2009-03-08
打赏
举报
回复
嗯,感觉是偏移了,为什么去rgn会偏移呢,有没有这方面的介绍
abesky
2009-03-08
打赏
举报
回复
qq的没有WS_CAPTION样式和WS_EX_WINDOWEDGE,去除是rgn要偏移border的宽度
XP下面x坐标偏移GetSystemMetrics(SM_CXBORDER) + GetSystemMetrics(SM_CXDLGFRAME)
y坐标GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYDLGFRAME) + GetSystemMetrics(SM_CYCAPTION)
没有如果没有WS_CAPTION y只偏移GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYDLGFRAME)
vista下好像还有点偏差
ToCpp
2009-03-07
打赏
举报
回复
刚用SPY看了QQ2009的界面,发现其窗口矩形和客户矩形是一样大小的,而且客户区坐标是从(0,0)开始的,而且也可以拖动大小,可以这样么?还是另有手段
MFC ModifyStyle
MFC开发过程序所需的ModifyStyle(needDelStyle,needAddStyle,SWP_
FRAME
CHANGED); Sytel:
WS
_BORDER Creates a window that has a border.
WS
_CAPTION Creates a window that has a title bar (implies the
WS
_BORDER style). Cannot be used with the
WS
_DLG
FRAME
style.
WS
_CHILD Creates a child window. Cannot be used with the
WS
_POPUP style.
WS
_CHILDWINDOW Same as the
WS
_CHILD style.
WS
_CLIPCHILDREN Excludes the area occupied by child windo
ws
when you draw within the parent window. Used when you create the parent window.
WS
_CLIPSIBLINGS Clips child windo
ws
relative to each other; that is, when a particular child window receives a paint message, the
WS
_CLIPSIBLINGS style clips all other overlapped child windo
ws
out of the region of the child window to be updated. (If
WS
_CLIPSIBLINGS is not given and child windo
ws
overlap, when you draw within the client area of a child window, it is possible to draw within the client area of a neighboring child window.) For use with the
WS
_CHILD style only.
WS
_DISABLED Creates a window that is initially disabled.
WS
_DLG
FRAME
Creates a window with a double border but no title.
WS
_GROUP Specifies the first control of a group of controls in which the user can move from one control to the next with the arrow keys. All controls defined with the
WS
_GROUP style FALSE after the first control belong to the same group. The next control with the
WS
_GROUP style starts the next group (that is, one group ends where the next begins).
WS
_HSCROLL Creates a window that has a horizontal scroll bar.
WS
_ICONIC Creates a window that is initially minimized. Same as the
WS
_MINIMIZE style.
WS
_MAXIMIZE Creates a window of maximum size.
WS
_MAXIMIZEBOX Creates a window that has a Maximize button.
WS
_MINIMIZE Creates a window that is initially minimized. For use with the
WS
_OVERLAPPED style only.
WS
_MINIMIZEBOX Creates a window that has a Minimize button.
WS
_OVERLAPPED Creates an overlapped window. An overlapped window usually has a caption a
Windo
ws
窗口样式-PDF
本文全面的概括了基本Windo
ws
控件的窗口样式,并以中文注释这些样式,方便开发时快速查看。 1 窗口样式
WS
_POPUP 弹出式窗口(不能与
WS
_CHILDWINDOW样式同时使用)
WS
_CHILDWINDOW 子窗口(不能与
WS
_POPUP合用)
WS
_MINIMIZE 创建窗口拥有最小化按钮
WS
_MINIMIZEBOX 创建窗口拥有最小化按钮,须同时指定
WS
_SYSTEM样式
WS
_VISIBLE 可见状态
WS
_DISABLED 不可用状态
WS
_CLIPSIBLINGS 使窗口排除子窗口之间的相对区域
WS
_CLIPCHILDREN 当在父窗口内绘图时,排除子窗口区域
WS
_MAXIMIZE 具有最大化按钮
WS
_MAXIMIZEBOX 创建窗口拥有最大化按钮,须同时指定
WS
_SYSTEM样式
WS
_CAPTION 有标题框和边框(和
WS
_TILED样式相同)
WS
_BORDER 有单边框
WS
_DLG
FRAME
带对话框边框样式,不带标题框
WS
_VSCROLL 有垂直滚动条
WS
_HSCROLL 有水平滚动条
WS
_SYSMENU 标题框上带有窗口菜单(须指定
WS
_CAPTION样式)
WS
_THICK
FRAME
有可调边框(与
WS
_SIZEBOX样式相同)
WS
_TILED 与
WS
_OVERLAPPED
风格
相同
WS
_TILEDWINDOW 与W
WS
_OVERLAPPEDWINDOW
风格
相同
WS
_GROUP 组样式,每个组的第一个控件具有
WS
_TABSTOP样式
WS
_TABSTOP 可接受TAB键
WS
_OVERLAPPED 创建一个重叠式窗口,拥有标题栏和边框
WS
_OVERLAPPEDWINDOW
WS
_OVERLAPPED
风格
WS
_CAPTION
风格
WS
_SYSMENU
风格
WS
_THICK
FRAME
风格
WS
_MINIMIZEBOX
风格
WS
_MAXIMIZEBOX
风格
2 窗口扩展样式参考列表
VC对话框运行后不能改变大小的
问题
收藏
VC对话框运行后不能改变大小的
问题
收藏 要想让对话框具有改变大小的功能需要在两个地方进行设置,一个是在OnInitDialog中加一句ModifyStyle( NULL,
WS
_THICK
FRAME
);另外一个就是必须在对话框属性里设置对话框具有最大化按钮,否则对话框运行后将鼠标移动到边界处虽然能够出现改变大小的图标,但是并不能改变大小
VC对话框拖拉大小 控件拖拉
VC对话框拖拉大小,控件也随对话框的大小变大变小,右下角图标!代码清晰易懂!
windo
ws
编程中的窗体样式
各种样式的解说 一、窗口样式 二、按钮
风格
三、旋转按钮控件 四、轨道条控件 五、文本编辑框
风格
六、列表框
风格
七、组合框
风格
八、树形视图控件 九、列表视图控件 十、静态文本框
风格
界面
15,981
社区成员
115,868
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章