首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CWnd::ScreenToClient安全吗?

CWnd::ScreenToClient安全吗?
EN

Stack Overflow用户
提问于 2012-02-23 12:56:15
回答 1查看 638关注 0票数 2

我现在经常使用这样的代码来确定控件在窗口客户区中的位置:

代码语言:javascript
复制
CRect rect;
GetDlgItem(IDC_CONTROL_ID)->GetWindowRect(&rect);
ScreenToClient(&rect);

一切正常,但我担心这段代码的安全性。具体地说,如果用户由于包含上述代码的线程被GetWindowRect挂起而将窗口移动到ScreenToClient和window之间,是否会产生错误的结果?如果是这样,有没有更好的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-23 13:05:11

当您的消息处理函数中的代码正在执行时,用户将根本无法移动窗口。所以不,这不是问题。

在代码运行期间,UI基本上是暂时冻结或挂起的。从技术上讲,这是因为在您返回之前,Windows无法处理其他消息。一旦您从消息处理程序函数返回,消息循环就会再次开始运行,从而返回控制权。

当然,这就是为什么你不应该在消息处理程序中执行需要很长时间运行的代码(例如,复杂的计算),因为UI将被冻结,直到它完成。

相反,你应该分离出一个单独的线程来运行这类东西。因为您在这里不是多线程(并且不需要多线程,因为这段代码的执行时间可以忽略不计),所以不会出现可重入性问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9407413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档