Привет всем Я пытался получить ввод из текстового окна редактирования Win32 так:Получение ввода от окна редактирования Win32 [C++]
char IP_ADDR[200];
char NICK[200];
#define Print(msg) print_line(*hwnd, msg)
#define Println() Print("\r\n")
Print("Welcome to Basic Client 0.01 Alpha!");
Println();
Print("Please enter your IP address");
Println();
for (;; Sleep(500))
{
if (IsKeyDown(VK_RETURN))
{
GetDlgItemText(*hwnd, IDC_MAIN_EDIT2, IP_ADDR, sizeof(IP_ADDR));
SetDlgItemText(*hwnd, IDC_MAIN_EDIT2, "");
break;
}
}
Print("Please enter a nickname");
Println();
for (;; Sleep(500))
{
if (IsKeyDown(VK_RETURN))
{
GetDlgItemText(*hwnd, IDC_MAIN_EDIT2, NICK, sizeof(NICK));
SetDlgItemText(*hwnd, IDC_MAIN_EDIT2, "");
break;
}
}
Но это не идет в петлю или остановить его, пока клавиша нажата она просто продолжает идти Если это помогает мне иметь функцию выполнения которой это код из в новом потоке, так что он может сделать это при управлении окном сообщениями здесь есть код для этого:
Client * c = new Client;
.....
int Run(HWND *hwnd)
{
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
_beginthreadex(0, 0, ClientThread, (void*)hwnd, 0, 0);
}
}
return 1;
}
unsigned int __stdcall ClientThread(void*data)
{
HWND *hwnd = (HWND*)data;
c->Run(hwnd);
return 0;
}
И вот функция IsKeyDown:
bool Client::IsKeyDown(int vk)
{
return ((GetAsyncKeyState(vk) & 0x1) != 0)? true:false;
}
Вы создаете поток для каждого получаемого сообщения? Это похоже на плохую идею. –
Мне было нужно, чтобы он обрабатывал сразу две вещи, и я понятия не имел, как это сделать, не помещая его в цикл – AnonymousUser
Nevermind Спасибо за помощь @RetiredNinja – AnonymousUser