使用动态布局控件消失了

时间:2018-07-03 09:58:53

标签: mfc

这真是奇怪!我有此对话框资源:

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

虽然看起来很奇怪,但是两个组框仍然可见。但是,当我像应该那样打开透明度时,然后显示对话框并调整其大小:

Sized 2

它们消失了!是什么原因造成的?困惑。我要强调的是,它们在首次显示时就在那里(位置已恢复)。一旦确定大小,问题就会发生。这是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);
    }
}

我将夹持器的图形从基础移到了此类中,以防万一这是问题所在。我不明白。

1 个答案:

答案 0 :(得分:1)

排序。 WS_CLIPCHILDREN是罪魁祸首。将其关闭,然后调整大小即可正常工作。