使用了"WS_OVERLAPPEDWINDOW & (~WS_MAXIMIZEBOX) & (~WS_SIZEBOX)"后,窗口X坐标最小值变成了65535

yrisxfyh 2009-10-31 10:00:21
注意是WINAPI,不是MFC...


// ...

// WIN_WIDTH==640, WIN_HEIGHT==480
RECT rc;
SetRect( &rc, 0, 0, WIN_WIDTH, WIN_HEIGHT );
AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW & (~WS_SIZEBOX), 0);


g_hwnd = CreateWindowEx(
NULL,
WINDOW_CLASS,
WINDOW_NAME,
// 禁止最大化,且不可调节窗口大小
WS_OVERLAPPEDWINDOW & (~WS_SIZEBOX),
0, 0,
( rc.right - rc.left ), ( rc.bottom - rc.top ),
NULL,
NULL,
h,
NULL
);

// ....



窗口风格那,只要写上"(~WS_SIZEBOX)",窗口的X坐标最小值就成了65535了,
如果这是必然的话,那有没有其他方法,既禁止改变窗口大小,又能正常显示窗口X坐标的??
...全文
414 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pady_pady 2009-11-02
  • 打赏
  • 举报
回复
你知道窗口在创建的时候,假设是800*600,默认为了画边框,系统会在这个800*600的边框要inflaterect,左边的屏幕坐标假设为100,200,边框就变成了99,200,再转换成客户坐标,-100,不就变成-41
yrisxfyh 2009-11-02
  • 打赏
  • 举报
回复
// 禁止最大化,且不可调节窗口大小
WS_OVERLAPPEDWINDOW & (~WS_SIZEBOX),

什么意思这里不是写了么??

我问为什么屏蔽了调节窗口大小的功能后,当鼠标移动到窗口边框上时,X坐标显示65535

常规情况下,假如分辨率是640X480鼠标坐标从客户区开始,应该是从0到639.
但是我这在左右边框上也会显示X坐标,左面显示65535,右面显示641,而且不是640,因为最大值就是639....
非常奇怪...
likexx 2009-11-02
  • 打赏
  • 举报
回复
你先说一下你以为
WS_OVERLAPPEDWINDOW & (~WS_SIZEBOX),
到底是什么意思吧!!

[Quote=引用 5 楼 yrisxfyh 的回复:]
引用 4 楼 wwwxhb 的回复:
这个可以:

/////////////去除最大化窗口项和锁定窗口/////////////////
SetWindowLong(hWnd,GWL_STYLE,GetWindowLong(hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME );


都不明白我讲的意思么??
[/Quote]
yrisxfyh 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pady_pady 的回复:]
你知道窗口在创建的时候,假设是800*600,默认为了画边框,系统会在这个800*600的边框要inflaterect,左边的屏幕坐标假设为100,200,边框就变成了99,200,再转换成客户坐标,-100,不就变成-41
[/Quote]

关键问题是,当屏蔽了调节窗口大小的功能后,在窗口显示XY坐标,就会多出两个边框的值.左边框处X就成了65535,右边框处X坐标显示641

这个是否无法避免..???
yrisxfyh 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwxhb 的回复:]
如果只有最小值的话,你显示的时候遇到65535把变量改为0不就得了,因为你的屏幕坐标不可能有这么大吧。

难道非要必须,不可以尝试改一下。


不知情的路过。。。。。
[/Quote]

X最小值是65535,然后是0,1,2,3....一直到641
wwwxhb 2009-10-31
  • 打赏
  • 举报
回复
如果只有最小值的话,你显示的时候遇到65535把变量改为0不就得了,因为你的屏幕坐标不可能有这么大吧。

难道非要必须,不可以尝试改一下。


不知情的路过。。。。。
yrisxfyh 2009-10-31
  • 打赏
  • 举报
回复
yrisxfyh 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwwxhb 的回复:]
这个可以:

/////////////去除最大化窗口项和锁定窗口/////////////////
SetWindowLong(hWnd,GWL_STYLE,GetWindowLong(hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME );
[/Quote]

都不明白我讲的意思么??
wwwxhb 2009-10-31
  • 打赏
  • 举报
回复
这个可以:

/////////////去除最大化窗口项和锁定窗口/////////////////
SetWindowLong(hWnd,GWL_STYLE,GetWindowLong(hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX & ~WS_THICKFRAME );
yrisxfyh 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feilinhe 的回复:]
使用WS_OVERLAPPED或WS_TILED 风格就没有了最大最小化
[/Quote]

没读懂我的贴子吧..
feilinhe 2009-10-31
  • 打赏
  • 举报
回复
使用WS_OVERLAPPED或WS_TILED 风格就没有了最大最小化
yrisxfyh 2009-10-31
  • 打赏
  • 举报
回复
没人知道么????

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