Tester20001000 2018-06-04 04:04 采纳率: 40%
浏览 852
已结题

MFC 自定义控件显示问题【内附具体代码】

各位大神,

我自定义了一个ctrllist控件,写在了单文档的CView类OnInitialUpdate中,但是显示出来确实一个一个控件慢慢的出来,不知道怎么搞得?请帮忙

void CQCOMMultiDnloadFHLoaderView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();

GetParentFrame()->RecalcLayout();
ResizeParentToFit();

/************************************************************************/
InitListCtrl();
FullListCtrl();

//[]
strcpy(m_swVerPath, m_cfgData.swVerPath);
for (int i=0; i<maxLoopNum; ++i) {
    m_nEnable[i] = m_cfgData.bEnable[i];
    m_nComPort[i] = m_cfgData.nComPort[i];

    m_pCheckEnable[i]->SetCheck(m_nEnable[i]);

    CString str;
    for (int j=3; j<=256; ++j) {
        str.Format(_T("COM%d"), j);
        m_pComboboxPort[i]->AddString(str);
    }
    CQCOMMultiDnloadFHLoaderView::set_DropDownHight(*m_pComboboxPort[i], 20);
    m_pComboboxPort[i]->SetCurSel(m_nComPort[i]-3); // first COM3
    m_pComboboxPort[i]->EnableWindow(m_nEnable[i]);

    m_pEditTime[i]->SetWindowText("00m:00s");

    //SendMessage(WM_US_INFOLOOP, lp, (LPARAM)"Ready");

    SendMessage(WM_US_STATUS, i, m_nEnable[i] ? READY:DISENABLE);

    m_pButtonStart[i]->EnableWindow(m_nEnable[i]);
}

UpdateData(FALSE);

}

void CQCOMMultiDnloadFHLoaderView::InitListCtrl()
{
CRect rcListCtrl;
CWnd* pRect = GetDlgItem(IDC_STATIC_RECT);
if (NULL == pRect) {
return;
}
pRect->GetWindowRect(&rcListCtrl);
ScreenToClient(&rcListCtrl);

m_cf = new CFont;
m_cf->CreateFont(17,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,(LPCTSTR)("Verdana"));

m_pListCtrl = new CListCtrlCustom();
m_pListCtrl->Create(WS_VISIBLE|WS_BORDER, rcListCtrl, this, IDC_LISTCTRL_RECT);
DWORD dwExStyle = LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT;//|LVS_EX_FULLROWSELECT;
m_pListCtrl->SetExtendedStyle(dwExStyle);
m_pListCtrl->RegOnSettingRect(OnSettingRect);
m_pListCtrl->SetRowHeight(25);
m_pListCtrl->ShowWindow(SW_SHOW);

m_pListCtrl->SetFont(m_cf);

int col = -1;
m_pListCtrl->InsertColumn(++col, _T("Loop"),         LVCFMT_CENTER, 82);
m_pListCtrl->InsertColumn(++col, _T("Port"),         LVCFMT_CENTER, 85);
m_pListCtrl->InsertColumn(++col, _T("Time"),         LVCFMT_CENTER, 75);
m_pListCtrl->InsertColumn(++col, _T("Info"),         LVCFMT_CENTER, 267);
m_pListCtrl->InsertColumn(++col, _T("Status"),       LVCFMT_CENTER, 80);
m_pListCtrl->InsertColumn(++col, _T("Run"),          LVCFMT_CENTER, 60);
m_pListCtrl->InsertColumn(++col, _T("Reset"),        LVCFMT_CENTER, 60);
m_pListCtrl->InsertColumn(++col, _T("Statistics"),   LVCFMT_CENTER, 85);

}

