Stroustrup" Simple_window"推动时收缩"下一步"按键

时间:2014-09-16 16:08:03

标签: c++ visual-studio-2012 fltk

我有这段代码基于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文件中似乎负责调整窗口大小,但我无法得到任何其他内容。

有人知道问题是什么吗?

提前谢谢。

3 个答案:

答案 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_tempy_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主题,则所有窗口都会毫无例外地遵循边框填充设置,但我描述的行为仍然会出于任何原因。

bug report

中的更多详细信息

答案 2 :(得分:0)

好的,我发现在hide()中对Simple_window::next()进行了评论,并在show()中致电Simple_window::wait_for_button(),以避免在点击“下一步”按钮时窗口变小。< / p>

真的不知道为什么或如何,但它解决了窗口萎缩。我猜整个winodw收缩是一个问题,发生在这个GUI库的某些“版本”中,具体取决于你下载它的位置和时间。

感谢大家的帮助。