Bytecroc Posted March 26, 2016 Share Posted March 26, 2016 For Keyboard Input I can not found a way to get german umlaut like "ä,ö,ü,Ä,Ö,Ü,ß" also the Left- and right- Alt Key I am missing in the Keylist. I miss in the API- Reference a function to get the scancode from a keypress. Quote Leadwerks 4.x Pro, examples please for C++, english is not my native language. Link to comment Share on other sites More sharing options...
Undac Posted March 27, 2016 Share Posted March 27, 2016 As far as I know, no, but you can fix this if you know the code of the key you want to use. Let's suppose that you are looking for key 1 (/exclamation mark, above Q), which would have the key code 49. Well, you can either use this value when you call the function for example: window->KeyHit(49); or open the external dependencies filter, go to Key.h and add it in the class static const int KeyOne = 49; ... window->KeyHit(Key::KeyOne); //it would actually be advised to write your own Key class in case you want to share the code I think that the issues with Alt key in windowed mode are related to the fact that it triggers the cascade menu. Quote Link to comment Share on other sites More sharing options...
Athos Posted March 27, 2016 Share Posted March 27, 2016 It seems the Key class is a Virtual-Code list. Not Scancodes; I suggest you to read About Keyboard Input (Windows) msdn. One way I know of getting such inputs is by replacing the leadwerks window's wndproc with your own. Process the events you need, then call Leadwerks::WndProc(); Quote Link to comment Share on other sites More sharing options...
Bytecroc Posted March 27, 2016 Author Share Posted March 27, 2016 Thank you Undac and Athos for your answers and suggestions, my WinAPI knowledge to replacing the windows wndproc with an own procedure is a bit to low but the WinAPI did have some nice functions I tested. This one works for the first. It registers all Keys and also the mousebuttons I think this are also not scancodes but I can make a list for each user to register his own keys. Or receiving letters for input messages, like in a chat. possibly replace the "comic.ttf" with "arial.ttf" #include "App.h" using namespace Leadwerks; App::App() : window(NULL), context(NULL), world(NULL), camera(NULL) {} App::~App() { delete world; delete window; } bool App::Start() { window = Window::Create(); context = Context::Create(window); Font* font = Font::Load("Fonts/Comic.ttf", 36, Font::Smooth); context->SetFont(font); font->Release(); return true; } bool App::Loop() { if (window->Closed() || window->KeyDown(Key::Escape)) return false; context->SetColor(0, 0, 0); context->Clear(); context->SetColor(1, 1, 1); //Display some centered text std::string text; BYTE keys[256]; //GetKeyState(0); GetKeyboardState(keys); for (int i=0; i < 255; i++) { if (keys[i] & 0x80) { text += String(i); keys[i] = 0; //break; //yes or no? The numbers for the right ALT Key and others are lower with break. } } Font* font = context->GetFont(); int screenwidth = context->GetWidth(); int screenheight = context->GetHeight(); int x = (screenwidth - font->GetTextWidth(text)) / 2; int y = (screenheight - font->GetHeight()) / 2; context->SetBlendMode(Blend::Alpha); context->DrawText(text, x, y); context->SetBlendMode(Blend::Solid); context->Sync(); return true; } Quote Leadwerks 4.x Pro, examples please for C++, english is not my native language. Link to comment Share on other sites More sharing options...
Bytecroc Posted March 27, 2016 Author Share Posted March 27, 2016 Extended to translate also in ScanCode #include "App.h" using namespace Leadwerks; App::App() : window(NULL), context(NULL), world(NULL), camera(NULL) {} App::~App() { delete world; delete window; } unsigned long VKtoSC(unsigned long virtual_key) { return (static_cast<unsigned long>(::MapVirtualKeyEx(virtual_key, 4, ::GetKeyboardLayout(::GetCurrentThreadId())))); } bool App::Start() { window = Window::Create(); context = Context::Create(window); Font* font = Font::Load("Fonts/Comic.ttf", 36, Font::Smooth); context->SetFont(font); font->Release(); return true; } bool App::Loop() { if (window->Closed() || window->KeyDown(Key::Escape)) return false; context->SetColor(0, 0, 0); context->Clear(); context->SetColor(1, 1, 1); //Display some centered text std::string text; std::string text2; int sc; BYTE keys[256]; //GetKeyState(0); GetKeyboardState(keys); for (int i=0; i < 255; i++) { if (keys[i] & 0x80) { text = "VirtualKeyCode: " + String(i); sc = VKtoSC(i); text2 = "ScanCode: " + String(sc); //keys[i] = 0; //break; } } Font* font = context->GetFont(); int screenwidth = context->GetWidth(); int screenheight = context->GetHeight(); int x = (screenwidth - font->GetTextWidth(text)) / 2; int y = (screenheight - font->GetHeight()) / 2; context->SetBlendMode(Blend::Alpha); context->DrawText(text, x, y); context->DrawText(text2, x, y+50); context->SetBlendMode(Blend::Solid); context->Sync(); return true; } 1 Quote Leadwerks 4.x Pro, examples please for C++, english is not my native language. Link to comment Share on other sites More sharing options...
Undac Posted March 27, 2016 Share Posted March 27, 2016 It seems that I totally misunderstood what you wanted in the first place (a generic scan, not only to add your specific special keys). Glad to see that you solved it. Quote Link to comment Share on other sites More sharing options...
Bytecroc Posted March 27, 2016 Author Share Posted March 27, 2016 It's because english is not my natural language and I can not explain like I would do in my natural language what the problem 100% is. Sometimes there are hidden functions or functions I have not detected inside Leadwerks, and before I use WinAPI things I thought I ask in forum. For single key query there is GetKeyState() or GetAsyncKeyState() a better choice. Quote Leadwerks 4.x Pro, examples please for C++, english is not my native language. Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.