小弟想在下列程序中的pMyDlg->DoModal()显示的窗口中
根据i是否等于6来决定是否显示窗口中ID为IDC_MYBUTTON的按钮。可是下面的程序在运行时出错(编译通过),哪位大虾能告诉我该怎么做吗?int i=6;
pMyDlg = new CMyDlg();
if (i==6)
{
   //不显示MyDlg中的ID 为 IDC_MYBUTTON 的按钮
   pMydlg->GetDlgItem(IDC_MYBUTTON)->ShowWindow(SW_HIDE);
}
else
{
   //显示MyDlg中的ID 为 IDC_MYBUTTON 的按钮
   pMydlg->GetDlgItem(IDC_MYBUTTON)->ShowWindow(SW_SHOW);
}
int nResponse = pMyDlg->DoModal();

解决方案 »

  1.   

    你new了一个dialog就是在堆上创建了,如果要对话框显示出来,new完要调用dlg.Create(...); 然后调用dlg.ShwoWindow(SW_SHOW); 来显示,也就是创建一个非模态对话框。
    如果你用DoModal(),就不要用new。 直接CMyDlg dlg;在栈创建对话框,然后调用 dlg.DoModal();就可以了。
      

  2.   

    GetDlgItem(IDC_MYBUTTON)->ShowWindow(SW_SHOW);把这句放在对话框的OnInitDialog中
      

  3.   


    int i = ...;
    CMyDlg* pDlg = new CMyDlg;
    pDlg->m_i = i;
    BOOL CMyDlg::OnInitDialog()
    {
      if(m_i == 6){
        GetDlgItem(IDC_MYBUTTON)->ShowWindow(SW_HIDE);
      }
      else{
         GetDlgItem(IDC_MYBUTTON)->ShowWindow(SW_NORMAL);
      }
    }