我想在单文档的窗口中显示控件,而不把它们放到对话框中,写了如下的程序,在OnDraw()中: CRect rect;
GetClientRect(&rect);

CTabCtrl Label;
if( !Label.Create( TCS_TABS | TCS_FIXEDWIDTH | WS_VISIBLE, 
rect, this, 0x1006) )
{
AfxMessageBox("Label Create Error!");
}另外为什么msdn上写着:
virtual BOOL Create(
  DWORD dwStyle,
  const RECT& rect,  <----  但这不能用 &rect ,却只能用 rect ???
...);
谢谢:)

解决方案 »

  1.   

    const RECT&的意思是一个RECT常量的引用,你要是用&rect就变成取地址了,当然就不对了另外你在OnDraw里创建控件不合理,应该在OnCreate函数里创建;你想想每当界面需要重画时,你就创建控件跟着删除,能不慢么?
    还有控件变量应该作为类成员变量出现,否则一旦OnCreate函数返回,你的控件就析构了最后,还应该响应WM_SIZE消息,like this:void CYourView::OnSize(UINT nType, int cx, int cy)
    {
       CView::OnSize(nType, cx, cy);
       
       youctrl.MoveWindow(0, 0, cx, cy);
    }

    }
      

  2.   

    我想把一个CTabTrl的控件直接放在单文档窗口里。但我把上边的程序放在oncreate()中,但还是不显示,是不是还有什么其它的后续操作,才能显示出来。另外,如果不放在ondraw()中,那么如果挪动窗口时,控件是不是会没了!
      

  3.   

    不能放在OnDraw中的,OnDraw在程序运行过程中会执行很多次,因此你的空间也被创建很多次,当然要浪费时间的.也可能导致其他问题,因此在OnCreate中创建.我没有创建TabCtrl,我这里是以个Button的创建:
    .h 文件中 定义
    CButton  m_Button;
    .cpp 文件中创建
    int CTempView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;

    // TODO: Add your specialized creation code here

    m_Button.Create(_T("My button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 
       CRect(10,10,100,30), this, 1); return 0;
    }
      

  4.   

    你不能用函数内局部变量来Create,因为函数结果你的局部变量就析构了,所以你什么也看不到
    用New或者在用类全局变量不要Create多次,保证在你的父窗口Create后任何时候Create你的控件一次就OK