我写了一个大型复杂的C程序大约20(!)年。据我所知,它在各个方面都运行良好 - 它可能在Windows 95上运行。
现在我需要再次使用它。不幸的是,它中的单选按钮似乎不再正常工作(普通的按钮都表现正常)。当我点击单选按钮时,我得到一些反馈,即窗口确认我的点击,因为我看到按钮的文本周围出现了一条虚线,只要我的手指在按钮上,按钮的圆圈就会变灰,但当我脱下手指时,我发现所选按钮没有改变。
我怀疑我可能在使用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);
}
}
答案 0 :(得分:2)
使用单选按钮时要检查两件简单的事情。首先是确保每个都设置了BS_AUTORADIOBUTTON属性。第二个是确保选项卡顺序中的第一个按钮和按钮组(通常是组框)之后的下一个控件具有WS_GROUP属性设置,而其他按钮清除它。
答案 1 :(得分:1)
一些建议:
使用这样的旧代码,记忆会一点一滴地回到我身边,而不是洪水,所以通常需要一些时间才能告诉我当时正在做的事情。
答案 2 :(得分:0)
如果您只是想让程序运行以使用它,我可以建议“兼容模式”。
http://www.howtogeek.com/howto/windows-vista/using-windows-vista-compatibility-mode/
但是,如果您拥有较大的预期软件使用寿命,则可能需要考虑重写它。由于一些因素,重写它并不是最初写入的复杂性或工作的任何地方:
希望有帮助...