Это действительно странно! У меня есть этот ресурс диалога:
ID_DLG_ASSIGN DIALOGEX 0, 0, 415, 285
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Assignments"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "Date Range ...",IDC_STATIC,7,9,120,91,0,WS_EX_TRANSPARENT
LTEXT "&Start Date:",IDC_STATIC,16,18,103,8
CONTROL "DateTimePicker1",ID_DTP_ASSIGN_FROM,"SysDateTimePick32",DTS_RIGHTALIGN | WS_TABSTOP,16,28,104,12
LTEXT "&End Date:",IDC_STATIC,16,43,103,8
CONTROL "DateTimePicker2",ID_DTP_ASSIGN_TO,"SysDateTimePick32",DTS_RIGHTALIGN | WS_TABSTOP,16,54,104,12
PUSHBUTTON "&Display Entries",ID_BTN_DISPLAY_ENTRIES,21,76,90,14
GROUPBOX "Settings ...",IDC_STATIC,7,101,120,174,0,WS_EX_TRANSPARENT
LTEXT "Assignment:",IDC_STATIC,16,113,102,10
COMBOBOX IDC_COMBO_ASSIGNMENT,16,124,97,60,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Starting Name:",IDC_STATIC,16,143,96,8
COMBOBOX ID_CMB_START_NAME,16,154,97,60,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Include All Dates",IDC_CHECK_INCLUDE_ALL_DATES_CHAIRMAN_READER,
"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,19,169,96,16
CONTROL "Ignore Local Speakers",IDC_CHECK_IGNORE_LOCAL,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,19,182,96,19
CONTROL "&Avoid Conflicts",IDC_CHK_AVOID_CONFLICT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,202,95,10
LTEXT "&Weeks to avoid:",ID_STATIC_WEEKS,30,215,94,8
COMBOBOX ID_CMB_NUM_WEEKS,42,227,39,44,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "A&uto Assign",ID_BTN_AUTO_ASSIGN,21,251,90,14
GROUPBOX "Entries ...",IDC_STATIC_ENTRIES,134,9,272,248,0,WS_EX_TRANSPARENT
CONTROL "",IDC_STATIC_ASSIGN_GRID,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,141,22,258,204
PUSHBUTTON "&Show Conflicts",ID_BTN_SHOW_CONFLICTS,178,237,90,14
CONTROL "",ID_STATIC_KEY,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,277,230,122,21
PUSHBUTTON "Help",ID_BTN_HELP,134,261,50,14
PUSHBUTTON "Print",ID_BTN_ASSIGN_PRINT,189,261,50,14
PUSHBUTTON "Undo",ID_BTN_UNDO,245,261,50,14
PUSHBUTTON "Cancel",IDCANCEL,301,261,50,14
DEFPUSHBUTTON "OK",IDOK,357,261,50,14
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT | NOT WS_VISIBLE,377,97,1,1
END
Вот данные динамического макета:
ID_DLG_ASSIGN AFX_DIALOG_LAYOUT
BEGIN
0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 100, 100,
0, 0, 100, 100,
100, 100, 0, 0,
100, 100, 0, 0,
100, 100, 0, 0,
100, 100, 0, 0,
100, 100, 0, 0,
100, 100, 0, 0,
100, 100, 0, 0,
0, 0, 0, 0
END
Теперь есть два конкретных элемента управления:
GROUPBOX "Date Range ...",IDC_STATIC,7,9,120,91,0,WS_EX_TRANSPARENT
GROUPBOX "Settings ...",IDC_STATIC,7,101,120,174,0,WS_EX_TRANSPARENT
Если я отключу прозрачный флаг и покажу диалоговое окно и изменим размер:
![Sized](https://i.stack.imgur.com/Rlb2S.jpg)
Хотя это выглядит странно, две групповые рамки остаются видимыми. Но когда я снова включаю прозрачность, как это должно было быть, затем показываю диалог и изменяю его размер:
![Sized 2](https://i.stack.imgur.com/HkIUg.jpg)
Они исчезают! Что вызывает это? Смущенный. Подчеркиваю, они есть при первом его отображении (позиция восстановлена). Как только я измеряю размер, проблема возникает. Это OnSize
:
void CAssignmentsDlg::OnSize(UINT nType, int cx, int cy)
{
CResizingDialog::OnSize(nType, cx, cy);
CRect rctControl;
m_lblAssignGrid.GetWindowRect(rctControl);
ScreenToClient(rctControl);
m_Grid.MoveWindow(rctControl);
}
А OnPaint
:
void CAssignmentsDlg::OnPaint()
{
//CResizingDialog::OnPaint();
CPaintDC dc(this); // device context for painting
COLORREF crTextHL, crBackHL;
COLORREF crTextOld, crBackOld;
CString strText;
EstablishLegendPosition();
crBackHL = ::GetSysColor(COLOR_HIGHLIGHT);
crTextHL = ::GetSysColor(COLOR_HIGHLIGHTTEXT);
dc.FillSolidRect(m_rcKey, crBackHL);
crBackOld = dc.SetBkColor(crBackHL);
crTextOld = dc.SetTextColor(crTextHL);
strText.LoadString( IDS_STR_SAMPLE_CONFLICT );
CFont l_font;
l_font.CreateFont(14, 0, 0, 0, FW_NORMAL,
FALSE, FALSE, FALSE, 0,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN, _T("Arial"));
CFont* l_old_font = dc.SelectObject(&l_font);
dc.DrawText( strText, m_rcKey, DT_SINGLELINE|DT_CENTER|DT_VCENTER );
dc.SetBkColor(crBackOld);
dc.SetTextColor(crTextOld);
// Delete the font object.
dc.SelectObject(l_old_font);
l_font.DeleteObject();
CRect rc;
GetClientRect(&rc);
rc.left = rc.right - ::GetSystemMetrics(SM_CXHSCROLL);
rc.top = rc.bottom - ::GetSystemMetrics(SM_CYVSCROLL);
HTHEME ht = OpenThemeData(GetSafeHwnd(), L"STATUS");
if (ht)
{
DrawThemeBackground(ht, dc, SP_GRIPPER, 0, &rc, nullptr);
CloseThemeData(ht);
}
else
{
dc.DrawFrameControl(rc, DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
}
}
Я переместил рисунок захвата из базовой базы в этот класс, только если это была проблема. Я не понимаю.