⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prot.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    return twRc;
} // end OpenDS()

////////////////////////////////////////////////////////////////////////////
// FUNCTION: CloseDS
// 
// ARGS:    none
// 
// RETURNS: 状态代码
//
// NOTES:   关闭数据源
////////////////////////////////////////////////////////////////////////////
TW_UINT16 CloseDS(VOID)
{
    CFile myFile;
	TW_UINT16 twRc = TWRC_SUCCESS;
    char str[36];
	CString str1;
    CString	str2;  
 
    switch (DSState)
	{
      case STATE4:
      case STATE5:
      case STATE6:
      case STATE7:
      appIdentity.Id = 0;

      GetWindowsDirectory(InitDir2,sizeof(InitDir2));
	  lstrcat(InitDir2,"\\twain_32\\MTIScanner\\jiaose.ini"); 

      sprintf(str, "%d", pViewWnd->m_SelectZoom.left);
	  WritePrivateProfileString("select", "left", str, InitDir2);
	  sprintf(str, "%d", pViewWnd->m_SelectZoom.right);
      WritePrivateProfileString("select", "right", str, InitDir2);
	  sprintf(str, "%d", pViewWnd->m_SelectZoom.top);
	  WritePrivateProfileString("select", "top", str, InitDir2);
	  sprintf(str, "%d",pViewWnd->m_SelectZoom.bottom );
	  WritePrivateProfileString("select", "bottom", str, InitDir2);

	  /*str2=_T("真彩色");
	  WritePrivateProfileString("file type", "type", str2, InitDir2);

      int m;
      char str[36];
	  m=16777216;
      sprintf(str, "%d", m);
	  WritePrivateProfileString("color num", "color", str, InitDir2);*/
     	
   	  pMainDialog->DestroyWindow( );

      DSState = STATE3;
     
      break;
    default:
	  twRc = TWRC_FAILURE;
	  DSStatus.ConditionCode = TWCC_SEQERROR;
      DS_Error (E_CLOSEDS, DSStatus.ConditionCode);
      break;
  }  
      return twRc;
} // end CloseDS()

///////////////////////////////////////////////////////////////////////////
// FUNCTION: CapabilityMsg设置数据源的属性
// 
// ARGS:    pTWMsg  数据源入口函数的消息参数
// 
// RETURNS: 状态代码

// 应用程序产生或销毁属性框,数据源从属性框中提取属性值并用该值修改自己的属性值
// 在状态4进行属性协商及数据转移的设置,初值在TWACKER.INI及DEFAULT.SRC下
TW_UINT16 CapabilityMsg (PTWMSG pTWMsg)
{
    TW_UINT16   twRc = TWRC_SUCCESS;
    char number[8];
    char twacker[MAX_TWPATH]; 
    char capability[80];
    TW_UINT16 ret;
  
    if (SetSourceControl()==FALSE)
        return(FALSE);

    GetWindowsDirectory(twacker,sizeof(twacker));
    lstrcat(twacker,"\\twain_32\\MTIscanner\\twacker.ini");
  
    sprintf(number,"%d",((pTW_CAPABILITY)pTWMsg->pData)->Cap);
    GetPrivateProfileString("CAP NUMBERS",number,"NONE",capability,sizeof(capability),twacker);
    if (lstrcmp(capability,"NONE")==0)
    {
       DSStatus.ConditionCode = TWCC_BADCAP;
       twRc = TWRC_FAILURE;
    }

    switch (pTWMsg->MSG)
    {
	    case MSG_GET:
        case MSG_GETCURRENT:    
        case MSG_GETDEFAULT:    
            ret = SetValues((pTW_CAPABILITY)pTWMsg->pData,pTWMsg->MSG,capability);
            if (ret != TWCC_SUCCESS)
                twRc = TWRC_FAILURE;

            DSStatus.ConditionCode = ret;
            
            if (((pTW_CAPABILITY)pTWMsg->pData)->Cap == CAP_AUTOFEED)
            {
               WritePrivateProfileString("ADF","PendingImages","0",SourceControl);
            }
            break;        
          case MSG_SET:
            if ((ret = SetNewCap((TW_CAPABILITY *)pTWMsg->pData,capability))==TWRC_SUCCESS)
              SetValues((pTW_CAPABILITY)pTWMsg->pData,pTWMsg->MSG,capability);
            else
              twRc = TWRC_FAILURE;
              DSStatus.ConditionCode = ret;           
            break;
          case MSG_RESET: 
            if ((DSStatus.ConditionCode=ResetValues(capability))!=TWCC_BADPROTOCOL)
               SetValues((pTW_CAPABILITY)pTWMsg->pData,pTWMsg->MSG,capability);
            else
              twRc = TWRC_FAILURE;
             break;
         default:
            DSStatus.ConditionCode = TWCC_BADPROTOCOL;
            twRc = TWRC_FAILURE;
            DS_Error (E_CAPABILITYMSG, DSStatus.ConditionCode);
            break;
    }  
    return twRc;
} 

