我现在用wizard生成了一个Dialog-MFC project。如果我想动态创建一个控件,比如说是静态框之类的,在该对话框类里我可以直接编写代码,比如修改OnOK()
.............
CStatic m_static;
m_static.Create(_T("在对话框类下创建静态框",WS_CHILD|WS_VISIBLE|SS_SUNKEN,
                        CRect(0,200,100,250),pWnd,IDC_STATIC);
m_static.ShowWindow(SW_SHOW);
//CDialog OnOK();
.............我的问题是,我现在必须在另一个类里面动态创建该控件。该类为一般类。在调用该类的函数之前,对话框已经生成了。举例来说,我在对话框上新增加一个botton,响应为OnTest()
.........
CWnd* pWnd=this;
CMyControl mMyControl;
mMyControl.AddNewControl(pWnd);
.........
在CMyControl里面,我的AddNewControl(CWnd* pWnd)代码为:
..........
CStatic m_mystatic;
m_mystatic.Create(_T("在另一个类创建静态框",WS_CHILD|WS_VISIBLE|SS_SUNKEN,
                        CRect(200,200,400,250),pWnd,IDC_STATIC);
m_mystatic.ShowWindow(SW_SHOW);
..........
但是,程序调试通过,为什么执行时候就报Access violation呢?
设置断点到AddNewControl(CWnd* pWnd)里面,是Create出错,不知道怎么办才好?

解决方案 »

  1.   

    参考一个例子吧
    http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=65&show=0
      

  2.   

    hehe ,大致原理还有点模糊,一看竟然是线程,吓我一跳(不好意思,菜鸟都是这样的)。细细一看,离我的问题好像没有牵念之处啊。
      

  3.   

    我到王进指点的网站看了看,发现杨宁写的一个《查找MFC对话框程序的主窗口类名》挺有用的,推荐在此:
    http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=49&show=0
    谢谢王进
      

  4.   

    就是先声明一个控件变量,然后用create创建,设置你想要的风格
      

  5.   

    同意sdc_sh(sdc)的说法,我试过,可以。但最好用createEx(...)这样可以有更多的风格。