如何挂钩浏览器窗口调整大小事件?
有一种jQuery方式可以监听resize事件,但我不想将它带入我的项目中,只需要这个要求.
在R中,可以握住设备,绘制图片,然后刷新设备以渲染图形.这对于具有数千个数据点,颜色梯度等的非常复杂的绘图非常有用,因为在没有保持的情况下,设备将在每次绘图操作之后刷新.它运作得很好.
但是,一旦绘图到位,任何窗口操作(如调整大小)都会导致绘图刷新 - 但是,这次没有保持和刷新设备,而是逐个绘制绘图元素并每次刷新显示.这非常烦人.
显然,我可以dev.hold在调整窗口大小之前手动调用,但这不是一个真正的解决方案.
有没有办法告诉R设备应该暂停进行大小调整等操作?
使用Visual Studio 2008,Windows窗体,C#,.NET 2.0 ......
是否有一种无代码的方法来获得一个控件(在我的情况下恰好是一个PictureBox),以便在调整窗口大小时保持居中?换句话说,使用属性设置的某种组合而不是手动编写代码以保持元素居中.
例如,在窗体窗口中央有一个按钮,当用户调整窗口大小时,按钮将根据其默认锚定(顶部,左侧)保持固定.我想要它做的是保持居中,无论窗口如何调整大小.
我知道我可以观察一个窗口调整大小事件,然后让表单上的所有元素重新定位,以保持在相同的相对位置(根据我写的代码让他们这样做).我希望有一些属性设置的组合来实现相同的效果.
正如在其他帖子中所建议的那样,我已经尝试过使用TableLayout控件,但是在针对元素居中的特定解决方案方面可以使用正确方向.
我有一个流畅布局的网页,宽度为100%.
当我调整浏览器窗口大小时,页面中的元素重叠.
我会创建一个类似于这个网站http://bologna.bakeca.it/的效果,当窗口小于固定宽度时停止调整大小.
我有一个WPF应用程序,它以一个非常小的窗口开始.在200x100的区域内的东西.当从外部源引发某些事件时,我将控件添加到窗口的ItemsControl区域.items控件当前设置为使用StackPanel PanelTemplate.
我想要的是,当控件添加到itemscontrol时,应用程序窗口会增长.这是可能吗?这背后的想法是始终保持窗口尽可能小.当从itemscontrol中删除控件时,它也应该缩小.
谢谢.
问题:当我抓住我的Windows应用程序的调整大小边框,特别是顶部或左边框,并调整窗口大小时,窗口的内容会在我拖动时调整"实时"大小,但是它们会以一种看似像的丑陋方式调整大小即使是最新手的用户也是一个明显的错误:窗口相对边缘的内容从边缘拖动抖动/闪烁/来回跳跃.视情况而定,现象可能如下:
一旦我停止拖动,丑陋的现象就会停止,但在拖动过程中,它会使应用程序看起来很业余和不专业.
说这个Windows问题已经让成千上万的应用程序开发人员疯狂,这并不是轻描淡写的.
以下是现象,友好地准备了两个实例图片一个相关的问题由罗马Starkov:


另一个例子展示了Kenny Liu的邪恶"双重图像"现象(请注意快速闪光):

