我想创建一个旋钮的类,然后供自己或别人调用。效果应该像ActiveX那样的,只不过ActiveX需要注册,这点不太好,所以我想自己创建一个类,然后在这个类中实现具体的绘图和其它消息响应。我开始做的时候就是新建一个MFC的Dialog然后在这个工程中通过"New Class"这个向导来创建一个新类CKnob,派生自CView类。但是在调用时出现了一个错误:
'CKnob::CKnob' : cannot access protected member declared in class 'CKnob'
看了看它自动生成的代码:
class CKnob : public CView
{
protected:
CKnob();           // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CKnob)
...
}
想想也是。
但我在用别人提供的类的时候一般都是类似这样声明的:CKnob m_Knob;都没有问题。请问该如何解决呢?如果用CKnob *m_pKnob这样,然后再动态创建的话也行,但那样乱起八遭的代码一大堆,太麻烦,看起来也不爽。请问高手们如果遇到我上面的那种需求是如何解决的,谢谢!!

解决方案 »

  1.   

    构造函数为什么使用protected呢,不想让外界使用吗?
    那就定义一个静态成员函数来创建对象吧.
      

  2.   

    public:
    CKnob();    
    ...即可
      

  3.   

    谢谢,改完之后确实症状消失。我在调用时如下:
    m_Knob.Create( NULL, "HI", WS_CHILD | WS_VISIBLE, CRect( 0, 0, 100, 100 ), this, 0 );运行程序时那个窗口出现了,但是在关闭对话框时出现了一个错误:_CrtIsValidHeapPointer(pUserData);
    估计是新派生的类没有能够释放窗口的资源或其它原因:
    默认:
    CKnob::~CKnob()
    {

    }
    请问高手们有没有知道该如何解决的?
    谢谢!!