Mfc 控件使用动态布局消失

Mfc 控件使用动态布局消失,mfc,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

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

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“日期范围…”,IDC_静态,7,9120,91,0,WS_EX_透明
    
  • GROUPBOX“设置…”,IDC_静态,7101120174,0,WS_EX_透明
    
如果我取消切换透明标志并显示对话框并调整大小:

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

他们消失了!这是什么原因?困惑的我强调,它们在第一次显示(位置恢复)时就在那里。我一估计问题就发生了。这是尺寸上的
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);
    }
}

我把手爪的图纸从基础移到这个类中,以防万一这是个问题。我不明白。

排序
WS_CLIPCHILDREN
是罪魁祸首。关闭它,调整大小就可以正常工作。

我试过关闭Windows百叶窗,效果也一样。