我按照webber84(***闭关修炼中***)所说
想让对话框中的slider控件支持WM_LBUTTONUP消息:
方法如下:
"NM_RELEASEDCAPTURE是slider控件发送给父窗口的通知消息,它表示slider中发生了一些事件父窗口可能关心的事情,提示父窗口进行相应的处理。而像WM_MOUSEMOVE这种消息一般你都不会处理的,所以就没有必要发送到父窗口去了。
如果你想自己处理这些消息,可以派生一自己的slider来处理:在insert中选new class,在base class中选CSliderCtrl,创建一个派生类,比如叫CMySliderCtrl。在对话框上放一个slider控件,在classwizard中选member variables页,点add variable给slider添加一个control类型的成员变量(variable type选CMySlider)。这样对话框中的sliber就用你派生的类来创建了,你可以在CMySlider处理各种消息。"但是在这个CMySlider类中加入了WM_LBUTTONUP消息支持后
如何向对话框中的EDIT控件赋值呢?
我用如下方法编译通过,但是赋值时出错
void CMySlider::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTestDLG *aaa = new CTestDLG();
//CTestDLG *aaa;
aaa->m_AlphaVal=20; //m_AlphaVal是EDIT控件变量
aaa->UpdateData();
CSlider::OnLButtonUp(nFlags, point);
}
想让对话框中的slider控件支持WM_LBUTTONUP消息:
方法如下:
"NM_RELEASEDCAPTURE是slider控件发送给父窗口的通知消息,它表示slider中发生了一些事件父窗口可能关心的事情,提示父窗口进行相应的处理。而像WM_MOUSEMOVE这种消息一般你都不会处理的,所以就没有必要发送到父窗口去了。
如果你想自己处理这些消息,可以派生一自己的slider来处理:在insert中选new class,在base class中选CSliderCtrl,创建一个派生类,比如叫CMySliderCtrl。在对话框上放一个slider控件,在classwizard中选member variables页,点add variable给slider添加一个control类型的成员变量(variable type选CMySlider)。这样对话框中的sliber就用你派生的类来创建了,你可以在CMySlider处理各种消息。"但是在这个CMySlider类中加入了WM_LBUTTONUP消息支持后
如何向对话框中的EDIT控件赋值呢?
我用如下方法编译通过,但是赋值时出错
void CMySlider::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTestDLG *aaa = new CTestDLG();
//CTestDLG *aaa;
aaa->m_AlphaVal=20; //m_AlphaVal是EDIT控件变量
aaa->UpdateData();
CSlider::OnLButtonUp(nFlags, point);
}
{
// TODO: Add your message handler code here and/or call default
CTestDLG *aaa = new CTestDLG();
//CTestDLG *aaa;
aaa->m_AlphaVal=20; //m_AlphaVal是EDIT控件变量
aaa->UpdateData();
CSlider::OnLButtonUp(nFlags, point);
}这样写不行, 更新其它控件应该由父窗口来完成
可以发消息通知父窗口
能详细说一下吗?
多谢啦!
{
CTestDLG* aaa = (CTestDlg*)GetParent();
aaa->m_iAlpha = 20; //m_AlphaVal是EDIT控件变量
aaa->UpdateData(FALSE);
CSliderCtrl::OnLButtonUp(nFlags, point);
}
注意:
1. CTestDLG* aaa = new CTestDLG();并不是得到了SliderCtrl的父窗口(即运行时显示的对话框),得到的只是一个与父窗口同类型的窗口指针,它并没有真正属于某个窗口。
(CTestDLG*)GetParent()返回的是父窗口(即运行时显示的对话框)的指针。
2. UpdateData()、UpdataData(TRUE)、UpdateData(FALSE)的区别:
UpdateData()与UpdateData(TRUE)完全一样,是将显示在控件上的值付给相关联的变量。
UpdateData(FALSE)是将变量值由相关联的控件显示出来。
要在CTestDlg类定义前加上 #include "MySlider.h"即:在TestDlg.h文件上方。
在CMySlider定义前加上 #include "TestDlg.h"
将拖到对话框中的slider控件设为CMySlider类型。因为这样才能响应CMySlider::OnLButtonUp。
可以这样进行:打开对话框,然后按住Ctrl键,用鼠标双击Slider控件,会谈出一个对话框。
在Member variable name中为控件取一个名字。
在Category中选择Control。
在Variable Type中选择CMySlider