MFC - 管理上下控件

步骤 1 − 添加用于旋转控件的控件变量m_spinControl,其设置如以下快照所示。

管理上下控件

步骤 2 − 为编辑控件添加控件变量m_editControl。

m_editControl

步骤 3 − 添加旋转按钮 UDN_DELTAPOS 事件的事件处理程序。

管理上下控件

步骤 4 − 更新 OnInitDialog(),如以下代码所示。

BOOL CMFCSpinButtonDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();

   // 设置该对话框的图标。 框架会自动执行此操作
   // 当应用程序的main主窗口不是对话框时
   SetIcon(m_hIcon, TRUE);        // Set big icon
   SetIcon(m_hIcon, FALSE);      // Set small icon
   // TODO: Add extra initialization here
   m_spinControl.SetRange(0, 100);
   m_spinControl.SetPos(50);
   m_editControl.SetWindowText(L"50");
   return TRUE; // 返回 TRUE 除非您将焦点设置到控件
}

步骤 5 − 下面是自旋控件事件的实现。

void CMFCSpinButtonDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {
   LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
   // TODO: 在此处添加您的控件通知处理程序代码
   // 声明一个指向 CSpinButtonCtrl 的指针;
   CSpinButtonCtrl *Spinner;
   // Get a pointer to our spin button
   Spinner = reinterpret_cast<CSpinButtonCtrl *>(GetDlgItem(IDC_SPIN1));
   // 查明是否是我们的旋转按钮发送了消息
   // 这个条件语句看起来没什么用,但那又怎样呢?
   if (pNMHDR -> hwndFrom == Spinner -> m_hWnd) {
      // 获取旋转按钮的当前值
      int CurPos = pNMUpDown→iPos;
      // 将值转换为字符串

      CString str;
      str.Format(L"%d", CurPos);
      // 将值显示到随附的编辑框中
      m_editControl.SetWindowText(str);
   }
   *pResult = 0;
}

步骤 6 − 当上面的代码被编译并执行时,您将看到以下输出。

管理updown(上下)控件

❮ mfc_windows_controls.html