gpt4 book ai didi

c++ - CWnd::ScreenToClient 安全吗?

转载 作者:可可西里 更新时间:2023-11-01 10:39:01 27 4
gpt4 key购买 nike

我目前大量使用这样的代码来确定控件在窗口客户区内的位置:

CRect rect;
GetDlgItem(IDC_CONTROL_ID)->GetWindowRect(&rect);
ScreenToClient(&rect);

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

最佳答案

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

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

当然,这就是为什么您不应该在消息处理程序中执行需要很长时间才能运行的代码(例如,复杂的计算),因为 UI 将被卡住直到它完成。
相反,您应该分离出一个单独的线程来运行此类内容。由于您在这里不是多线程(并且不需要,因为这段代码执行的时间可以忽略不计),所以不会有重入问题。

关于c++ - CWnd::ScreenToClient 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9407413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com