有关任务管理器现象的另一个示例视频就在这里.
这个问题的目的: 任何遇到这个问题的开发人员都会发现至少有30个StackOverflow问题,其中一些是最近的,有些是从2008年开始的,充满了很有希望的答案很少有效.现实情况是,这一个问题有很多原因,而现有的StackOverflow问题/答案从未使更广泛的背景清晰.这个问题试图回答:
本问题的范围:对于StackOverflow问题的范围,这种现象发生在:
请勿标记为广泛或DUP:在标记为复制或标记为广泛之前,请阅读以下完整答案.我们已经经历了这个循环,SO用户在理解了以下内容之后经常重新打开这个问题:这个问题有益于社区,是第一个解释窗口调整大小抖动的所有不同原因的问答,以便用户可以识别哪个原因导致他们的问题并解决它.下面的答案很长,只是因为解释为什么一般发生抖动是很棘手的,不是因为这个问题涵盖了许多单独的问题和问题,这些错误/问题可以通过单独的问答得到更好的服务.正如您将看到的,上面的所有排列(本机/托管,窗口/对话框,XP-10)都归结为只有两个根本原因,但识别您所拥有的是棘手的部分.这就是这个问题的意义所在.将问题分开将完全否定这一好处.我们在下一节中进一步限制了问题的范围......
不在本问题的范围内:
如果您的应用程序有一个或多个子窗口(子HWND),则此问题中的信息对您很有用(因为BitBlts我们将描述的引起混蛋的内容与父窗口一起应用于您的子窗口),但在窗口调整大小时还有另外一个问题需要处理,这超出了这个问题的范围:你需要让你的所有子窗口以原子方式移动并与父窗口同步.对于这项任务,你可能会想要 BeginDeferWindowPos/DeferWindowPos/EndDeferWindowPos,你可以在这里和这里找到它们.
这个问题假设如果你的应用程序使用GDI,DirectX或OpenGL绘制到一个窗口,那么你已经WM_ERASEBKGND在你的应用程序中实现了一个wndproc简单的返回1. WM_ERASEBKGND是来自Windows 3.1的一个神秘的Windows残余,以前WM_PAINT给你的应用程序一个机会在你画窗户之前"擦掉窗户的背景"......嗯.如果你让WM_ERASEBKGND消息进入DefWindowProc(),那将导致你的整个窗口在每次重绘时被涂成纯色,通常是白色,包括在实时窗口大小调整期间发生的重绘.结果是一个丑陋的全窗口闪烁是粗略的,但不是我们在这个问题中讨论的抖动/闪烁/跳跃的类型.拦截WM_ERASEBKGND立即解决了这个问题.
此问题主要是通过使用鼠标拖动窗口边框来实时调整大小.但是,此处编写的大部分内容也适用于当应用程序手动执行一次性窗口调整时可以看到的丑陋工件SetWindowPos().这些不太明显,因为它们只在屏幕上轻弹一瞬间,而不是长时间的拖动.
这个问题不是关于如何使你的特定于应用程序的绘图代码更快,即使这样做可能是许多情况下丑陋的调整大小问题的解决方案.如果您的应用确实需要花费大量时间在实时窗口调整大小期间重新显示其内容,请考虑优化绘图代码,或者至少在调整大小期间切换到更快,质量更低的绘图模式,方法是拦截WM_ENTERSIZEMOVE/WM_EXITSIZEMOVE消息以检测调整大小.
如果您的应用程序在应用程序调整大小期间根本无法调整大小(例如,在调整大小期间它"挂起",特别是如果它是使用GLFW或其他库的OpenGL),请参阅这些其他问题,这些问题解释了WM_SYSCOMMAND在拖动过程中Microsoft内部隐藏的嵌套/模态事件循环:这里特别是这个好的答案,这里,这里 …
每当调整浏览器窗口大小时,如何调用此(或任何)JS函数?
<script type="text/javascript">
function setEqualHeight(e) {
var t = 0;
e.each(function () {
currentHeight = $(this).height();
if (currentHeight > t) {
t = currentHeight
}
});
e.height(t)
}
$(document).ready(function () {
setEqualHeight($(".border"))
})
</script>
Run Code Online (Sandbox Code Playgroud) 通过阅读一些相关的问题,我意识到$.affix('refresh')twitter bootstrap词缀组件根本没有可用的方法 - 我的问题虽然相关,但可能只是刷新之间的一个额外步骤,让我试着解释一下.
我有一个标准bootstrap导航栏的页面.在我的情况下,当用户滚动超过x像素时,我将在其下方添加"引脚"的子导航(在我的情况下,导航栏的高度为41px,所以在41px时,词缀开始并通过将.affix类更改为.affix {top:41px}all) )
因此,对于第一个词缀,我可以使用仅限html的属性.
在页面的下方(本质上可以被认为是"第二页")我有另一条导航,一旦用户滚动到某个位置就应该"粘贴"并替换第一个子导航 - 假定第二个导航的位置页面/词缀是可变的,因为内容我使用js来计算第一页的高度,并offset: {top:xxx}根据我得到的内容进行设置.
这也很好/正如预期的那样,用户向下滚动一点,第一个子导航词缀开始,如果他继续滚动并到达第二个子导航进一步向下页面它踢,并替换第一个词缀的子-nav(它实际上并不替换它本身,而是覆盖更高的z-index)
从这里开始,我有两个问题,我无法找到解决方案:
当用户重新调整窗口大小时,第一页的内容当然会变得更长,这会改变页面上的词缀的原始偏移顶部尺寸.首先,我认为简单的调用.affix('refresh')将是/可能是解决方案,但当然这个方法在组件上甚至不可用.接下来,我想我可以再次手动重新计算高度并重新创建$('.my-second-affix').affix({offset: {top:x-new-offset}});- 但由于某种原因,这似乎根本不起作用,我无法弄清楚为什么:(
接下来要解决的问题是我还在使用jquery infinitescroll来加载越来越多的页面...每个页面可能有不同阶段的其他子导航,我想加贴并替换现在最后一个词缀在顶部.
注意我还想确保如果用户向后滚动另一个方向,以前附加的子导航将重新附加自己向后移动(我怀疑只要附加偏移是正确的,它们就会很好)
希望这个解释足以突出我的问题,有人要么已经处理过此问题,要么可以为解决方案提供一些指导.我试图让偏移量成为一个从顶部返回当前偏移量的函数(如另一个问题Twitter bootstrap更改词缀偏移量中所述),但由于某种原因,它也无法按预期工作.
任何帮助是极大的赞赏
我正在尝试创建一个bookmarklet来做一些非常具体的调整大小来进行浏览器大小测试,我似乎无法让web浏览器调整大小window.resizeTo.
过度简化的示例不起作用:
javascript:window.resizeTo(1024,600);
Run Code Online (Sandbox Code Playgroud)
我可以理解浏览器可能已禁用此功能,但这里是我在Firefox中的JavaScript设置的屏幕截图:

我错过了一些明显的东西,还是应该提交错误报告?
我想用jquery检查窗口大小,并根据我想要更改背景图像的不同分辨率.所以我想以某种方式使用"switch"语句来处理更多情况,但我只是不知道它会是什么样子.这是我想要的基本结构,但有更多选择:
if ((screen.width>=1024) && (screen.height>=768)) {
//do something
}
else {
//do something else
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
window-resize ×10
javascript ×3
jquery ×3
css ×2
device ×1
directx ×1
firefox7 ×1
html ×1
if-statement ×1
itemscontrol ×1
r ×1
resize ×1
winapi ×1
windows ×1
winforms ×1
wpf ×1