在mfc开发中,我遇到了一个需求,具体逻辑是:浏览器门户调用别人的websocket,websocket调用我的dll库,我的dll库会有一个mfc对话框。要求是对话框弹出后浏览器无法做别的操作,于是我想到了mfc的模态弹框,但是模态只对调用方的线程起作用,但是直接调用方是这个websocket。于是我先使用AttachThreadInput函数将调用方线程和浏览器门户的活动线程关联起来后,再通过domodal弹出的我模态对话框。通过这种方式成功实现了我的需求,但是只有第一次调用成功实现了这个需求,后面再次调用时对话框只是弹出了并没有实现模态。除非我重启websocket服务才能再次实现。
DWORD dwForeID, dwCurID;
HWND hForeWnd = ::GetForegroundWindow();//获取当前活动窗口的窗口句柄,
g_hForeWnd = NULL;
g_hForeWnd = hForeWnd;
dwForeID = ::GetWindowThreadProcessId( hForeWnd, NULL );
dwCurID = ::GetCurrentThreadId();
::AttachThreadInput( dwForeID, dwCurID, TRUE);
CPin secpin;
secpin.DoModal();
::AttachThreadInput( dwForeID, dwCurID, FALSE);
这是我的代码片段,其中CPin是我的对话框的类。且其中AttachThreadInput没有报错,为什么会出现只有第一次才能成功的情况呢,或者有什么别的方法能够以实现我的需求吗?