Хорошо, поэтому у меня есть программа, в которой есть пустота, которая открывает новое окно, а затем выводит на экран aws изображение в этом окне каждый раз, когда я вызываю пустоту. Это позволит мне открыть второе окно, но не позволит мне открыть его снова, пока я не закрою второе окно. Я думаю, что я думаю об этом неправильно, если я могу кто-то дать мне лучший способ сделать это. Вот мой код, я не думаю, что он на 100% необходим, но idk.
Моя цель - заставить его открывать несколько windows, выполняя свое дело на экране. Я пытаюсь открыть новое окно, вызывая DrawKey
void.
Это окно открывается, когда я нажимаю клавишу в первый раз, но оно ограничивает меня главным окном и одним окном ключа. Я хочу иметь возможность открывать столько ключей windows, сколько мне нужно.
class MakeKey
{
public:
typedef struct KeySprite {
sf::Image Img;
sf::Texture Tex;
sf::Sprite Sprite;
}Key;
static bool setTransparency(HWND hwnd, unsigned char alpha) { ... }
static bool setShape(HWND hwnd, const sf::Image& image) { ... }
static sf::Vector2i RandSpawn(sf::Image image) { ... }
static void MakeTopWindow(HWND hwnd) { ... }
static void DrawKey(string key)
{
const unsigned char opacity = 1000;
Key Key;
Key.Img.loadFromFile("Assets/Images/A.png");
sf::RenderWindow window(sf::VideoMode(Key.Img.getSize().x, Key.Img.getSize().y, 32), "Key", sf::Style::None);
setTransparency(window.getSystemHandle(), opacity);
if (key == "A")
Key.Img.loadFromFile("Assets/Images/A.png");
else if (key == "D")
Key.Img.loadFromFile("Assets/Images/D.png");
else if (key == "E")
Key.Img.loadFromFile("Assets/Images/E.png");
else if (key == "Q")
Key.Img.loadFromFile("Assets/Images/Q.png");
else if (key == "S")
Key.Img.loadFromFile("Assets/Images/S.png");
else if (key == "W")
Key.Img.loadFromFile("Assets/Images/W.png");
else if (key == "X")
Key.Img.loadFromFile("Assets/Images/X.png");
else if (key == "Z")
Key.Img.loadFromFile("Assets/Images/Z.png");
else if (key == "Esc")
Key.Img.loadFromFile("Assets/Images/esc.png");
setShape(window.getSystemHandle(), Key.Img);
Key.Tex.loadFromImage(Key.Img);
Key.Sprite.setTexture(Key.Tex);
window.setPosition(MakeKey::RandSpawn(Key.Img));
while (window.isOpen())
{
MakeTopWindow(window.getSystemHandle());
window.clear(sf::Color::Transparent);
window.draw(Key.Sprite);
window.display();
}
}
};
Main
int main()
{
sf::RenderWindow window(sf::VideoMode(100, 100, 32), "Main Window", sf::Style::None);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
MakeKey::MakeTopWindow(window.getSystemHandle());
if (event.type == sf::Event::KeyPressed) {
if (event.key.code == sf::Keyboard::A)
MakeKey::DrawKey("A");
else if (event.key.code == sf::Keyboard::D)
MakeKey::DrawKey("D");
else if (event.key.code == sf::Keyboard::E)
MakeKey::DrawKey("E");
else if (event.key.code == sf::Keyboard::Q)
MakeKey::DrawKey("Q");
else if (event.key.code == sf::Keyboard::S)
MakeKey::DrawKey("S");
else if (event.key.code == sf::Keyboard::W)
MakeKey::DrawKey("W");
else if (event.key.code == sf::Keyboard::X)
MakeKey::DrawKey("X");
else if (event.key.code == sf::Keyboard::Z)
MakeKey::DrawKey("Z");
else if (event.key.code == sf::Keyboard::Escape)
MakeKey::DrawKey("Esc");
}
if (event.type == sf::Event::Closed)
window.close();
}
MakeKey::MakeTopWindow(window.getSystemHandle());
window.clear(sf::Color::Transparent);
window.display();
}
return EXIT_SUCCESS;
}
Нет ошибки, просто не делать то, что я хочу, и я хочу помочь выяснить, как заставить его делать то, что я хочу.