使用适当的Slider Control和对值的UpdatingData的机制有很好的理解时,我遇到了问题。这是一个非常简单的程序,应该可以帮助我理解问题。
看一下我的代码:
// TestDialog.cpp : implementation file
//
#include "stdafx.h"
#include "ControlsandVariables.h"
#include "TestDialog.h"
#include "afxdialogex.h"
// TestDialog dialog
IMPLEMENT_DYNAMIC(TestDialog, CDialog)
TestDialog::TestDialog(CWnd* pParent /*=NULL*/)
: CDialog(TestDialog::IDD, pParent)
, editbox_value(0)
, slider_value(0)
{
}
TestDialog::~TestDialog()
{
}
void TestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SLIDER1, slider_ctrl);
DDX_Text(pDX, IDC_EDIT1, editbox_value);
DDV_MinMaxInt(pDX, editbox_value, 0, 99);
DDX_Slider(pDX, IDC_SLIDER1, slider_value);
}
BEGIN_MESSAGE_MAP(TestDialog, CDialog)
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER1, &TestDialog::OnNMCustomdrawSlider1)
ON_EN_CHANGE(IDC_EDIT1, &TestDialog::OnEnChangeEdit1)
END_MESSAGE_MAP()
// TestDialog message handlers
void TestDialog::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: Add your control notification handler code here
int value = slider_ctrl.GetPos();
editbox_value = value;
UpdateData(TRUE);
//editbox_value = slider_value;
//UpdateData(TRUE);
*pResult = 0;
}
我同时更改滑块和编辑框上的值时遇到问题。如果我使用UpadateData(TRUE)
滑块的值正在更改,但编辑框保持不变。
另一方面,如果我将UpdateData (FALSE)
滑块设置为不变,但editbox的值正在更改,并且迭代后会恢复为0.如何实现滑块和editbox都相互依赖而更改其值的状态。我想提一下,这是MFC库的WindowsEmbedded 2013版本,不适用于本地Windows。
你必须为创建两个控制类型变量CEdit
和CSliderCtrl
。例:
m_cedit
m_slider
笔记:
CSliderCtrl
发WM_HSCROLL
信息CEdit
Number属性设置为True将以下函数添加到Dlg标头类:
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnEnChangeEdit();
在CPP中:
BEGIN_MESSAGE_MAP(CMFCSpinerDlg, CDialogEx)
ON_WM_HSCROLL() // Called when Slider is scrolled
ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit) // Called when CEdit change value
END_MESSAGE_MAP()
void CMFCSpinerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CSliderCtrl* pSlider = reinterpret_cast<CSliderCtrl*>(pScrollBar);
// You can have multiple sliders: Check which one sent the notification
if (pSlider == &m_slider)
{
CString strSliderValue;
int iValue = m_slider.GetPos(); // Get Slider value
strSliderValue.Format("%d", iValue);
m_cedit.SetWindowText(strSliderValue); // Change CEdit Value
}
}
void CMFCSpinerDlg::OnEnChangeEdit()
{
CString strEditValue;
m_cedit.GetWindowText(strEditValue);
int iCeditValue = atoi(strEditValue);
// do other check on value ...
m_slider.SetPos(iCeditValue); // set Slider value
}
通过做这个 :
CSliderCtrl
值->CEdit
更改CEdit
值->CSliderCtrl
更改本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句