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

📄 fdemo.c

📁 传真示例
💻 C
📖 第 1 页 / 共 5 页
字号:
         break;

      default:
         StatusMsg(hwnd, "Unhandled event 0x%x", evttype);
         break;      
      }

	// These two calls will cause MDI child window to be updated. ChildOnPaint()
	// updates the information on the screen.
   InvalidateRect(hwnd, NULL, TRUE);
   UpdateWindow(hwnd);
   return 0;
}

/************************************************************
 *        NAME: ChildDefProc()
 * DESCRIPTION: Our default Child proc that takes 4 normal windows 
 *              parameters.  Needed so we can use FORWARD_XX_XXXX
 *              macro.
 ************************************************************/
long WINAPI ChildDefProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
   // call real default MDI child procedure, passing in window handle
   return DefMDIChildProc(hwnd, msg, wParam, lParam);
}   

/************************************************************
 *        NAME: ChildWndProc()
 * DESCRIPTION: Child window procedure for MDI child windows
 ************************************************************/
long WINAPI ChildWndProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
   switch (msg) {
      HANDLE_MSG(hwnd, WM_PAINT, ChildOnPaint);
      HANDLE_MSG(hwnd, WM_CREATE, ChildOnCreate);
      HANDLE_MSG(hwnd, WM_DESTROY, ChildOnDestroy);
      HANDLE_MSG(hwnd, WM_SYSCOMMAND, ChildOnSysCommand);
      HANDLE_MSG(hwnd, WM_SRLNOTIFYEVENT, ChildOnSRLNotifyEvent);
        break;

   default:
      return ChildDefProc(hwnd, msg, wParam, lParam);
   }
}

/************************************************************
 *        NAME: DevOptsDlgProc()
 * DESCRIPTION: Update Device settings dialog
 ************************************************************/
BOOL WINAPI DevOptsDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
   static LPDEVDATA lpDevData;   // static pointer used thru life of dialog
   HWND hwndCtl;
   int   i;
   char  szBuff[80];

   switch (msg) {
      case WM_INITDIALOG:
         if ((lpDevData = GetDevPtr((HWND) lParam)) == NULL)  {
            // This is an error condition
            return TRUE;
            }
			SetWindowContextHelpId(hwnd, IDD_DEVOPTS);
         sprintf(szBuff, "Device Options For %s", lpDevData->devname);
         SetWindowText(hwnd, szBuff);
         // initialize controls with data from DEVDATA structure and firmware
			// Note: strtrim() function is used to remove leading/trailing spaces
			// before placing them in edit controls.  This makes it easier to 
			// use the editcontrol.
         
         // device information string
         SetDlgItemText(hwnd, IDC_DEVINFO, lpDevData->devname);

         // local ID edit control
         fx_getparm(lpDevData->faxhandle, FC_LOCALID, szBuff);
         Edit_LimitText(GetDlgItem(hwnd, IDC_LOCALID), MAXIDLEN);
         SetDlgItemText(hwnd, IDC_LOCALID, strtrim(szBuff));

         // fax header parameter
         if (lpDevData->chtype >= DFS_FAX40) {
            fx_getparm(lpDevData->faxhandle, FC_HDRUSER, szBuff);
            Edit_LimitText(GetDlgItem(hwnd, IDC_FAXHEADER), MAXHDRLEN);
            SetDlgItemText(hwnd, IDC_FAXHEADER, strtrim(szBuff));
            }
         else {
            Static_Enable(GetDlgItem(hwnd, IDS_FAXHEADER), FALSE);
            Edit_Enable(GetDlgItem(hwnd, IDC_FAXHEADER), FALSE);
            }

         // transmit and receive storage coding 
         if (lpDevData->chtype >= DFS_FAX40E) {
            hwndCtl = GetDlgItem(hwnd,IDC_TXCODING);
            ComboBox_ResetContent(hwndCtl);
            for (i=0;i<sizeof(Coding)/sizeof(Coding[0]);i++) {
               ComboBox_AddString(hwndCtl,Coding[i]);
               }
            i=0;
            fx_getparm(lpDevData->faxhandle, FC_TXCODING, &i);
            i&= 0x7fff;
            ComboBox_SetCurSel(hwndCtl, i);

            // receive storage coding 
            hwndCtl = GetDlgItem(hwnd,IDC_RXCODING);
            ComboBox_ResetContent(hwndCtl);
            ComboBox_AddString(hwndCtl,Coding[0]);
            ComboBox_AddString(hwndCtl,Coding[2]);
                        
            i=0;
            fx_getparm(lpDevData->faxhandle, FC_RXCODING, &i);
            i&= 0x7fff;
            ComboBox_SetCurSel(hwndCtl, (i == 0) ? 0 : 1);
            }
         else {
            // tx/rx coding not supported
            Static_Enable(GetDlgItem(hwnd, IDS_TXCODING), FALSE);
            hwndCtl = GetDlgItem(hwnd,IDC_TXCODING);
            ComboBox_AddString(hwndCtl,Coding[0]);
            ComboBox_SetCurSel(hwndCtl, 0);
            ComboBox_Enable(hwndCtl, FALSE);

            Static_Enable(GetDlgItem(hwnd, IDS_RXCODING), FALSE);
            hwndCtl = GetDlgItem(hwnd,IDC_RXCODING);
            ComboBox_AddString(hwndCtl,Coding[0]);
            ComboBox_SetCurSel(hwndCtl, 0);
            ComboBox_Enable(hwndCtl, FALSE);
            }

         // Baud rate combo box
         hwndCtl = GetDlgItem(hwnd,IDC_BAUDRATE);
         ComboBox_ResetContent(hwndCtl);
         // add only supported baud rates to combo box
         for (i=(lpDevData->chtype >= DFS_FAX40E) ? 0 : 2;
              i<sizeof(BaudRates)/sizeof(BaudRates[0]);
              i++) {
            ComboBox_AddString(hwndCtl,BaudRates[i]);
            }
         
         fx_getparm(lpDevData->faxhandle, FC_TXBAUDRATE, &i);
         wsprintf(szBuff, "%d", i); 
         ComboBox_SelectString(hwndCtl, -1, szBuff);

         return(TRUE);
         
      case WM_COMMAND:
         if (wParam == IDOK)  {
            // validate data and update all firmware parameters

            // local ID
            GetDlgItemText(hwnd, IDC_LOCALID, szBuff, MAXIDLEN);
            fx_setparm(lpDevData->faxhandle, FC_LOCALID, szBuff);

            // fax header
            if (lpDevData->chtype >= DFS_FAX40) {
               GetDlgItemText(hwnd, IDC_FAXHEADER, szBuff, MAXHDRLEN);
               fx_setparm(lpDevData->faxhandle, FC_HDRUSER, szBuff);
               }

            // transmit/ receive coding
            if (lpDevData->chtype >= DFS_FAX40E) {
               i = ComboBox_GetCurSel(GetDlgItem(hwnd, IDC_TXCODING));
               fx_setparm(lpDevData->faxhandle, FC_TXCODING, &i);

               i = ComboBox_GetCurSel(GetDlgItem(hwnd, IDC_RXCODING));
               if (i == 1) {
                  i = DF_MMR;
                  }
               fx_setparm(lpDevData->faxhandle, FC_RXCODING, &i);
               }

            // Baud rate, update both TX and RX
            hwndCtl = GetDlgItem(hwnd, IDC_BAUDRATE);
            i = ComboBox_GetCurSel(hwndCtl);
            if (i >= 0) {
               ComboBox_GetLBText(hwndCtl, i, szBuff);
               }
            i = atol(szBuff);

            fx_setparm(lpDevData->faxhandle, FC_TXBAUDRATE, &i);
            fx_setparm(lpDevData->faxhandle, FC_RXBAUDRATE, &i);

            // close dialog box
            EndDialog(hwnd, wParam);
         }

         if (wParam == IDCANCEL)  {
            // canceled, no changes
            EndDialog(hwnd, wParam);
         }

         break;
   }
   return FALSE;
}

