C ++ 20 / Visual Studio 2022 / Windows 10 (x64) < / p>
Я работаю над текстовой игрой, и в определенном моменте у меня есть окно, которое появляется и просит пользователя от их имени. Это работает достаточно хорошо, но когда он появляется, хотя это самое верхнее окно, это не активное окно. Пользователь должен руководствовать его, чтобы привлечь его к активности. Даже тогда пользователь по -прежнему должен нажать на область ввода текста, чтобы набрать что -либо, а затем нажать кнопку «Ответить» вручную, потому что простое нажатие enter ничего не делает.
C ++ 20 / Visual Studio 2022 / Windows 10 (x64) < / p> Я работаю над текстовой игрой, и в определенном моменте у меня есть окно, которое появляется и просит пользователя от их имени. Это работает достаточно хорошо, но когда он появляется, хотя это самое верхнее окно, это не активное окно. Пользователь должен руководствовать его, чтобы привлечь его к активности. Даже тогда пользователь по -прежнему должен нажать на область ввода текста, чтобы набрать что -либо, а затем нажать кнопку «Ответить» вручную, потому что простое нажатие enter ничего не делает. [code] // NAMEDIALOGUEBOX.CPP
// Includes #include "libraries.h"
// Define Text Box #define ID_TXT 1
// Define Button #define ID_BTN 2
// Define Window Handle For User Input Dialogue Box HWND inputName; LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { // Must Be Called For Macros USES_CONVERSION;
switch (Message) { case WM_CREATE: { // Text Box inputName = CreateWindowEx(0, TEXT("EDIT"), TEXT(""), WS_VISIBLE | WS_CHILD, 20, 20, 130, 20, hwnd, (HMENU)ID_TXT, NULL, NULL); //Reply Button CreateWindowEx(BS_PUSHBUTTON | BS_DEFPUSHBUTTON, TEXT("BUTTON"), TEXT("REPLY"), WS_VISIBLE | WS_CHILD, 180, 20, 80, 25, hwnd, (HMENU)ID_BTN, NULL, NULL); break; } case WM_COMMAND: { // On Reply Button Press if (LOWORD(wParam) == ID_BTN) { int nameLength = GetWindowTextLength(inputName) + 1; static wchar_t nameBuffer[32]; const char* newName; GetWindowText(inputName, nameBuffer, nameLength); SetWindowText(inputName, nameBuffer); newName = W2A(nameBuffer); ofstream outputFile("player_name.txt"); outputFile 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } < /code> Я выяснил, как привести к тому, что ящик для сообщений является активным окном, и выбрать, какие кнопки я хочу по умолчанию (ниже), но я не могу понять, как сделать то же самое для окна имени. < /p> // MessageBox - Run Program "Save The Ginger.exe"? runProgramOption = MessageBox(NULL, TEXT("Run program \"SaveTheGinger.exe\"?"), TEXT("Initialize Program?"), MB_YESNO | MB_DEFBUTTON1 | MB_SYSTEMMODAL); < /code> libraries.h[/code] просто содержит все библиотеки #include . Поскольку окно технически работает с остальной частью моей игры, я не видел причин добавить его.