Фокус окна внутри приложения консолиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Фокус окна внутри приложения консоли

Сообщение Anonymous »

C ++ 20 / Visual Studio 2022 / Windows 10 (x64) < / p>
Я работаю над текстовой игрой, и в определенном моменте у меня есть окно, которое появляется и просит пользователя от их имени. Это работает достаточно хорошо, но когда он появляется, хотя это самое верхнее окно, это не активное окно. Пользователь должен руководствовать его, чтобы привлечь его к активности. Даже тогда пользователь по -прежнему должен нажать на область ввода текста, чтобы набрать что -либо, а затем нажать кнопку «Ответить» вручную, потому что простое нажатие enter ничего не делает.

Код: Выделить всё

// 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
просто содержит все библиотеки #include . Поскольку окно технически работает с остальной частью моей игры, я не видел причин добавить его.

Подробнее здесь: https://stackoverflow.com/questions/797 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»