怎么得到“Spin”控件背后的“对话框”的实例或句柄?   我的程序中“对话框”里有“GroupBox”,“GroupBox”里有“Spin”控件。也就是怎么回朔到对话框实例??这个问题都是子类化惹的!!!好麻烦。或者我解决这个问题的思路错误。

解决方案 »

  1.   

    我是楼主!
       我碰到这样一个问题:对话框中的CSpinButtonCtrl控件不响应 WM_LBUTTONUP事件(我的用途比较特殊。要在鼠标点击Spin后离开时(也就是达到最大或最小值时)发送数据。)   我查阅了相关资料:
       打算用控件子类化解决问题。(用钩子处理好象也要涉及回朔到“Spin”控件背后最终的“对话框”的实例或句柄?)
      这个问题都是子类化惹的!!!好麻烦。    我这么做的:在文档类中调用了对话框类:CDataAcquisitionDlg dataAcqDlg;
        再定义了一个控件子类化CMySpin 类(继承了 CSpinButtonCtrl), CMySpin 类中定义了消息OnLButtonUp(UINT nFlags, CPoint point) ,在鼠标点击Spin后离开时((也就是达到最大或最小值时)发送数据。对话框中都使用CMySpin 控件。
       我的程序要在响应CMySpin 类的OnLButtonUp()事件时用到其实例变量(CMySpin m_SpinAbsorberSpeed;)所在对话框的一些变量。对几个不同的Spin分别传送不同的数据到单片机里去。
        所以出现了这些问题。连续在此开了几个帖子。或许我的思路是错误的,请高手帮忙出主意!
        为什么WM_LBUTTONUP消息只发给对话框,而Spin控件也是窗口,却不响应对话框类的OnLButtonUp()事件?是不是除了控件子类化或钩子就没有其他解决方案了?
        或许我解决这个问题的思路是错误的。如果哪位高手愿意帮忙,我可以把程序发给你们帮我看看。留下你们的Email地址。
      

  2.   

    首先,我试了一下,子类化的控件完全可以接收WM_LBUTTONUP消息,包括其他消息。可能你的方法不正确。从CSpinButtonCtrl继承子类CMySpin,对话框上添加SpinButton控件,添加控件变量:
    CSpinButtonCtrl m_Spinbutton;然后更改成:
    CMySpin m_Spinbutton;记得加上头文件:
    #include "MySpin.h"其次,对话框上的控件一般都是对话框的子控件,在子类化的CMySpin中可以通过GetParent()得到对话框的指针。最后,还是觉得你的方法有问题,处理SpintButton的UDN_DELTAPOS 通知消息不时挺好的吗?