下面是一個例子,你如何能得到的unicode輸入作爲SDL_TEXTINPUT但其餘爲SDL_KEYDOWN:
#include "SDL.h"
int main(int argc, char *argv[]) {
int done = 0;
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *w = SDL_CreateWindow("foo", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
640, 480, 0);
int lctrl = 0, rctrl = 0;
SDL_StartTextInput();
while (!done) {
SDL_Event event;
while(SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
done = 1;
break;
case SDL_TEXTINPUT: {
int ctrl_state = lctrl || rctrl;
printf("%s, ctrl %s\n", event.text.text, (ctrl_state) ? "pressed" : "released");
} break;
case SDL_KEYDOWN:
if(event.key.keysym.sym == SDLK_RCTRL) { rctrl = 1; }
else if(event.key.keysym.sym == SDLK_LCTRL) { lctrl = 1; }
break;
case SDL_KEYUP:
if(event.key.keysym.sym == SDLK_RCTRL) { rctrl = 0; }
else if(event.key.keysym.sym == SDLK_LCTRL) { lctrl = 0; }
break;
}
}
SDL_UpdateWindowSurface(w);
}
SDL_Quit();
return 0;
}
爲了簡化問題,卻忽視了SDL_TEXTEDITING,你想要什麼可以(或不)。也可以使用SDL_GetKeyboardState
來代替手動處理事件並累積修飾符鍵標誌,結果相同。
我認爲它被文本輸入事件所取代,看看https://wiki.libsdl.org/Tutorials/TextInput – keltar
@keltar問題在於TextInput吞下控制鍵。它只適用於可打印字符。我可以閱讀代碼,看看它是如何在內部工作,也許構建類似的東西,但我寧願不這樣做。 –
但是如果它不是輸入序列的一部分,你仍然有ctrl的keydown事件,所以你可以將兩者結合起來。 – keltar