/************************************************************
 *        NAME: DevOpenDlgProc()
 * DESCRIPTION: Get new device to open
 ************************************************************/
BOOL WINAPI DevOpenDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
   HWND hwndCtl;
   int   i,j,chcount,bddev;
   char  szBuff[MAXDEVNAMELEN];
   char  **lpChName;

   switch (msg) {
      case WM_INITDIALOG:
			SetWindowContextHelpId(hwnd, IDD_OPENDEV);
         // initialize controls with fields from DEVDATA structure

         // init global field device name will be returned in
         szNewDevName[0] = 0;

         // device listbox
         hwndCtl = GetDlgItem(hwnd, IDC_FAXLIST);
         ComboBox_ResetContent(hwndCtl);

			// during startup, FaxBoardArray is populated with board names
			// that contain fax devices.  For each board in the array, get
			// the list of fax device names and add then to the combobox.
			for (i=0;i<FaxBoardCount;i++) {
            if ((bddev = dx_open(FaxBoardArray[i], 0)) != -1) {
               chcount = 0;
               chcount = ATDV_SUBDEVS(bddev);
               lpChName = ATDX_CHNAMES(bddev);

               for (j=0;j<chcount;j++) {
				  ComboBox_AddString(hwndCtl, *lpChName);
                  lpChName++;
			      }
               dx_close(bddev);
               }
            }

         // select the first one
         ComboBox_SetCurSel(hwndCtl, 0);

         return(TRUE);
         
      case WM_COMMAND:
         if (wParam == IDOK)  {
				// get the current selection and store it in global variable
            hwndCtl = GetDlgItem(hwnd, IDC_FAXLIST);
            i = ComboBox_GetCurSel(hwndCtl);
            ComboBox_GetLBText(hwndCtl, i, szBuff);
            strcpy(szNewDevName, szBuff);
            // close dialog box
            EndDialog(hwnd, wParam);
         }

         if (wParam == IDCANCEL)  {
            // canceled, no changes
            EndDialog(hwnd, wParam);
         }

         break;
   }
   return FALSE;
}

