int CAboutDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here m_btnWnd.Create("你好",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);
    CFont*font=this->GetFont();
m_btnWnd.SetFont(font);

return 0;
}BOOL CAboutDlg::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}

解决方案 »

  1.   

    一般窗口创建时都发送WM_CREATE消息
    所以 OnCreate 是 捕获的WM_CREATE消息
    而对话框也是特殊的窗口,并增加了一个消息,即WM_INITDIALOG
    所以对话框不仅发送WM_CREATE,也发送WM_INITDIALOG
      

  2.   

    说来话长了,简而言之,生成顺序是1)new一个窗口类
    2)Create一个窗口。对话框窗口: 至于init么,那只是窗口的子窗(就是按钮)生成的机会,init必须在Create之后,因为必须先有父,然后才有子。3)如果不是对话框,那么等价的做法就是将子窗Create放到父窗的Create下。
      

  3.   

    是,void CMyDlg::OnButton1() 
    {
        m_mybutton.Create("我的按钮",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(20,20,120,60),this,201);
    }