/***********************************************************************
 * FUNCTION: StatusMsg
 *
 * ARGS:    pTWMsg  数据源入口中的消息参数
 *
 * RETURNS: 状态代码
 *
 * NOTES:  合法状态为3到7, 数据源填写状态信息并清除条件代码
 */   
TW_UINT16 StatusMsg (PTWMSG pTWMsg)
{
    TW_UINT16 twRc = TWRC_SUCCESS;
   
    switch (pTWMsg->MSG){
      case MSG_GET:
        *(pTW_STATUS)pTWMsg->pData = DSStatus;        
        DSStatus.ConditionCode = TWCC_SUCCESS;     
        break;

      default:
        DSStatus.ConditionCode = TWCC_BADPROTOCOL;
        twRc = TWRC_FAILURE;
        DS_Error (E_STATUSMSG, DSStatus.ConditionCode);
        break;
    }
    return twRc;
} // StatusMsg()

////////////////////////////////////////////////////////////////////////////
// FUNCTION: Msg
//
// ARGS:    pTWMsg 数据源入口中的消息参数
//
// RETURNS: TWRC_SUCCESS
//          TWRC_FAILURE
//              TWCC_SEQERROR
//              TWCC_BADPROTOCOL       

TW_UINT16 PendingXferMsg (PTWMSG pTWMsg)
{
    TW_UINT16 twRc = TWRC_SUCCESS;
    char buffer[8];
    TW_INT16 PendingImages = 0;

    switch (pTWMsg->MSG)
    {
        case MSG_GET: //得到已经存在的传输块数                   
            switch (DSState)
            {
                case STATE4:
                case STATE5:
                case STATE6:
                case STATE7:
                    ((pTW_PENDINGXFERS)pTWMsg->pData)->Count=
                        GetPrivateProfileInt("ADF","PendingImages",0,SourceControl);
                break;

                default:
                    DSStatus.ConditionCode = TWCC_SEQERROR;//状态错误
                    twRc = TWRC_FAILURE;
                    DS_Error (E_PENDINGXFERMSG, DSStatus.ConditionCode);
                    break;
            }
            break;

        case MSG_ENDXFER: //结束当前的传输
		    PendingImages = GetPrivateProfileInt("ADF","PendingImages",0,SourceControl);
            PendingImages--;
            if (PendingImages < 0)
                PendingImages = 0;

            PendingImages = 0;

            ((pTW_PENDINGXFERS)pTWMsg->pData)->Count = (TW_UINT16)PendingImages;
            
            sprintf(buffer,"%d",PendingImages);
            WritePrivateProfileString("ADF","PendingImages",buffer,SourceControl);
            
            break;
        case MSG_RESET: //清除所有的传输并返回状态5 
			if ((DSState==STATE6) || (DSState==STATE7))
            {
                DSState = STATE5;
                ((pTW_PENDINGXFERS)pTWMsg->pData)->Count = 0;
                WritePrivateProfileString("ADF","PendingImages","0",SourceControl);
            }
            else 
            {
                DSStatus.ConditionCode = TWCC_SEQERROR;
                twRc = TWRC_FAILURE;
                DS_Error (E_PENDINGXFERMSG, DSStatus.ConditionCode);
            }
            break;

        default:
            DSStatus.ConditionCode = TWCC_BADPROTOCOL;
            twRc = TWRC_FAILURE;
            DS_Error (E_PENDINGXFERMSG, DSStatus.ConditionCode);
            break;
    }

    return twRc;
} // PendingXferMsg

////////////////////////////////////////////////////////////////////////////
// FUNCTION: SetupMemXferMsg设置内存缓冲的参数
//
// ARGS:    pTWMsg  数据源入口中的消息参数
//
// RETURNS: TWRC_SUCCESS
//          TWRC_FAILURE
//              TWCC_SEQERROR
//              TWCC_BADPROTOCOL        // debug ONLY

TW_UINT16 SetupMemXferMsg (PTWMSG pTWMsg)
{
    TW_UINT16 twRc = TWRC_SUCCESS;
    pTW_SETUPMEMXFER pMem1;
 
    switch (DSState)
    {
        case STATE4:
        case STATE5:
        case STATE6:
           switch (pTWMsg->MSG)
           {
             case MSG_GET://应用程序获取数据源的设置信息
			
				pMem1=(pTW_SETUPMEMXFER)(pTWMsg->pData);
				pMem1->MinBufSize = 
                GetPrivateProfileInt("Setup Memory Transfer","Min",512,SourceControl);
				pMem1->MaxBufSize = 
                GetPrivateProfileInt("Setup Memory Transfer","Max",2048,SourceControl);
				pMem1->Preferred =
                GetPrivateProfileInt("Setup Memory Transfer","Preferred",1024,SourceControl);
                break;
               
             default:
                DSStatus.ConditionCode = TWCC_BADPROTOCOL;
                twRc = TWRC_FAILURE;
                DS_Error (E_SETUPMEMXFER, DSStatus.ConditionCode);
                break;
            }
            break; 
         default:
            DSStatus.ConditionCode = TWCC_SEQERROR;
            twRc = TWRC_FAILURE;
            DS_Error (E_SETUPMEMXFER, DSStatus.ConditionCode);
            break;
    }
    return twRc;
} 

