代码如下:
CMyView.cpp
const int CHECK=100;
 
CMyView::OnCreateListBox()
{
   CCheckListBox *p = new CCheckListBox();
   p->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
             CRect(10,10,20,20),
             this,
             CHECK);
}
运行时当我点MENU中的Create时,总是报错,请高手指点迷津

解决方案 »

  1.   

    报什么错?const int CHECK=100; 最好用id号定义对话框那个定义一下。
      

  2.   

    you must Specifies the style either LBS_OWNERDRAWFIXED or LBS_OWNERDRAWVARIABLE.Like this:
    p->Create(LBS_OWNERDRAWFIXED WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL,................);
      

  3.   

    还是不行呀
    CMyView.cpp
    const int CHECK=100;
     
    CMyView::OnCreateListBox()
    {
       CCheckListBox *p = new CCheckListBox();
       p->Create(WS_CHILD|WS_VISIBLE|WS_BORDER,
                 CRect(10,10,20,20),
                 this,
                 CHECK);
    }
    有没有例子呀,拜托了
      

  4.   

    还是不行呀
    CMyView.cpp
    const int CHECK=100;
     
    CMyView::OnCreateListBox()
    {
       CCheckListBox *p = new CCheckListBox();
       p->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LBS_OWERDRAWVARIABLE,
                 CRect(10,10,20,20),
                 this,
                 CHECK);
    }
    有没有例子呀,拜托了
      

  5.   

    根据我的跟踪结果,有三点:
    1. Style必须包括LBS_OWNERDRAWFIXED | LBS_HASSTRINGS;
    2. 必须使用成员变量或全局变量,建议使用成员变量如下:
    class CMyView()
    {
    ...
    CCheckListBox p;//或者使用指针形式:CCheckListBox *p;}
    3. 在调用创建控件时,应该判断是否已经创建,否则第二次创建会出错:
    CMyView::OnCreateListBox()
    {
    if (p.m_hWnd == NULL)
    {
    p.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS,
    CRect(10,10,200,200), this, CHECK);
    p.AddString("TEST");
    }
    }
    如果使用指针:
    CMyView::OnCreateListBox()
    {
    if (p == NULL)
    {
    p = new CCheckListBox;
    p->Create(WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS,
    CRect(10,10,200,200), this, CHECK);
    p->AddString("TEST");
    }
    }//注意,使用指针必须在CMyView的建构函数中赋值为NULL,在析构函数中释放。