问一个很基础的win32窗口函数问题

[复制链接]
查看11 | 回复6 | 2021-1-27 06:52:07 | 显示全部楼层 |阅读模式
不知道有没有人注意到一个细节,魔兽世界这个游戏,当你拖动窗口标题移动窗口,或者鼠标停靠在窗口边框进行窗口大小改变的过程中,丝毫不会影响到游戏中输入法的输入、场景的渲染。
这就是我想实现的效果,
而我所了解的窗口函数,一旦拖动窗口标题,整个窗口就会陷入卡死状态,即便游戏逻辑不在窗口函数所在的线程,那么对于IME输入法来说,依然需要依靠windows消息来实现用户输入,就是说,也会被卡住。
那么我的问题是:
1:如何在拖动窗口的过程中,不卡住窗口内容?
2:如何在拖动窗口的过程中,还能收到比如IME输入法相关的windows消息?

或者有其他变通的做法能实现上述效果,也行。比如不使用win32的按键消息,改用dinput或直接轮询按键状态,
但是IME输入法,我不知道如何跳过windows消息来实现。
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:52:07 | 显示全部楼层
好吧,没人回答。
我差不多已经知道解决方法了。
回复

使用道具 举报

千问 | 2021-1-27 06:52:07 | 显示全部楼层
1、后台线程渲染绘图,根本就不管你的窗口消息,只要有窗口句柄就可以了。本来就不会卡住窗口内容。
2、我觉得最简单的方法就是不使用标题栏,自绘“标题栏”就可以了。至于你说的魔兽世界这个游戏怎么样做的,没玩过我不知道,你可以用spy++看下,比如确认下它的标题栏是不是假的啊,或者观察下它有哪些窗口啊,属于哪些线程啊,收到哪些消息啊。也许能找到一些玄机。
回复

使用道具 举报

千问 | 2021-1-27 06:52:07 | 显示全部楼层
在win3.x的时代(没有多线程),有一个技巧,尤其是支持窗口模式的游戏经常用,就是在消息循环中不使用GetMessage,而是用PeekMessage

回复

使用道具 举报

千问 | 2021-1-27 06:52:07 | 显示全部楼层
引用2楼_mervyn的回复:1、后台线程渲染绘图,根本就不管你的窗口消息,只要有窗口句柄就可以了。本来就不会卡住窗口内容。
2、我觉得最简单的方法就是不使用标题栏,自绘“标题栏”就可以了。至于你说的魔兽世界这个游戏怎么样做的,没玩过我不知道,你可以用spy++看下,比如确认下它的标题栏是不是假的啊,或者观察下它有哪些窗口啊,属于哪些线程啊,收到哪些消息啊。也许能找到一些玄机。

你拖动窗口的时候,你试试你还能收到IME输入法消息不。
回复

使用道具 举报

千问 | 2021-1-27 06:52:07 | 显示全部楼层
引用4楼yrisxfyh的回复:Quote: 引用2楼_mervyn的回复:
1、后台线程渲染绘图,根本就不管你的窗口消息,只要有窗口句柄就可以了。本来就不会卡住窗口内容。
2、我觉得最简单的方法就是不使用标题栏,自绘“标题栏”就可以了。至于你说的魔兽世界这个游戏怎么样做的,没玩过我不知道,你可以用spy++看下,比如确认下它的标题栏是不是假的啊,或者观察下它有哪些窗口啊,属于哪些线程啊,收到哪些消息啊。也许能找到一些玄机。

你拖动窗口的时候,你试试你还能收到IME输入法消息不。

不能收到全部的IME消息,一般输入法应该都不能正常工作的。
所以我说了,要处理这个问题,就是不要系统标题栏啊自己画一个模拟就行了而且还好看。
回复

使用道具 举报

千问 | 2021-1-27 06:52:07 | 显示全部楼层
正常应该都不会卡住,因为MouseMove这个消息是以一定频率在发,在两个MouseMove的间隙可以处理其他消息
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行