GetForegroundWindow这个函数有点问题,但是当我的窗口在最前面时它有时返回其他窗口的句柄,而有时候当我的窗口不是在最前面时它又返回我的窗口

解决方案 »

  1.   

    GetActiveWindow();或者看谁有焦点GetFocus();
      

  2.   

    GetActiveWindow()和点GetFocus()都是一样的,有时候可以有时候不行
      

  3.   

    我想要的功能是想金山词霸一样,当主体窗口在最前面时,左键点击托盘则隐藏主体窗口;当主体窗口隐藏或不在最前面时,左键点击托盘则显示主体窗口并置在最前面。但GetForegroundWindow、GetActiveWindow、GetFocus、GetTopWindow等函数都有问题,请问怎么解决?
      

  4.   

    那就这样解决看行不行
    把你想要隐藏或显示的主窗口的句柄hWnd 预先保存。然后需要显示时setactivewindow(hWnd)
    ,所作操作都用hWnd 来完成。
      

  5.   

    不是很明白,预先保存hWnd有什么用?我用的是SDK,每次窗口处理程序都会传句柄给我,不需要保存
      

  6.   

    if(IsIconic(hWnd) || !IsWindowVisable(hWnd))
    {
        ShowWindow(SW_MAXSIZE);
        SetForegroundWindow(hWnd);
    }
    else if(IsWindowVisable(hWnd) || !IsIconic(hWnd))
       ShowWindow(SW_MINISIZE);凭记忆写的,可能有错
      

  7.   

    BringWindowToTop 很多时候都不行, 用SetWindowPos最好
      

  8.   

    我想要的功能是想金山词霸一样,当主体窗口在最前面时,左键点击托盘则隐藏主体窗口;当主体窗口隐藏或不在最前面时,左键点击托盘则显示主体窗口并置在最前面。但GetForegroundWindow、GetActiveWindow、GetFocus、GetTopWindow等函数都有问题,请问怎么解决?
    =========================================
    请参考我的代码:(与金山词ba 托盘图标一样的效果)static BOOL g_bWndState=FALSE;//FALSE 窗口未显示 TRUE 窗口显示在最前LRESULT CAdslTDlg::OnNIClick(WPARAM wParam,LPARAM lParam)//托盘图标点击消息处理函数
    {

      if(wParam == IDI_NOTIFYICON2)//按的是本程序的图标
      {
        if(lParam == WM_LBUTTONDOWN)//鼠标左键铵下
        {
          if(!g_bWndState){ //如果窗口未显示
            this->ShowWindow(SW_SHOW);//显示窗口,自动显示在最前
            this->UpdateWindow();
            g_bWndState = TRUE;
          }
          else{ 如果窗口是显示状态
            this->ShowWindow(SW_HIDE);//隐藏窗口,
            g_bWndState = FALSE;
          }
        }
      }
      return 0;
    }
    ////楼主记着给分哦。托盘图标会处理吧?如果不行,我有个现成的小程序。
      

  9.   

    当主体窗口在最前面时,左键点击托盘则隐藏主体窗口;当主体窗口隐藏或不在最前面时,左键点击托盘则显示主体窗口并置在最前面。
    StarManJhh你说错了,当主体窗口不再最前面时,应该将主体窗口置在最前面,而不是隐藏!!