Winapi 单选按钮和复选框重新绘制

Winapi 单选按钮和复选框重新绘制,winapi,Winapi,我对WinAPI单选按钮有问题。基本上,我有三个按钮,当我从一个切换到另一个时,旧的一个仍然会被选中,直到我将鼠标悬停在它上面,或者我再次单击之前单击的按钮。我试着使控件和整个窗口都失效,但没有成功。我对同一对话框中的复选框也有类似的问题——我必须将鼠标悬停在复选框上才能看到它们的实际状态 编辑: 选择每个按钮时会执行此操作(注意1011…1013是单选按钮ID): 我还尝试发送WM_PAINT消息,并在整个窗口和每个单选按钮上调用UpdateWindow(),但没有效果。显示您尝试的内容。.所

我对WinAPI单选按钮有问题。基本上,我有三个按钮,当我从一个切换到另一个时,旧的一个仍然会被选中,直到我将鼠标悬停在它上面,或者我再次单击之前单击的按钮。我试着使控件和整个窗口都失效,但没有成功。我对同一对话框中的复选框也有类似的问题——我必须将鼠标悬停在复选框上才能看到它们的实际状态

编辑:

选择每个按钮时会执行此操作(注意1011…1013是单选按钮ID):


我还尝试发送WM_PAINT消息,并在整个窗口和每个单选按钮上调用UpdateWindow(),但没有效果。

显示您尝试的内容。.所有单选按钮必须具有
WS_TABSTOP
并且第一个单选按钮也必须具有
WS_GROUP
样式,否则自动选择将无法工作。请看这里-使用visual editor(这些家伙不是使用CreateWindowEx()创建的)我将第一个单选按钮的每个“Tabstop”值的属性更改为true,“Group”值的属性也更改为true。可悲的是,一切都没有改变。
RECT rect;
BringWindowToTop(GetDlgItem(hwnd, 1011));
GetClientRect(GetDlgItem(hwnd, 1011), &rect);
InvalidateRect(GetDlgItem(hwnd, 1011), &rect, TRUE);
RedrawWindow(GetDlgItem(hwnd, 1011), &rect, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);

BringWindowToTop(GetDlgItem(hwnd, 1012));
GetClientRect(GetDlgItem(hwnd, 1012), &rect);
InvalidateRect(GetDlgItem(hwnd, 1012), &rect, TRUE);
RedrawWindow(GetDlgItem(hwnd, 1012), &rect, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);

BringWindowToTop(GetDlgItem(hwnd, 1013));
GetClientRect(GetDlgItem(hwnd, 1013), &rect);
InvalidateRect(GetDlgItem(hwnd, 1013), &rect, TRUE);
RedrawWindow(GetDlgItem(hwnd, 1013), &rect, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);