複数ページスキャンできるようにする

概要

とりあえず、一度に複数ページをスキャンできるようにします。

今回でADF付のスキャナなどから複数のページをスキャンすることができるようになります。

 

ソース

CMainFrame::NativeXferのcase文のTWRC_XFERDONEの部分を変更します。

case TWRC_XFERDONE:
    pDoc->AddBitmap((TW_UINT32)twBitmap);
    nCount = pDoc->GetCount();
    pDoc->SetCurrentPage(nCount);
    InvalidateRect(NULL,TRUE);

    if(DoEndXfer()){
        NativeXfer();
    }
    else{
        DisableDS();
        CloseDS();
    }
    break;

TWRC_XFERDONEが返ってきたときに、カウンタをチェックしてまだスキャンするものがあったらスキャンを繰り返します。

スキャンするものがない場合にはスキャンを終了させます。

CMainFrame::DoEndXferもカウンタをチェックするように変更します。

BOOL CMainFrame::DoEndXfer()
{
    TW_PENDINGXFERS twPendingXfer;
    TW_INT16 twRC;

    twRC = (*theApp.m_pDSM_ENTRY)(&theApp.m_AppID,&theApp.m_DSID,DG_CONTROL,DAT_PENDINGXFERS,MSG_ENDXFER,(TW_MEMREF)&twPendingXfer);

    if(twPendingXfer.Count != 0) return TRUE;

    return FALSE;
}

以上で複数ページのスキャンはできるようにはなりますが、このままではスキャンしたページを見ることができないので見れるように変更します。

メニューに下図のような感じでメニューを作ります。

前ページ、次ページで表示するイメージを変えられるようにしましょう。

先頭ページを表示しているときは、メニューの前ページがグレーアウトするようにしましょう。

同様に、最後のページを表示しているときは、メニューの次ページがグレーアウトするようにします。

実行ファイルのみ:Scan.lzh (164k Byte) -Version 1.0.0.1-

VC6プロジェクト:Src1001.LZH(118k Byte) -Version 1.0.0.1-