📄 prot.cpp
字号:
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 + -