1

我有一个将焦点发送到其他窗口的应用程序,但这些窗口不会自动显示在前台,即在所有其他窗口的顶部。我在哪里可以配置我的窗口管理器的首选项,以便这是默认行为?

特别是我在 MATLAB IDE 中使用 Ctrl-0 和 Ctrl-Shft-0 快捷方式在命令窗口和编辑器窗口之间移动,虽然焦点似乎已转移,但新窗口不会自动重绘自身前景。

4

3 回答 3

2

不确定是否有一个键绑定可以做到这一点,但是如果您按住 alt 键单击一个窗口(它允许您拖动一个窗口),它应该会出现在前面。

正如 codeDr 所建议的那样,MATLAB 在重新绘制其窗口方面也有点糟糕。如果在代码执行时绘制图形,图形不会更新,除非您执行drawnow或在执行过程中有类似的暂停以允许 GUI 重新绘制。由于我们在谈论 MATLAB,因此该figure命令也会导致指示的图形出现在前面(实际上,很难让它不出现在前面)。因此,您可以figure(gcf)将当前图形放在前面,或者使用保存图形编号,h = figure;然后稍后执行figure(h)。顺便说一句,如果你想在不切换焦点的情况下切换当前数字,set(0, 'CurrentFigure', h)应该设置h为当前数字。

于 2009-06-10T02:36:04.127 回答
1

你的窗口管理器(可能是 Metacity?)实现了焦点窃取预防,这样流氓应用程序就不会弹出会干扰你打字的窗口。Matlab 需要提升它的窗口,并用正确的时间戳给它输入焦点。如果这是通过 KeyPress 事件处理程序完成的,则用于设置输入焦点的时间戳将是来自 KeyPress 事件的时间戳(即导致窗口被提升/聚焦的用户生成事件的时间戳)。

为了礼貌地将输入焦点放在一个窗口上,谷歌搜索_NET_ACTIVE_WINDOW。

于 2009-07-16T16:08:09.817 回答
0

通常当窗口没有重新绘制时,这意味着应用程序的主应用程序循环没有运行以刷新窗口。当您在窗口之间切换时,Matlab 是否正在执行一些计算或磁盘活动?

于 2009-06-09T12:25:11.437 回答