/************************************************************
 *        NAME: ASCIIOptsDlgProc()
 * DESCRIPTION: Update DF_ASCIIDATA structure
 ************************************************************/
BOOL WINAPI ASCIIOptsDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
   static LPDEVDATA lpDevData;   // static pointer used thru life of dialog
   static fUnits;
   char szBuff[80];

   switch (msg) {
      case WM_INITDIALOG:
         // Initialize fields in dialog
         if ((lpDevData = GetDevPtr((HWND) lParam)) == NULL)  {
            // This is an error condition
            return TRUE;
            }

			SetWindowContextHelpId(hwnd, IDD_ASCIIOPTS);
         sprintf(szBuff, "ASCII Page Options For %s", lpDevData->devname);
         SetWindowText(hwnd, szBuff);
         // initialize controls with fields from DEVDATA structure
      
         // Move ASCIIDATA fields to controls 
         SetDlgItemInt(hwnd, IDC_MARGTOP, lpDevData->asciidata.topmargin, FALSE);
         SetDlgItemInt(hwnd, IDC_MARGBOTTOM, lpDevData->asciidata.botmargin, FALSE);
         SetDlgItemInt(hwnd, IDC_MARGLEFT, lpDevData->asciidata.leftmargin, FALSE);
         SetDlgItemInt(hwnd, IDC_MARGRIGHT, lpDevData->asciidata.rightmargin, FALSE);
         SetDlgItemInt(hwnd, IDC_PAGELEN, lpDevData->asciidata.pagelength, FALSE);

         // setup automatic buttons
         if (lpDevData->asciidata.font == DF_FONT_0)  {
            Button_SetCheck(GetDlgItem(hwnd,IDC_FONTNORM), 1);
         }
         else {
            Button_SetCheck(GetDlgItem(hwnd,IDC_FONTCOMP), 1);
         }

         if (lpDevData->asciidata.units == DF_UNITS_IN10)  {
            Button_SetCheck(GetDlgItem(hwnd,IDC_UNIT10INCH), 1);
            fUnits = DF_UNITS_IN10;
         }
         else {
            Button_SetCheck(GetDlgItem(hwnd,IDC_UNITMM), 1);
            fUnits = DF_UNITS_MM;
         }

         return(TRUE);
         
      case WM_COMMAND:
         if ((LOWORD(wParam) == IDC_UNIT10INCH) && (fUnits == DF_UNITS_MM)) {
            fUnits = DF_UNITS_IN10;
            break;
         }

         if ((LOWORD(wParam) == IDC_UNITMM) && (fUnits == DF_UNITS_IN10)) {
            fUnits = DF_UNITS_MM;
            break;
         }
         if (wParam == IDOK)  {
            // validate and move data back to devdata structure
            lpDevData->asciidata.topmargin = 
                     (unsigned short) GetDlgItemInt(hwnd, IDC_MARGTOP, NULL, FALSE);
            lpDevData->asciidata.botmargin = 
                     (unsigned short) GetDlgItemInt(hwnd, IDC_MARGBOTTOM, NULL, FALSE);
            lpDevData->asciidata.leftmargin = 
                     (unsigned short) GetDlgItemInt(hwnd, IDC_MARGLEFT, NULL, FALSE);
            lpDevData->asciidata.rightmargin = 
                     (unsigned short) GetDlgItemInt(hwnd, IDC_MARGRIGHT, NULL, FALSE);
            lpDevData->asciidata.pagelength = 
                     (unsigned short) GetDlgItemInt(hwnd, IDC_PAGELEN, NULL, FALSE);

            if (IsDlgButtonChecked(hwnd, IDC_FONTNORM) == 0)  {
               // not checked
               lpDevData->asciidata.font = DF_FONT_3;
            }
            else {
               lpDevData->asciidata.font = DF_FONT_0;
            }

            if (IsDlgButtonChecked(hwnd, IDC_UNIT10INCH) == 0)  {
               // not checked
               lpDevData->asciidata.units = DF_UNITS_MM;
            }
            else {
               lpDevData->asciidata.units = DF_UNITS_IN10;
            }


            // close dialog box
            EndDialog(hwnd, wParam);
         }

         if (wParam == IDCANCEL)  {
            // canceled, no changes
            EndDialog(hwnd, wParam);
         }

         break;
   }
   return FALSE;
}

/************************************************************
 *        NAME: FileOpenButtonUpdate
 * DESCRIPTION: Set Enable/Disable state for add/delete buttons
 *       INPUT: FileOpen dialog box handle
 *      OUTPUT: nothing
 *    CAUTIONS: only call from FileOpenHookProc()
 ************************************************************/
void FileOpenButtonUpdate(HWND hwnd)
{
	int	i;

	// update Add/Delete button status
	i = ListBox_GetCount(GetDlgItem(hwnd, IDC_IOTTLIST));

⌨️ 快捷键说明

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