斯特劳斯特鲁普的"Simple_window"在按下按钮时收缩"Next"
Stroustrup's "Simple_window" shrinks when pushing "Next" button
我有这段代码是基于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文件中,它似乎负责调整窗口大小,但我无法获得其他任何信息。
有人知道问题出在哪里吗?
提前谢谢。
此错误已在2014年11月3日发布的FLTK 1.3.3中修复。根据错误报告,问题是:
这种行为的原因与Windows使用"边界填充"设置的方式有关,而且FLTK没有完全考虑该设置。Windows 7使用填充来绘制可调整大小的窗口的边界,并且不将其用于不可调整大小窗口,除非PE标头中的MajorSubsystemVersion为6。如果使用的是Windows经典或Windows基本主题,则情况也是如此。如果使用Aero主题,那么所有窗口都无一例外地尊重"边界填充"设置,但无论出于何种原因,我所描述的行为仍然会发生。
错误报告中的更多详细信息。
这是Windows 7上的一个已知问题,仅构建
https://groups.google.com/forum/#!searchin/fltkgeneral/shrink/fltkgeneraal/BRdzwxXJGgs/1lOkF_j9CyQJ
我在将我的项目从mac迁移到windows时也遇到了同样的问题。
我忽略了其中的大部分内容,只使用了一个丑陋的解决方法:每当我调用win->show()
时都调整大小(即使用win->resize(x,y,w,h)
)。根据您想要的行为,从上次已知的位置/大小或初始化时使用的默认位置显式地使用x、y、w、h。
一个更好的方法(但仍然是bodge)可能是对窗口进行子类化(例如称为mywin
),添加一些成员变量x_temp
、y_temp
、w_temp
、h_temp
。然后定义隐藏和显示功能,如
mywin::hide(){
x_temp=x();
y_temp=y();
w_temp=w();
h_temp=h();
Fl_Window::hide();
}
mywin::show(){
Fl_Window::show();
resize(x_temp,y_temp,w_temp,h_temp);
}
听起来simple_window是Fl_window的一个子类,所以您可以自己修改simple_windows,也可以只修改simple_wwindow的子类。
好的,我发现在Simple_window::next()
中对hide()
的调用和在Simple_window::wait_for_button()
中对show()
的调用都可以避免单击"下一步"按钮时窗口变小。
真的不知道为什么或如何,但它解决了窗口缩小的问题。我想整个winodw收缩是这个GUI库的某些"版本"中发生的问题,这取决于你从哪里和何时下载它
谢谢大家的帮助。
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 对于set上的循环-获取next元素迭代器
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 为什么 std::next 在以空地图开头馈送时卡住
- ImGui 在单击按钮后冻结
- WinAPI 无法创建按钮
- 按钮悬停在 QT 中垂直布局的选项卡小部件中不起作用
- 斯特劳斯特鲁普的"Simple_window"在按下按钮时收缩"Next"