【问题标题】:Getting input from Win32 edit box[C++]从 Win32 编辑框获取输入[C++]
【发布时间】:2014-09-10 00:00:17
【问题描述】:

大家好,我一直在尝试从 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;
}

【问题讨论】:

  • 您正在为收到的每条消息创建一个线程?这似乎是个坏主意。
  • 我需要它同时处理两件事情,但如果不把它放在循环中,我不知道该怎么做
  • 没关系感谢@RetiredNinja 的帮助
  • 为什么您的Run 函数采用HWND* 而不是简单的HWND
  • 我认为函数只能将指针指向一个窗口,因此它实际上可以使用,但我想不是

标签: c++ winapi


【解决方案1】:

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

【讨论】:

  • 错了。完全。你正在打破线程规则。从创建窗口的线程访问 UI 对象。你在这里不需要线程。以编写没有线程的代码为目标。
  • 感谢您的建议,我会这样做的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2010-12-23
  • 2011-11-15
  • 2021-10-23
  • 2022-07-08
  • 1970-01-01
相关资源
最近更新 更多