给我写一个包括触屏窗口和按钮的示例
时间: 2024-09-08 10:04:33 浏览: 33
在C++和SDL2中,为了创建一个带触屏窗口和按钮的简单示例,你需要先确保已经包含了必要的库并设置了基本的窗口初始化。以下是一个简单的例子,演示了如何创建一个窗口,添加一个触摸区域响应点击事件以及创建一个按钮:
```cpp
#include <SDL2/SDL.h>
#include <vector>
// 定义触摸区域和按钮的结构体
struct TouchArea {
int x, y;
};
struct Button {
int left, top, width, height;
std::string label;
};
class TouchWindow {
public:
TouchWindow(int windowWidth, int windowHeight)
: m_window(NULL), m_events(50) {}
void createWindow(std::string title) {
SDL_Init(SDL_INIT_VIDEO);
m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, windowWidth, windowHeight,
SDL_WINDOW_INPUT_TOUCH | SDL_WINDOW_RESIZABLE);
}
bool onTouch(TouchArea touch) {
for (auto& button : buttons) {
if (touch.x >= button.left && touch.x <= button.left + button.width &&
touch.y >= button.top && touch.y <= button.top + button.height) {
// 打印按钮点击事件
printf("Button '%s' clicked at (%d, %d)\n", button.label.c_str(), touch.x, touch.y);
return true;
}
}
return false;
}
private:
SDL_Window* m_window;
std::vector<Button> buttons;
SDL_Event m_events;
// 添加更多事件处理函数,如SDL_FingerDown和SDL_FingerUp,以跟踪触控状态
};
int main() {
TouchWindow window(640, 480);
window.createWindow("Touch Test");
// 创建按钮示例
Button button1 {"Button 1", 100, 100, 100, "Click me"};
buttons.push_back(button1);
while (true) {
SDL_PollEvent(&window.m_events);
for (const auto& event : window.m_events) {
if (event.type == SDL_FINGERDOWN) {
TouchArea touch = {event.tfinger.x, event.tfinger.y};
if (window.onTouch(touch)) break; // 如果找到匹配的按钮就跳出循环
} else if (event.type == SDL_QUIT) {
break;
}
}
}
SDL_DestroyWindow(window.m_window);
SDL_Quit();
return 0;
}