CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

紧急请帮助,一个WinAPI转换到MFC应用程序中的问题,在线等候,

楼主liu_yanzhi()2006-11-04 13:40:54 在 .NET技术 / VC.NET 提问

现做一个Symbol的手持扫描开发一个小软件,Symbol公司的提供的打开扫描的例子全是WinAPI的,我做的是MFC应用程序,请问各用大哥哥们,怎么下面这个程序转换到我的程序里?Symbol公司WinAPI的原程序如下,刚学VC.NET,请帮助谢谢!:  
  //--------------------------------------------------------------------  
  #include   <windows.h>  
  #include   <windowsx.h>  
  #include   <ScanCAPI.h>  
  #include   "resource.h"  
  #define countof(x) sizeof(x)/sizeof(x[0])  
   
  //   Define   user   messages  
  enum   tagUSERMSGS  
  {  
  UM_SCAN =   WM_USER   +   0x200,  
  UM_STARTSCANNING,  
  UM_STOPSCANNING  
  };  
   
  //   Global   variables  
  HINSTANCE hInst =   NULL;  
  HANDLE hScanner =   NULL;  
  LPSCAN_BUFFER lpScanBuffer =   NULL;  
  TCHAR szScannerName[MAX_PATH]   =   TEXT("SCN1:"); //   default   scanner   name  
  DWORD dwScanSize =   7095; //   default   scan   buffer   size  
  DWORD dwScanTimeout =   2000; //   default   timeout   value   (0   means   no   timeout)  
  BOOL bUseText =   TRUE;  
  BOOL bTriggerFlag =   FALSE;  
  BOOL bRequestPending =   FALSE;  
  BOOL bStopScanning =   FALSE;  
  BOOL bContinuousMode =   FALSE;  
   
  //   Forward   declarations  
  LRESULT   CALLBACK   BasicScanProc(HWND,UINT,WPARAM,LPARAM);  
  void ErrorExit(HWMD,   UINT,   LPTSTR);  
  LPTSTR LoadMsg(UINT,   LPTSTR,   int);  
   
  int   WINAPI   WinMain(HINSTANCE   hInstance,  
        HINSTANCE   hPrevInstance,  
        LPWSTR   lpszCmdLine,  
        int   nCmdShow)  
  {  
  int   nResult;  
   
  hInst   =   hInstance; //   save   the   instance   handle   to   a   global   variable  
  nResult   =   DialogBox(hInstance,   MAKEINTRESOURCE(IDD_DIALOG_SSCAN),   NULL,    
  BasicScanProc);  
   
  return   nResult;  
  }  
   
  LRESULT   CALLBACK   BasicScanProc(HWND   hwnd,   UINT   uMsg,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  DWORD dwResult;  
  TCHAR szLabelType[10];  
  TCHAR szLen[MAX_PATH];  
  TCHAR szMsgBuf[256];  
  LPSCAN_BUFFER lpScanBuf;  
  HWND hctl_data,   hctl_length,   hctl_type;  
   
  switch(uMsg)  
          {  
  case   WM_INITDIALOG:  
  PostMessage(hwnd,UM_STARTSCANNING,0,0L);  
  break;  
   
  case   UM_STARTSCANNING:  
  dwResult   =   SCAN_Open(szScannerName,   &hScanner);  
  if   (   dwResult   !=   E_SCN_SUCCESS   )  
  {  
  ErrorExit(hwnd,   IDS_FAILURE,   TEXT("SCAN_Open"));  
  break;  
  }  
   
  dwResult   =   SCAN_Enable(hScanner);  
  if   (   dwResult   !=   E_SCN_SUCCESS   )  
  {  
  ErrorExit(hwnd,   IDS_FAILURE,   TEXT("SCAN_Enable"));  
  break;  
  }  
   
  lpScanBuffer   =   SCAN_AllocateBuffer(bUseText,   dwScanSize);  
  if   (lpScanBuffer   ==   NULL)  
  {  
  ErrorExit(hwnd,   IDS_FAILURE,   TEXT("SCAN_AllocateBuffer"));  
  return   TRUE;  
  }  
   
  dwResult   =   SCAN_ReadLabelMsg(hScanner,  
    lpScanBuffer,  
    hwnd,  
    UM_SCAN,  
    dwScanTimeout,  
    NULL);  
  if   (   dwResult   !=   E_SCN_SUCCESS   )  
  ErrorExit(hwnd,   IDS_FAILURE,   TEXT("SCAN_ReadLabelMsg"));  
  else  
  bRequestPending   =   TRUE;  
   
  break;  
   
  return   TRUE;  
   
  case   UM_STOPSCANNING:  
  if   (!bStopScanning   &&   bRequestPending)  
  SCAN_Flush(hScanner);  
   
  if   (!bRequestPending)  
  {    
  SCAN_Disable(hScanner);  
   
  if   (lpScanBuffer)  
  SCAN_DeallocateBuffer(lpScanBuffer);  
   
  SCAN_Close(hScanner);  
   
  EndDialog(hwnd,   0);  
  }  
  bStopScanning   =   TRUE;  
   
  return   TRUE;  
  case   UM_SCAN:  
   
  bRequestPending   =   FALSE;  
  bTriggerFlag   =   FALSE;  
  SCAN_SetSoftTrigger(hScanner,&bTriggerFlag);  
   
  lpScanBuf   =   (LPSCAN_BUFFER)lParam;  
  if   (   lpScanBuf   ==   NULL   )  
  ErrorExit(hwnd,   IDS_ERR_BUF,   0);  
   
  hctl_data   =   GetDlgItem(hwnd,IDC_EDIT_DATA);  
  hctl_length   =   GetDlgItem(hwnd,IDC_EDIT_LEN);  
  hctl_type   =   GetDlgItem(hwnd,IDC_EDIT_TYPE);  
   
  switch   (SCNBUF_GETSTAT(lpScanBuf))  
  {    
  case   E_SCN_DEVICEFAILURE:  
  break;  
   
  case   E_SCN_READPENDING:  
  break;  
   
  case   E_SCN_READCANCELLED:  
   
  if   (bStopScanning)  
  { //   complete   the   second   step   of   UM_STOPSCANNING  
  SendMessage(hwnd,UM_STOPSCANNING,0,0L);  
  return   TRUE;  
  }  
  if   (!GetFocus())  
  break; //   Do   nothing   if   read   was   cancelled   while   deactivation  
  break;  
   
  case   E_SCN_READTIMEOUT:  
  if(bContinuousMode)  
  PostMessage(hwnd,WM_COMMAND,IDC_BUTTON_SOFTTRIGGER,0L);  
  break;  
   
  case   E_SCN_SUCCESS:  
  //Edit_SetText(hctl_data,   (LPTSTR)SCNBUF_GETDATA(lpScanBuffer));  
  MessageBox(NULL,   (LPTSTR)SCNBUF_GETDATA(lpScanBuffer),   NULL,   MB_OK);  
  if(bContinuousMode)  
  PostMessage(hwnd,WM_COMMAND,IDC_BUTTON_SOFTTRIGGER,0L);  
  break;  
  }  
   
  //   Submit   next   read   request   if   we   are   foreground  
  if   (GetFocus())  
  {  
  dwResult   =   SCAN_ReadLabelMsg(hScanner,  
    lpScanBuffer,  
    hwnd,  
    UM_SCAN,  
    dwScanTimeout,  
    NULL);  
   
  if   (   dwResult   !=   E_SCN_SUCCESS   )  
  ErrorExit(hwnd,   IDS_FAILURE,   TEXT("SCAN_ReadLabelMsg"));  
  else  
  bRequestPending   =   TRUE;  
  }  
   
  return   TRUE;  
   
  case   WM_COMMAND:  
  switch   (LOWORD(wParam))  
                          {  
  case   IDC_BUTTON_SOFTTRIGGER:  
  //   Clear   the   state   first   before   we   set   it   to   TRUE  
  bTriggerFlag   =   FALSE;  
  SCAN_SetSoftTrigger(hScanner,&bTriggerFlag);  
   
  bTriggerFlag   =   TRUE;  
  SCAN_SetSoftTrigger(hScanner,&bTriggerFlag);  
  break;  
  case   IDC_CONTINUOUS: //Check   for   Continuous   Scan   Mode  
  bContinuousMode   =   !bContinuousMode;  
  if(bContinuousMode)  
  PostMessage(hwnd,WM_COMMAND,IDC_BUTTON_SOFTTRIGGER,0L);  
  break;  
   
  case   IDOK: //   fall   through  
   
  case   IDCANCEL:  
  SendMessage(hwnd,UM_STOPSCANNING,0,0L);  
  break;  
  }  
   
  return   TRUE;  
  }  
   
  return   FALSE;  
  }  
   
  void   ErrorExit(HWND   hwnd,   UINT   uID,   LPTSTR   szFunc)  
  {  
  TCHAR   szMsg[256];  
  TCHAR   szBuf[256];  
   
  if   (szFunc   ==   NULL)  
  wcscpy(szMsg,   LoadMsg(uID,   szBuf,   countof(szBuf)));  
  else  
  wsprintf(szMsg,   TEXT("%s   %s"),   szFunc,    
  LoadMsg(uID,   szBuf,   countof(szBuf)));  
  MessageBox(NULL,   szMsg,   NULL,   MB_OK);  
  SendMessage(hwnd,UM_STOPSCANNING,0,0L);  
  }  
   
   
  LPTSTR   LoadMsg(UINT   uID,   LPTSTR   lpBuffer,   int   nBufSize)  
  {  
  if   (!LoadString(hInst,   uID,   lpBuffer,   nBufSize))  
  wcscpy(lpBuffer,   TEXT(""));  
   
  return   lpBuffer;  
  }  
  问题点数:100、回复次数:6Top

1 楼YJX5888()回复于 2006-11-04 14:35:14 得分 0

MFC本身已经对WINAPI进行的封装。。开发商提供API接口函数。。一定提供的有DLL,  
  你只需要把DLL文件加载到你的程序里,至于DLL中的函数,你就可以像调用WINDOWS的API函数一样,调用它了!Top

2 楼sgnaw(李逍遥)回复于 2006-11-04 14:45:32 得分 100

http://community.csdn.net/Expert/topic/5132/5132935.xml?temp=.1252863Top

3 楼hdt(倦怠)回复于 2006-11-04 19:29:40 得分 0

MFC   只不过是对api的简单封装,你用mfc可以直接调用Top

4 楼liu_yanzhi()回复于 2006-11-04 23:44:38 得分 0

上面的这位哥哥,请说明白一点好吗?怎么调用Top

5 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-11-05 09:32:16 得分 0

API=>MFC?  
   
  楼主用VC多久了?Top

6 楼liu_yanzhi()回复于 2006-11-05 09:41:42 得分 0

真心谢谢:sgnaw(李逍遥)大哥的帮助Top

相关问题

关键词

得分解答快速导航

  • 帖主:liu_yanzhi
  • sgnaw

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo