Проблема в том, что групповой блок является родительским элементом управления. Предполагается, что у групповых ящиков не должно быть детей, и использование их в качестве родителей приведет к всевозможным ошибкам (включая рисование, навигацию с помощью клавиатуры и распространение сообщений). Просто измените родительский элемент в вызове кнопки CreateWindow с group_box на hwnd (т.е. диалог).
Я предполагаю, что вы использовали групповой блок в качестве родительского для того, чтобы легко разместить другие элементы управления внутри него. Правильный способ сделать это - определить положение клиентской области groupbox и сопоставить ее с клиентской областью диалога. Все, что помещено в результирующий RECT, появится внутри группового блока. Поскольку групповые блоки на самом деле не имеют клиентской области, ее можно рассчитать примерно так:
// Calculate the client area of a dialog that corresponds to the perceived
// client area of a groupbox control. An extra padding in dialog units can
// be specified (preferably in multiples of 4).
//
RECT getClientAreaInGroupBox(HWND dlg, int id, int padding = 0) {
HWND group = GetDlgItem(dlg, id);
RECT rc;
GetWindowRect(group, &rc);
MapWindowPoints(0, dlg, (POINT*)&rc, 2);
// Note that the top DUs should be 9 to completely avoid overlapping the
// groupbox label, but 8 is used instead for better alignment on a 4x4
// design grid.
RECT border = { 4, 8, 4, 4 };
OffsetRect(&border, padding, padding);
MapDialogRect(dlg, &border);
rc.left += border.left;
rc.right -= border.right;
rc.top += border.top;
rc.bottom -= border.bottom;
return rc;
}
Обратите внимание, что то же самое относится к элементам управления Tab. Они тоже не предназначены для того, чтобы быть родителями, и будут вести себя схожим образом.