您不需要创建 CDialog。您只需要任何窗口来处理消息。任何与 TWAIN 打交道的事情都最好在其自己的线程中处理。因此,为 MFC 创建一个新线程(通过 CWinThread 或 AfxBeginThread)。在该线程中,创建一个 CWnd。这个 CWnd 的 HWND 是您将传递给 DSM 的所有调用等的那个。每个线程都有自己的消息队列,所以在那里设置一个。通过 PostMessage、SendMessage、PostThreadMessage 等与该线程通信。假设您发布一条消息MY_SPECIAL_MESSAGE
以表示正在获取图像,您的消息循环应该如下所示:
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
if (msg.message == MY_SPECIAL_MESSAGE)
{
GetImageFromTWAIN();
}
else if (!ProcessTWAINMessage(&msg)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
一定要查看 TWAIN 开发工具包中的源代码,以详细了解这一切是如何工作的。TWAIN 是一个狡猾的生物。
相信我,这是最好的方法。您可以使用主线程的消息队列在单个线程中完成所有操作,但应避免这样做。