我有这段代码基于Stroustrup的编程,原理和使用C ++的实践一书。
Point p(20, 100); // instance point where to fix the window
Simple_window win(p, 100, 100, "Canvas"); // instance a simple_window 100x100 pixel
while(true)
{
win.wait_for_button(); // show the window in your screen until
// you hit the "Next" button of the
// window
}
它的作用只是实例化具有指定属性(大小,位置等)的“Simple_window”对象,并绘制您决定附加到窗口的任何对象。
该窗口包含一个“下一步”按钮,当按下该按钮时,重绘以后附加的任何内容。
问题在于,即使没有将任何东西附加到窗口,连续按下“下一步”按钮也会使窗口变小。我调试了FLTK库(用于Windows的fltk-1.3.2),只能找到一个名为
的函数static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
在Fl_win32.cxx文件中似乎负责调整窗口大小,但我无法得到任何其他内容。
有人知道问题是什么吗?
提前谢谢。
答案 0 :(得分:1)
原来这是仅在Windows 7版本上的已知问题
https://groups.google.com/forum/#!searchin/fltkgeneral/shrink/fltkgeneral/BRdzwxXJGgs/1lOkF_j9CyQJ
我有同样的问题将我的项目从mac迁移到windows。
我忽略了很多,只是使用了一个丑陋的解决方法:每当我调用win->resize(x,y,w,h)
时调整大小(即使用win->show()
)。明确地使用x,y,w,h来自最后已知的位置/大小或默认位置,根据您想要的行为进行初始化。
一个更好的方法(但仍然是一个小问题)可能是对窗口进行子类化(例如将其称为mywin
),添加一些成员变量x_temp
,y_temp
,{{1 }},w_temp
。然后定义隐藏和显示功能,如
h_temp
听起来像simple_window是Fl_Window的子类,所以你可以自己修改simple_window,也可以只是简单地循环使用simple_window。
答案 1 :(得分:1)
This bug在2014年11月3日发布的FLTK 1.3.3中得到修复。根据错误报告,问题是:
中的更多详细信息此行为的原因与Windows使用边框填充设置的方式有关,以及FLTK完全不考虑该设置的事实。 Windows 7使用填充来绘制可调整大小的窗口的边框,并且如果MajorSubsystemVersion在PE标头中为6,则不会将其用于不可调整大小的窗口。如果正在使用Windows Classic或Windows Basic主题,则为true。如果使用Aero主题,则所有窗口都会毫无例外地遵循边框填充设置,但我描述的行为仍然会出于任何原因。
答案 2 :(得分:0)
好的,我发现在hide()
中对Simple_window::next()
进行了评论,并在show()
中致电Simple_window::wait_for_button()
,以避免在点击“下一步”按钮时窗口变小。< / p>
真的不知道为什么或如何,但它解决了窗口萎缩。我猜整个winodw收缩是一个问题,发生在这个GUI库的某些“版本”中,具体取决于你下载它的位置和时间。
感谢大家的帮助。