1.01 事件
// main.cpp
#include <SDL.h>
#include <iostream>
#define MY_EVENT_TYPE 10000
int main(int argc, char* argv[]) {
// 1. 初始化SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL 初始化失败: " << SDL_GetError() << std::endl;
return -1;
}
// 2. 创建窗口
SDL_Window* window = SDL_CreateWindow(
"SDL2 入门", // 窗口标题
SDL_WINDOWPOS_CENTERED, // X 位置(居中)
SDL_WINDOWPOS_CENTERED, // Y 位置
800, // 宽度
600, // 高度
SDL_WINDOW_SHOWN // 窗口标志
);
if (!window) {
std::cerr << "窗口创建失败: " << SDL_GetError() << std::endl;
SDL_Quit();
return -1;
}
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (!renderer) {
std::cerr << "渲染器创建失败: " << SDL_GetError() << std::endl;
SDL_DestroyWindow(window);
SDL_Quit();
return -1;
}
bool isquit = false;
SDL_Event event;
//自定义事件
const char* eventName = "Custom event";
SDL_Event myEvent;
myEvent.type = MY_EVENT_TYPE;
myEvent.user.data1 = (void*)eventName;
SDL_PushEvent(&myEvent);
while (!isquit)
{
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT) {
isquit = true;
}
// 窗口事件
if (event.type == SDL_WINDOWEVENT) {
if (event.type == SDL_WINDOWEVENT_RESIZED)
{
SDL_Log("you pressed key %s \n", SDL_GetKeyName(event.key.keysym.sym));
}
}
// 鼠标键盘滚轮事件
if (event.type == SDL_KEYDOWN) {
SDL_Log("you pressed key %s \n", SDL_GetKeyName(event.key.keysym.sym));
}
if (event.type == SDL_KEYUP) {
SDL_Log("you pressed key %s \n", SDL_GetKeyName(event.key.keysym.sym));
}
if (event.type == SDL_MOUSEMOTION) {
//SDL_Log("mouse button %d \n", event.button.button);
}
if (event.type == SDL_MOUSEWHEEL) {
SDL_Log("wheel x = %d. y = %d \n", event.wheel.x, event.wheel.y );
}
int mouseX, mouseY;
Uint32 button = SDL_GetMouseState(&mouseX, &mouseY);
if ((button & SDL_BUTTON(SDL_BUTTON_LEFT)) && (button & SDL_BUTTON(SDL_BUTTON_RIGHT)))
{
SDL_Log("mouse left and right button down");
}
// 自定义事件
if (event.type == MY_EVENT_TYPE) {
SDL_Log("cache my event");
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); // RGBA
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
// 4. 清理资源
SDL_RenderPresent(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}