Вам не нужно создавать CDialog. Вам просто нужно любое окно для обработки сообщений. Все, что связано с TWAIN, лучше всего обрабатывать в своем собственном потоке. Итак, создайте новый поток для MFC (через CWinThread или AfxBeginThread). В этой теме создайте CWnd. HWND этого CWnd - это тот, который вы передадите со всеми вызовами в 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 - хитрое существо.
Поверь мне, это лучший подход. Вы можете сделать все это в одном потоке, используя очередь сообщений вашего основного потока, но этого следует избегать.