我的一个应用程序是基于对话框的(只有一个对话框,没有其他子对话框),该对话框(主窗口)显示后,用户就不能操作桌面上的其他程序,如何实现????

解决方案 »

  1.   

    对话框设置为TOP,让鼠标移动不出对话框区域,屏蔽一些组合键,ALT+TAB,WIN+D,ALT+CTRL+DEL
      

  2.   

    这个没试过 我到是有个笨方法。 写个hook,判断鼠标位置,如果是对话框以外屏蔽掉键盘 鼠标单击
      

  3.   

    1、建立链表,把所有顶层窗口的hWnd保存起来
    2、遍历这个链表,向所有的这些窗口::EnableWindow(hWnd,FALSE);
    3、当退出时,再遍历整个链表,::EnableWindow(hWnd,TRUE);
      

  4.   

    我已经试过我的方法了,可行!而且360还报警了!
    OnButton1禁用所有其它窗口
    OnButton2启用其它所有窗口void CTstDisableDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    HWND hWnd = ::GetDesktopWindow();
    HWND hWndDesktop = hWnd;
    for (hWnd = ::GetWindow(hWnd,GW_CHILD);hWnd;hWnd=::GetWindow(hWnd,GW_HWNDNEXT))
    {
    if (hWnd!=m_hWnd && hWnd!=hWndDesktop)
    {
    m_cListWnd.AddTail((CObject*)hWnd);
    }
    } POSITION pos;   
    for( pos = m_cListWnd.GetHeadPosition(); pos != NULL; )   
    {
       hWnd = (HWND)m_cListWnd.GetNext( pos );
       ::EnableWindow(hWnd,FALSE);
    }}void CTstDisableDlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    HWND hWnd;
    POSITION pos;   
    for( pos = m_cListWnd.GetHeadPosition(); pos != NULL; )   
    {
    hWnd = (HWND)m_cListWnd.GetNext( pos );
    ::EnableWindow(hWnd,TRUE);
    }
    }
      

  5.   

    将对话框定义成模态对话框就可以了
    CDialogproty dlg;   dlg.DoModal();