Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Win32编辑框[C++]获取输入_C++_Winapi - Fatal编程技术网

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

从Win32编辑框[C++]获取输入,c++,winapi,C++,Winapi,您好,我一直在尝试从Win32文本编辑框获取输入,如下所示: 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("Plea

您好,我一直在尝试从Win32文本编辑框获取输入,如下所示:

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

哇,我的坏蛋,我把beginThread放在了消息循环中,正如退休的忍者所指出的,这就是造成所有问题的原因。

你为收到的每条消息都创建了一个线程?这似乎是个坏主意。我需要它同时处理两件事,但我不知道如何在不将它放入循环的情况下做到这一点。无需感谢@RetiredInjaw的帮助。为什么运行函数需要HWND*而不是简单的HWND?我想函数只能获取指向窗口的指针,这样它才能实际使用,但我想不是这样错误的完全地你正在违反线程规则。从创建窗口的线程访问UI对象。这里不需要线程。把写这段没有线程的代码作为你的目标。谢谢你的建议,我会去做的