本帖最后由 VisualEleven 于 2015-02-06 10:36:12 编辑

解决方案 »

  1.   

    照理不会是父窗口抢焦点吧, 我做了个小demo, create  WS_POPUP 的子窗口, 之后子窗口一直在父窗口前边, 无论怎么设父窗口焦点, 怎样SetForegroundWindow 或者 bringwindowToTop 父窗口都无法将子窗口放到父窗口后边。 也就是应该:
    窗口机制就是 子窗口的 zorder  一定在父窗口前边。我的代码是:先将父窗口置前, 再创建 WS_POPUP 的子窗口,  再运行自己 的 domodal
    即 先将父窗口 不可用, 再将子窗口置顶, 运行GetMessage的消息队列。这个看起来是没问题的。
    在很多机器上跑都没问题, 在部分机器上也是低概率出现。
    已经困扰很久了, 有那位大神指点下~~谢谢
      

  2.   

    也是用win32 创建的, CreateWindow 自己注册的窗口类, 有WS_POPUP属性 和指定父窗口。 如下:
        HINSTANCE inst = (HINSTANCE)::GetModuleHandle(NULL);
        WNDCLASS wc = {0};
        wc.lpszClassName = _T("ui");
        wc.lpfnWndProc = WndProc;
        wc.hInstance = inst;
        wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
        DWORD style = WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
        DWORD exStyle = WS_EX_LEFT | WS_EX_LTRREADING
                          | WS_MINIMIZEBOX | WS_SYSMENU;
        ::RegisterClass(&wc);
        hwnd_ = ::CreateWindowEx(exStyle, wc.lpszClassName, GetText(), style,
            left, top, right - left, bottom - top,
            parent, 0, inst, this);
    关键是在大多数机器都不能出现的。 少数机器低概率出现, 很难定位问题, 可能是某些函数在某些情景下不正确。
    求助~~~