【问题标题】:Is there an Eventing mechanism to get updated the Window Coordinates(C++) when the window is moved or resized?当窗口移动或调整大小时,是否有事件机制来更新窗口坐标(C++)?
【发布时间】:2011-04-15 16:01:17
【问题描述】:

感谢这个板,我能够获得具有已知标题的窗口坐标,但如果窗口被移动或调整大小,我需要获得坐标。 我是 MS Visual C++ 的新手,专家对此的任何帮助都会非常感激.... 这是我从这个很棒的论坛获得的代码,用于获取特定窗口的句柄(此函数由 java 程序通过 JNI 调用:

JNIEXPORT jint JNICALL Java_JavaHowTo_getHwnd
     (JNIEnv *env, jclass obj, jstring title){

HWND hwnd = NULL;
const char *str = NULL;

str = (*env)->GetStringUTFChars(env, title, 0);

hwnd = FindWindow(NULL,str);

(*env)->ReleaseStringUTFChars(env, title, str);

return (jint) hwnd;

【问题讨论】:

  • 如果直接做 HWND 的事情,WM_MOVE 和 WM_RESIZE 可能是相关事件。 “只需”安装一个新的 WNDPROC 代理处理程序。或者,也许只是定期轮询窗口坐标(这要简单得多)。
  • 这是属于另一个进程的窗口?这将使您的生活严重复杂化。

标签: visual-c++ window coordinates


【解决方案1】:

除了 WM_SIZE、WM_MOVE,您可能还想尝试 WM_WINDOWPOSCHANGING。看到这个帖子http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/78229960-8dba-46a5-8f0b-90896a7c9f1d/

【讨论】:

  • 感谢您的回复,让我跟进。但是“pst”的评论有点令人生畏,因为我一直在努力。从技术上讲,它是相同的过程,因为从浏览器网页调用 Java 程序(调用此 C++ 组件),我只想要浏览器窗口的 HWND,而不需要其他窗口。这不是同一个过程的一部分吗?
  • @Randy,我想是的。也许您可以捕获事件并查看它是否有效。我不知道 Java,所以我无法评论您是否需要安装 WNDPROC。如果您使用的是 MFC,则不需要 ovveride WNDPROC ,只需捕获事件即可。
猜你喜欢
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多