void CQCOMMultiDnloadFHLoaderView::FullListCtrl()
{
int i;
CString cc;

CWnd* parWnd = 1 ? this:(CWnd*)m_pListCtrl;

for (i=0; i<maxLoopNum; ++i) {
    // Loop
    cc.Format(_T("Loop[%d]"), i+1);
    m_pCheckEnable[i] = new CButton();
    m_pCheckEnable[i]->Create((LPCTSTR)(cc), WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX,
        CRect(0, 0,80, 20), parWnd, m_nCtrlIDEnable[i]);

    // Port
    m_pComboboxPort[i] = new CComboBox();
    m_pComboboxPort[i]->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|CBS_DROPDOWNLIST|WS_VSCROLL,
        CRect(0, 0, 80, 20), parWnd, m_nCtrlIDPort[i]);

    // Time
    m_pEditTime[i] = new CEdit();
    m_pEditTime[i]->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY,
        CRect(0, 0, 80, 20), parWnd, m_nCtrlIDTime[i]);

    // Info
    m_pEditInfo[i] = new CEdit();
    m_pEditInfo[i]->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY,
        CRect(0, 0, 80, 20), parWnd, m_nCtrlIDInfo[i]);

    //Status
    //m_pStaticStatus[i] = new CXColorStatic(); // mark

#if 0
//m_pStaticStatus[i] = new CXColorStatic(); // mark
m_pStaticStatus[i]->Create(_T("Status"), WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_CENTER,
CRect(0, 0, 80, 20), parWnd, m_nCtrlIDStatus[i]);
#else
switch (i) {
case 0: m_pStaticStatus[i] = &m_ctrlStatic1; break;
case 1: m_pStaticStatus[i] = &m_ctrlStatic2; break;
case 2: m_pStaticStatus[i] = &m_ctrlStatic3; break;
case 3: m_pStaticStatus[i] = &m_ctrlStatic4; break;
case 4: m_pStaticStatus[i] = &m_ctrlStatic5; break;
case 5: m_pStaticStatus[i] = &m_ctrlStatic6; break;
case 6: m_pStaticStatus[i] = &m_ctrlStatic7; break;
case 7: m_pStaticStatus[i] = &m_ctrlStatic8; break;
}
#endif

    // Run
    m_pButtonStart[i] = new CButton();
    m_pButtonStart[i]->Create(_T("Start"), WS_CHILD|WS_VISIBLE|WS_TABSTOP,
        CRect(0, 0, 80, 20), parWnd, m_nCtrlIDStart[i]);

    // Reset
    m_pButtonReset[i] = new CButton();
    m_pButtonReset[i]->Create(_T("Reset"), WS_CHILD|WS_VISIBLE|WS_TABSTOP,
        CRect(0, 0, 80, 20), parWnd, m_nCtrlIDReset[i]);

    //Statistics
    m_pEditStatistics[i] = new CEdit();
    m_pEditStatistics[i]->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_READONLY,
        CRect(0, 0, 80, 20), parWnd, m_nCtrlIDStatistics[i]);
}

//设置字体格式
for (i=0; i<maxLoopNum; ++i) {
    int col = -1;
    int rowCnt = m_pListCtrl->GetItemCount(); // rowCnt == i
    m_pListCtrl->InsertItem(rowCnt, _T(""));

    m_pCheckEnable[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pCheckEnable[i]);

    m_pComboboxPort[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pComboboxPort[i]);

    m_pEditTime[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pEditTime[i]);

    m_pEditInfo[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pEditInfo[i]);

    //m_pStaticStatus[i]->SetFont(m_cf);
    m_pStaticStatus[i]->SetBold(TRUE, TRUE);
    m_pStaticStatus[i]->SetFont(_T("Calibri"), 14, TRUE);
    m_pListCtrl->SetItemEx(i, ++col, m_pStaticStatus[i]);

    m_pButtonStart[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pButtonStart[i]);

    m_pButtonReset[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pButtonReset[i]);

    m_pEditStatistics[i]->SetFont(m_cf);
    m_pListCtrl->SetItemEx(i, ++col, m_pEditStatistics[i]);
}

//+
this->UpdateWindow();

}

  • 写回答

2条回答 默认 最新

  • qq_42294263 2018-06-04 04:24
    关注

    主要是注意添加时机的问题:
    如果放在CView的OnCreate中创建CListCtrl是显示不出来的,原因是CView自身还没有创建好呢。
    可以在在CView的OnInitialUpdate方法中创建CListCtrl,如下图所示图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题