📅  最后修改于: 2023-12-03 15:38:57.170000             🧑  作者: Mango
在 C++ 中使用 SFML 库创建窗口时,有时需要锁定窗口的大小,以保障用户体验或者程序的逻辑需要。下面将介绍两种实现方法,其中一种使用 SFML 内置的窗口风格属性,另一种使用窗口消息处理机制。
SFML 中提供了一些窗口风格属性(Style
),可以通过设置这些属性来控制窗口的行为。其中,和窗口大小有关的属性是 sf::Style::Titlebar | sf::Style::Close
,表示只显示窗口标题栏和关闭按钮,其他部分都不能修改大小。
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window", sf::Style::Titlebar | sf::Style::Close);
SFML 中的窗口消息处理机制可以捕捉到 Windows 系统的窗口消息(WM_
),可以用处理函数对消息进行自定义处理。如果想阻止用户调整窗口尺寸,只需要在 sf::Window::pollEvent()
中加入 WM_SIZING
消息的处理即可。
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::Resized:
// ...
break;
case sf::Event::KeyPressed:
// ...
break;
case sf::Event::Message:
if (event.message.code == WM_SIZING) // 捕捉到 WM_SIZING 消息
{
RECT* rect = (RECT*)event.message.lParam;
rect->right = rect->left + 800; // 固定宽为 800
rect->bottom = rect->top + 600; // 固定高为 600
}
break;
default:
break;
}
}
window.clear();
// ...
window.display();
}
以上就是两种锁定 SFML 窗口的大小的方法,根据自己的需要进行选择。