正在从Win32编辑框[C++]获取输入
Getting input from Win32 edit box[C++]
大家好,我一直在尝试从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放在了消息循环中,正如退役忍者所指出的那样,这就是导致所有问题的原因。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 在c++中获取大文件的大小