首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在更改特定滑块时引发

在更改特定滑块时引发
EN

Stack Overflow用户
提问于 2011-09-01 19:47:51
回答 4查看 11.7K关注 0票数 11

我正在写一个基于C++ MFC对话框的应用程序,我的程序有很多滑块。我希望程序根据用户正在更改的Slider来调用函数。我尝试使用GetPos(),但到目前为止还不是很成功。有没有更简单的方法呢?

消息映射:

代码语言:javascript
复制
BEGIN_MESSAGE_MAP(CSerialPortDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    //ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
    ON_BN_CLICKED(IDC_READ_COMM, OnBnClickedReadComm)
    ON_WM_CLOSE()
    ON_BN_CLICKED(IDC_WRITE, OnBnClickedWrite)
    //ON_CBN_SELCHANGE(IDC_SENSORS, OnCbnSelchangeSensors)
    //ON_CBN_SELCHANGE(IDC_SENSOR_LIST, OnCbnSelchangeSensorList)
    ON_BN_CLICKED(IDC_GO, OnGo)
    ON_WM_TIMER()
    ON_BN_CLICKED(IDC_KILL_TIMER, OnBnClickedKillTimer)
    ON_BN_CLICKED(IDC_READ_TIMER, OnBnClickedReadTimer)
    ON_BN_CLICKED(IDC_WRITE_COMM, OnBnClickedWriteComm)
    ON_BN_CLICKED(IDC_TERMINATE, OnBnClickedTerminate)
    ON_BN_CLICKED(IDC_RUN, OnBnClickedRun)
    ON_CONTROL(NM_CLICK,IDC_BOOM_SLIDER, Write_Boom)
    ON_CONTROL(NM_CLICK,IDC_PITCH_SLIDER, Write_Pitch)
END_MESSAGE_MAP()

..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-01 22:15:48

滑块控件在水平或垂直滚动时发送WM_HSCROLL或WM_VSCROLL通知。在对话框中捕获它们,然后您可以调用所需的函数,具体取决于发送通知的人。

代码语言:javascript
复制
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)  
    //...  
    ON_WM_HSCROLL()  
    //...   
END_MESSAGE_MAP()  


//////////////////////////
// nSBCode: The operation performed on the slider  
// nPos: New position of the slider  
// pScrollBar: The scrollbar (slider ctrl in this case) that sent the notification  

void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)  
{  
    CSliderCtrl* pSlider = reinterpret_cast<CSliderCtrl*>(pScrollBar);  

    // Check which slider sent the notification  
    if (pSlider == &c_Slider1)  
    {  
    }
    else if (pSlider == &c_Slider2)  
    {  
    }  

    // Check what happened  
    switch(nSBCode)
    {
    case TB_LINEUP:  
    case TB_LINEDOWN:  
    case TB_PAGEUP:  
    case TB_PAGEDOWN:  
    case TB_THUMBPOSITION:  
    case TB_TOP:  
    case TB_BOTTOM:  
    case TB_THUMBTRACK:  
    case TB_ENDTRACK:  
    default:  
        break;  
    }

//...  
}  
`
票数 21
EN

Stack Overflow用户

发布于 2011-09-01 22:16:40

我想我想通了。你所说的滑块通常称为“滚动条”。您可能正在寻找WM_VSCROLL消息。如上所述,"lParam:如果消息是由滚动条发送的,则此参数是滚动条控件的句柄。“

另请参阅CWnd::OnVScroll

票数 3
EN

Stack Overflow用户

发布于 2015-02-28 02:11:27

代码语言:javascript
复制
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)  
//...  
    ON_WM_HSCROLL()  
//...   
END_MESSAGE_MAP()  


void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    CSliderCtrl *ACSliderCtrl = (CSliderCtrl *)pScrollBar;
    int nID = ACSliderCtrl->GetDlgCtrlID();
    int NewPos = ((CSliderCtrl *)pScrollBar)->GetPos();
    CWnd *ACWnd = GetDlgItem(nID);


    switch (nID)
    {
        default:
            break;

        case IDC_SLIDER1:
            m_edit1.Format( "%d", NewPos );
            UpdateData(FALSE);
            break;
    }

    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7269834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档