偶还是菜鸟,求教一个问题。
怎么创建和销毁一个非模态对话框(已有父窗口)
想实现的功能是在CListCtrl中右键弹出选择行记录属性对话框,在不关闭对话框的情况下选择另一行记录,刷新选择记录属性到对话框,跪求实现啊

解决方案 »

  1.   

    假设C_XXXDialog是一个与resource关联好了的Class
    C_XXXDialog* pDlg = new C_XXXDialog();
    pDlg->Create(IDD_DIALOG_XXX,this);
    pDlg->ShowWindow(SW_SHOW);这样创建的就是非模态对话框了,pDlg->ShowWindow(SW_SHOW)是为了让该对话框show出来
      

  2.   

    销毁的话用pDlg。DestroyWindow()就好了
    楼上的两位都说的有道理,应该从基础学起
      

  3.   

    楼上说的是如何创建非模态对话框。创建后要把句柄给保存下,当你选择另一行的时候,根据窗体的句柄更新内容。
    另外就是非模态对话框的销毁问题,重载其PostNcDestroy和OnCancel函数。参见网上非模态对话框的销毁。
    void CSGChatDlg::PostNcDestroy() 
    {
    // TODO: Add your specialized code here and/or call the base class
    CDialog::PostNcDestroy();
    delete this;
    }void CSGChatDlg::OnCancel()
    {
    DestroyWindow();
    }
      

  4.   

    3楼的方法会出现一闪而过的现象,应该还需要加入消息循环吧。
    我是在主窗口创建的对话框对象 ,在子对话框(非模态对话框类)中重载PostNcDestroy()和OnCancel()函数时,delete this 出了错误。
      

  5.   

    创建就是通过new和create
    销毁通过DestroyWindow和Delete
    这篇文章中的Tab选项页就是通过非模态对话框实现的
    你可以参考一下
    http://blog.csdn.net/xianglitian/archive/2010/05/23/5618814.aspx
      

  6.   

    CXXDlg* pDlg = new CXXDlg;
    pDlg->Create(...);
    pDlg->ShowWindow(SW_SHOW);...pDlg->DestroyWindow();
    delete pDlg;
    pDlg = NULL;