// FZSS2Dlg.cpp : implementation file #include "stdafx.h" #include "FZSS2Dlg.h" IMPLEMENT_DYNAMIC(CFZSS2Dlg, CDialog) //CFZSS2Dlg::CFZSS2Dlg(CWnd* pParent /*=nullptr*/) // : CDialog(IDD_FZSS2_DLG, pParent) // , m_dOffFrWall(0) // , m_dEl(0) // , m_dInThick(20) // , m_dOutThick(10) //{ // //} CFZSS2Dlg::CFZSS2Dlg(const std::vector& arWidthd, double dOffFrWall, double dEl, double dInThick, double dOutThick, CWnd* pParent) : CDialog(IDD_FZSS2_DLG, pParent) , m_arWidthd(arWidthd) , m_dOffFrWall(dOffFrWall) , m_dEl(dEl) , m_dInThick(dInThick) , m_dOutThick(dOutThick) { } CFZSS2Dlg::~CFZSS2Dlg() { } void CFZSS2Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT2, m_dOffFrWall); DDX_Text(pDX, IDC_EDIT10, m_dEl); DDX_Text(pDX, IDC_EDIT3, m_dInThick); DDX_Text(pDX, IDC_EDIT6, m_dOutThick); DDX_Control(pDX, IDC_LIST1, m_ListCtrl); DDX_Control(pDX, IDC_EDIT1, m_EditW); } BEGIN_MESSAGE_MAP(CFZSS2Dlg, CDialog) ON_BN_CLICKED(IDOK, &CFZSS2Dlg::OnBnClickedOk) ON_NOTIFY(NM_DBLCLK, IDC_LIST1, &CFZSS2Dlg::OnDblclkList) ON_EN_KILLFOCUS(IDC_EDIT1, &CFZSS2Dlg::OnKillFocus) END_MESSAGE_MAP() BOOL CFZSS2Dlg::OnInitDialog() { CDialog::OnInitDialog(); initCtrls(); UpdateData(FALSE); return TRUE; } void CFZSS2Dlg::initCtrls() { m_ListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW); m_ListCtrl.EnableToolTips(TRUE); CRect rect; m_ListCtrl.GetClientRect(&rect);// 获取编程语言列表视图控件的位置和大小 m_ListCtrl.InsertColumn(0, _T("分段数"), LVCFMT_LEFT, rect.Width() / 2); m_ListCtrl.InsertColumn(1, _T("宽度"), LVCFMT_LEFT, rect.Width() / 2); CString strNum(_T("")); for (int i(0); i < m_arWidthd.size(); ++i) { strNum.Format(_T("第%d段"), (i + 1)); m_ListCtrl.InsertItem(i, strNum); } CString strWidth(_T("")); for (int i(0); i < m_arWidthd.size(); ++i) { strWidth.Format(_T("%.2f"), m_arWidthd.at(i)); m_ListCtrl.SetItemText(i, 1, strWidth); } } void CFZSS2Dlg::OnBnClickedOk() { CString strW(_T("")); m_arWidths.clear(); for (int i(0); i < m_arWidthd.size(); ++i) { strW = m_ListCtrl.GetItemText(i, 1); m_arWidths.push_back(strW); } OnOK(); } void CFZSS2Dlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; CRect rc; m_Row = pNMListView->iItem;//获得选中的行 m_Col = pNMListView->iSubItem;//获得选中列 int n = m_ListCtrl.GetItemCount();//获取当前一共多少行 if (pNMListView->iSubItem < -1) //如果选择的是子项; { return; } m_ListCtrl.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得子项的RECT; m_EditW.SetParent(&m_ListCtrl);//转换坐标为列表框中的坐标 m_EditW.MoveWindow(rc);//移动Edit到RECT坐在的位置; m_EditW.SetWindowText(m_ListCtrl.GetItemText(m_Row, m_Col));//将该子项中的值放在Edit控件中; m_EditW.ShowWindow(SW_SHOW);//显示Edit控件; m_EditW.SetFocus();//设置Edit焦点 m_EditW.ShowCaret();//显示光标 m_EditW.SetSel(-1);//将光标移动到最后 if (m_Row == n - 1) { m_ListCtrl.InsertItem(m_Row + 1, _T("")); } } void CFZSS2Dlg::OnKillFocus() { CString tem; m_EditW.GetWindowText(tem); //得到用户输入的新的内容 m_ListCtrl.SetItemText(m_Row, m_Col, tem); //设置编辑框的新内容 m_EditW.ShowWindow(SW_HIDE); //隐藏编辑框 } void CFZSS2Dlg::getUserInputData(std::vector & arWidths) { arWidths.clear(); arWidths.assign(m_arWidths.begin(), m_arWidths.end());//赋值 return; }