大约 20(!)年过去了,我编写了一个大型复杂的 C 程序。据我所知,它当时在各个方面都运行良好——它可能在 Windows 95 上运行。
现在我需要再次使用它。不幸的是,其中的单选按钮似乎不再正常工作(普通按钮都正常工作)。当我单击单选按钮时,我收到一些反馈,即 Windows 正在确认我的点击,就像我看到按钮文本周围出现一条虚线并且只要我的手指在按钮上,按钮的圆圈就会变灰,但是当我松开手指时,我看到所选按钮没有改变。
我的怀疑是,当时我可能正在摆脱一些不良做法,这些做法适用于 Windows 95,但不再适用于较新版本的 Windows,但我正在努力找出我做错了什么。有任何想法吗?
编辑:很难提取相关代码,因为该程序中的消息处理是一场纠结的噩梦。许多按钮是在运行时以编程方式创建的,当程序处于不同的操作模式时,会有不同的消息循环工作。该程序是一个可定制的环境,用于运行某些类型的实验。它甚至有自己的内置解释语言!所以我不期待像“你应该在第 47 行有一个逗号而不是分号”这样的答案,但可能更像是“我在我的程序中观察到类似的症状一次,结果是......” ..或者也许“虚线矩形出现的事实意味着过程AAA已经发生,但可能步骤BBB出错了”。
编辑:我设法提取了一些我包含错误的关键代码......
char *process_messages_one_at_a_time()
{
MSG msg;
int temp;
temp = PeekMessage(&msg,winh,0,0,PM_NOREMOVE);
if (temp)
{
GetMessage (&msg, NULL, 0, 0);
if (msg.message == WM_LBUTTONUP)
{
mouse_just_released_somewhere = TRUE;
}
TranslateMessage (&msg);
DispatchMessage (&msg);
}
if (button_command_waiting)
{
button_command_waiting = FALSE;
return (button_command_string);
}
else
{
return (NULL);
}
}