///////////////////////////////////////////////////////////////////////////
// FUNCTION: SetupFileXferMsg设置文件传输的参数
// 
// ARGS:    pTWMsg  数据源入口中的消息参数
// 
// RETURNS: TWRC_SUCCESS
//          TWRC_FAILURE
//              TWCC_SEQERROR
//              TWCC_BADVALUE
//              TWCC_BADPROTOCOL       
 
TW_UINT16 SetupFileXferMsg (PTWMSG pTWMsg)
{
    pTW_SETUPFILEXFER pSetup;
    TW_UINT16 twRc = TWRC_SUCCESS;
    HFILE hFile;
    OFSTRUCT         of;

    switch (DSState)
    {
        case STATE4:
        case STATE5:
        case STATE6:           
          switch (pTWMsg->MSG)
           {
              case MSG_SET:   //设置文件传输的信息
                pSetup = (pTW_SETUPFILEXFER)(pTWMsg->pData);
                lstrcpyn(filename,pSetup->FileName,sizeof(filename));
                                        
                if ((hFile = OpenFile(filename, &of, OF_EXIST)) == HFILE_ERROR)
                {
                  if ((hFile = OpenFile(filename,&of,OF_CREATE))==HFILE_ERROR)
                   {
                       DSStatus.ConditionCode = TWCC_BADVALUE;
                       twRc = TWRC_FAILURE;    
                       DS_Error ("Unable to create file <<DAT_SETUPFILEXFER>>", DSStatus.ConditionCode);
                    }
                   else
                      _lclose(hFile);//关闭文件
				}    
                break; 
               
                case MSG_GETDEFAULT:
                case MSG_GETCURRENT:
                case MSG_GET:			//获取数据源文件传输块的信息
                 pSetup = (pTW_SETUPFILEXFER)(pTWMsg->pData);
                 lstrcpyn(pSetup->FileName,"c:\\twain.bmp",sizeof(pSetup->FileName));
                 pSetup->Format = TWFF_BMP;
                 pSetup->VRefNum = 0;
                 break;
                case MSG_RESET://设置文件传输信息为缺省信息
                default:
                 DSStatus.ConditionCode = TWCC_BADPROTOCOL;
                 twRc = TWRC_FAILURE;
                 DS_Error (E_SETUPFILEXFER, DSStatus.ConditionCode);
                break;
            }
            break;
 
        default:
            DSStatus.ConditionCode = TWCC_SEQERROR;//非法状态
            twRc = TWRC_FAILURE;
            DS_Error (E_SETUPFILEXFER, DSStatus.ConditionCode);
    } 

    return twRc;
} 

/***********************************************************************
 * FUNCTION: XferGroupMsg
 *
 * ARGS:    pTWMsg  数据源入口中的消息参数
 *
 * RETURNS: status code
************************************************************************/ 
//对挂起的传输块的操作
TW_UINT16 XferGroupMsg (PTWMSG pTWMsg)
{
    TW_UINT16 twRc = TWRC_SUCCESS;

    switch (DSState){
        case STATE4:
        case STATE5:
        case STATE6:   
          switch (pTWMsg->MSG)
		  {
            case MSG_GET:
            case MSG_GETDEFAULT:
            case MSG_GETCURRENT:
            case MSG_RESET:		//传输的数据块的类型
                *(pTW_UINT16)pTWMsg->pData = DG_IMAGE;
                break;
            case MSG_SET:
              break;
            default:
                DSStatus.ConditionCode = TWCC_BADPROTOCOL;
                twRc = TWRC_FAILURE;
                DS_Error (E_XFERGROUP, DSStatus.ConditionCode);
                break;
		  }
         break;
        default:  
            DSStatus.ConditionCode = TWCC_SEQERROR;
            twRc = TWRC_FAILURE;
            DS_Error (E_XFERGROUP, DSStatus.ConditionCode);
            break;
    } 
    return twRc;
} 

////////////////////////////////////////////////////////////////////
// FUNCTION: Palette8Msg
//
// ARGS:    pTWMsg  数据源入口中的消息参数
//
// RETURNS: status code
//
// NOTES:   
// 
TW_UINT16 Palette8Msg (PTWMSG pTWMsg)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -