这真是奇怪!我有此对话框资源:
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
如果我取消切换透明标志并显示对话框并调整大小:
虽然看起来很奇怪,但是两个组框仍然可见。但是,当我像应该那样打开透明度时,然后显示对话框并调整其大小:
它们消失了!是什么原因造成的?困惑。我要强调的是,它们在首次显示时就在那里(位置已恢复)。一旦确定大小,问题就会发生。这是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);
}
}
我将夹持器的图形从基础移到了此类中,以防万一这是问题所在。我不明白。
答案 0 :(得分:1)
排序。 WS_CLIPCHILDREN
是罪魁祸首。将其关闭,然后调整大小即可正常工作。