正在从Win32编辑框[C++]获取输入

Getting input from Win32 edit box[C++]

本文关键字:C++ 获取 输入 Win32 编辑      更新时间:2023-10-16

大家好,我一直在尝试从Win32文本编辑框中获得输入,如下所示:

    char IP_ADDR[200];
    char NICK[200];
    #define Print(msg) print_line(*hwnd, msg)
    #define Println() Print("rn")

        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;
}

哇,我的坏家伙们,我把beginThread放在了消息循环中,正如退役忍者所指出的那样,这就是导致所有问题的原因。