遇到一个怪问题,create一个对话框,
ptrTestDlg = new TestDlg(this);
ptrTestDlg ->Create(IDD_TESTDLG,this);
ptrTestDlg ->UpdateData(TRUE);
ptrTestDlg ->RedrawWindow();
ptrTestDlg ->CenterWindow(this);
ptrTestDlg ->ShowWindow(SW_SHOW);
点击ok按钮后hide掉然后show主窗口,但现在奇怪的是hide掉以后好像主窗口失去了焦点,点击鼠标没有任何反映,然后点击其他\程序,或者点击任务栏,这是点击主窗口,就可以用了,不知道什么原因,也没做什么其他处理啊。

解决方案 »

  1.   

    OK按钮内部的代码,不能使用OnOk函数必须使用消息传递让ptrTestDlg的父窗口处理
      

  2.   

    用SetForegroundWindow和SetFocus函数试一试
      

  3.   

    在ok处理函数中向ptrTestDlg的父窗口发消息,在ptrTestDlg的父窗口中处理后再向MainDlg发消息处理的,是这样处理有问题吗?
      

  4.   

    SetForegroundWindow,SetFocus,Invalidate,SetActiveWindow我都试了,不行,郁闷
      

  5.   

    昨天想了一天也没想出来是为什么,郁闷啊,debug时又没什么问题,搞晕了
      

  6.   

    IsTopParentActive()返回值是什么意思?我看了一下我的返回值是0
      

  7.   

    汗,MS根本没有提供过IsTopParentActive这个API。楼主用的是谁实现的函数?
      

  8.   


    BOOL CWnd::IsTopParentActive() const
    {
    ASSERT(m_hWnd != NULL);
    ASSERT_VALID(this); return CWnd::GetForegroundWindow() ==
    GetTopLevelParent()->GetLastActivePopup();
    }用VC在你的VC目录(...\MICROSOFT VISUAL STUDIO\VC98\MFC)下搜索IsTopParentActive就能找到源码
      

  9.   

    CWnd里面有这个函数啊,我的新窗口就是一个普通的窗口。我创建了一个主窗口然后创建了两个Child类型的子窗口,而TestDlg就是一个Login对话框,属性与主对话框相同,在显示login以及隐藏login的时候,主窗口肯定只有一个
      

  10.   

    焦点不对吧
    有两种方法可以获得焦点: 
      1.打开资源编辑器中的对话框模板,在Layout菜单中选择TabOrder选项。按对话框中的控制来重新排列这些控制的tab顺序。 
      2.用文本编辑器(比如:记事本等)直接打开*.rc文件,会看到各个控件资源以文本的方式按加入时的顺序排列如下: 
      BEGIN 
       EDITTEXT IDC_EDIT 1,20,19,86,21,ES_ AUTOHSCROLL 
       COMBOBOX IDC_COMBO 1,15,57,92, 18,CBS_DROPDOWN|CBS_SORT|WS_ VSCROLL|WS_TABSTOP 
      END 
      排在前面的(比如本例的EDITTEXT)就是首先获得焦点的空间,只要改变其排列顺序即可。
      

  11.   

    还有一个奇怪的问题,我在在该对话框加了一个按钮test,一个Static控件test static,结果字都显示不出来,我已经updatedata了,奇怪
      

  12.   

    程序内部附值,一般应该是updatedata(FALSE);
      

  13.   

    把TestDlg改为无模式对话框,
    把ptrTestDlg = new TestDlg(this);中的this 去掉,然后试