dialogs.c
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:10k
源码类别:

打印编程

开发平台:

Visual C++

  1. /*++
  2. Copyright (c) 1990-2003  Microsoft Corporation
  3. All rights reserved
  4. Module Name:
  5.     dialogs.c
  6. --*/
  7. #include "precomp.h"
  8. #pragma hdrstop
  9. #include "localui.h"
  10. #include "dialogs.h"
  11. #include "mem.h"
  12. WCHAR szINIKey_TransmissionRetryTimeout[] = L"TransmissionRetryTimeout";
  13. #define MAX_LOCAL_PORTNAME  246
  14. /*++
  15. Routine Name:
  16.     ConfigureLPTPortDlg
  17. Routine Description:
  18.     This function handles the UI for configuring the LPT ports.
  19. Arguments:
  20.     uMsg    - message
  21.     hDlg    - handle to dialog
  22.     wParam  - wparam
  23.     lParam  - lparam
  24. Return Value:
  25.     TRUE if message handled, otherwise FALSE.
  26. --*/
  27. INT_PTR APIENTRY
  28. ConfigureLPTPortDlg(
  29.             HWND   hwnd,
  30.             UINT   msg,
  31.     __in    WPARAM wparam,
  32.     __in    LPARAM lparam
  33.     )
  34. {
  35.     switch(msg)
  36.     {
  37.     case WM_INITDIALOG:
  38.         return ConfigureLPTPortInitDialog(hwnd, (PPORTDIALOG) lparam);
  39.     case WM_COMMAND:
  40.         switch (LOWORD(wparam))
  41.         {
  42.         case IDOK:
  43.             return ConfigureLPTPortCommandOK(hwnd);
  44.         case IDCANCEL:
  45.             return ConfigureLPTPortCommandCancel(hwnd);
  46.         case IDD_CL_EF_TRANSMISSIONRETRY:
  47.             if( HIWORD(wparam) == EN_UPDATE )
  48.                 ConfigureLPTPortCommandTransmissionRetryUpdate(hwnd, LOWORD(wparam));
  49.             break;
  50.         }
  51.         break;
  52.     }
  53.     return FALSE;
  54. }
  55. /*++
  56. Routine Name:
  57.     ConfigureLPTPortInitDialog
  58. Routine Description:
  59.     Initializes the lpt port configuration dialog variables.
  60. Arguments:
  61.     hDlg    - handle to dialog
  62.     pPort   - pointer to port dialog data to initialize.
  63. Return Value:
  64.     TRUE data was initlaized, FALSE error occurred.
  65. --*/
  66. BOOL
  67. ConfigureLPTPortInitDialog(
  68.             HWND        hwnd,
  69.     __in    PPORTDIALOG pPort
  70.     )
  71. {
  72.     DWORD dwTransmissionRetryTimeout;
  73.     DWORD cbNeeded;
  74.     DWORD dwDummy;
  75.     BOOL  rc;
  76.     DWORD dwStatus;
  77.     DBGMSG(DBG_TRACE, ("ConfigureLPTPortInitDialogn"));
  78.     SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR) pPort);
  79.     SetForegroundWindow(hwnd);
  80.     SendDlgItemMessage( hwnd, IDD_CL_EF_TRANSMISSIONRETRY,
  81.                         EM_LIMITTEXT, TIMEOUT_STRING_MAX, 0 );
  82.     //
  83.     // Get the Transmission Retry Timeout from the host
  84.     //
  85.     rc = XcvData(   pPort->hXcv,
  86.                     L"GetTransmissionRetryTimeout",
  87.                     (PBYTE) &dwDummy,
  88.                     0,
  89.                     (PBYTE) &dwTransmissionRetryTimeout,
  90.                     sizeof dwTransmissionRetryTimeout,
  91.                     &cbNeeded,
  92.                     &dwStatus);
  93.     if(!rc) {
  94.         DBGMSG(DBG_WARN, ("Error %d checking TransmissionRetryTimeoutn", GetLastError()));
  95.     } else if(dwStatus != ERROR_SUCCESS) {
  96.         DBGMSG(DBG_WARN, ("Error %d checking TransmissionRetryTimeoutn", dwStatus));
  97.         SetLastError(dwStatus);
  98.         rc = FALSE;
  99.     } else {
  100.         SetDlgItemInt( hwnd, IDD_CL_EF_TRANSMISSIONRETRY,
  101.                        dwTransmissionRetryTimeout, FALSE );
  102.         SET_LAST_VALID_ENTRY( hwnd, IDD_CL_EF_TRANSMISSIONRETRY,
  103.                               dwTransmissionRetryTimeout );
  104.     }
  105.     return rc;
  106. }
  107. /*++
  108. Routine Name:
  109.     ConfigureLPTPortCommandOK
  110. Routine Description:
  111.     Handles the completion of the lpt port configuration dialog.
  112. Arguments:
  113.     hDlg    - handle to dialog
  114. Return Value:
  115.     TRUE success, FALSE an error occurred.
  116. --*/
  117. BOOL
  118. ConfigureLPTPortCommandOK(
  119.     HWND hwnd
  120.     )
  121. {
  122.     WCHAR String[TIMEOUT_STRING_MAX+1];
  123.     UINT  TransmissionRetryTimeout;
  124.     BOOL  b;
  125.     DWORD cbNeeded;
  126.     PPORTDIALOG pPort;
  127.     DWORD dwStatus;
  128.     if ((pPort = (PPORTDIALOG) GetWindowLongPtr(hwnd, GWLP_USERDATA)) == NULL)
  129.     {
  130.         dwStatus = ERROR_INVALID_DATA;
  131.         ErrorMessage (hwnd, dwStatus);
  132.         SetLastError (dwStatus);
  133.         return FALSE;
  134.     }
  135.     TransmissionRetryTimeout = GetDlgItemInt( hwnd,
  136.                                               IDD_CL_EF_TRANSMISSIONRETRY,
  137.                                               &b,
  138.                                               FALSE );
  139.     (VOID) StringCchPrintf (String, COUNTOF (String), L"%d", TransmissionRetryTimeout);
  140.     b = XcvData(pPort->hXcv,
  141.                 L"ConfigureLPTPortCommandOK",
  142.                 (PBYTE) String,
  143.                 (wcslen(String) + 1)*sizeof(WCHAR),
  144.                 (PBYTE) &cbNeeded,
  145.                 0,
  146.                 &cbNeeded,
  147.                 &dwStatus);
  148.     EndDialog(hwnd, b ? dwStatus : GetLastError());
  149.     return TRUE;
  150. }
  151. /*++
  152. Routine Name:
  153.     ConfigureLPTPortCommandCancel
  154. Routine Description:
  155.     Handles the cancelation of the lpt port configuration dialog.
  156. Arguments:
  157.     hDlg    - handle to dialog
  158. Return Value:
  159.     TRUE success, FALSE an error occurred.
  160. --*/
  161. BOOL
  162. ConfigureLPTPortCommandCancel(
  163.     HWND hwnd
  164.     )
  165. {
  166.     EndDialog(hwnd, ERROR_CANCELLED);
  167.     return TRUE;
  168. }
  169. /*++
  170. Routine Name:
  171.     ConfigureLPTPortCommandTransmissionRetryUpdate
  172. Routine Description:
  173.     Updates and validates the lpt port trasmission delay
  174.     which the user typed.
  175. Arguments:
  176.     hDlg    - handle to dialog
  177.     CtlId   - control id of the transmission edit control
  178. Return Value:
  179.     TRUE success, FALSE an error occurred.
  180. --*/
  181. BOOL
  182. ConfigureLPTPortCommandTransmissionRetryUpdate(
  183.     HWND hwnd,
  184.     WORD CtlId
  185.     )
  186. {
  187.     INT  Value;
  188.     BOOL OK;
  189.     Value = GetDlgItemInt( hwnd, CtlId, &OK, FALSE );
  190.     if( WITHINRANGE( Value, TIMEOUT_MIN, TIMEOUT_MAX ) )
  191.     {
  192.         SET_LAST_VALID_ENTRY( hwnd, CtlId, Value );
  193.     }
  194.     else
  195.     {
  196.         SetDlgItemInt( hwnd, CtlId, (UINT) GET_LAST_VALID_ENTRY( hwnd, CtlId ), FALSE );
  197.         SendDlgItemMessage( hwnd, CtlId, EM_SETSEL, 0, (LPARAM)-1 );
  198.     }
  199.     return TRUE;
  200. }
  201. /*++
  202. Routine Name:
  203.     PortNameDlg
  204. Routine Description:
  205.     This is the dialog proc for handeling a local port name modification
  206. Arguments:
  207.     uMsg    - message
  208.     hDlg    - handle to dialog
  209.     wParam  - wparam
  210.     lParam  - lparam
  211. Return Value:
  212.     TRUE if message handled, otherwise FALSE.
  213. --*/
  214. INT_PTR CALLBACK
  215. PortNameDlg(
  216.             HWND   hwnd,
  217.             WORD   msg,
  218.     __in    WPARAM wparam,
  219.     __in    LPARAM lparam
  220.     )
  221. {
  222.     switch(msg)
  223.     {
  224.     case WM_INITDIALOG:
  225.         return PortNameInitDialog(hwnd, (PPORTDIALOG)lparam);
  226.     case WM_COMMAND:
  227.         switch (LOWORD(wparam))
  228.         {
  229.         case IDOK:
  230.             return PortNameCommandOK(hwnd);
  231.         case IDCANCEL:
  232.             return PortNameCommandCancel(hwnd);
  233.         }
  234.         break;
  235.     }
  236.     return FALSE;
  237. }
  238. /*++
  239. Routine Name:
  240.     PortNameInitDialog
  241. Routine Description:
  242.     Initializes the port name dialog data
  243. Arguments:
  244.     pPort   - pointer to port dialog data to initialize.
  245. Return Value:
  246.     TRUE success, FALSE an error occurred.
  247. --*/
  248. BOOL
  249. PortNameInitDialog(
  250.             HWND        hwnd,
  251.     __in    PPORTDIALOG pPort
  252.     )
  253. {
  254.     SetForegroundWindow(hwnd);
  255.     SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR) pPort);
  256.     // Number used to limit the port name length
  257.     SendDlgItemMessage (hwnd, IDD_PN_EF_PORTNAME, EM_LIMITTEXT, MAX_LOCAL_PORTNAME, 0);
  258.     return TRUE;
  259. }
  260. /*++
  261. Routine Name:
  262.     PortNameCommandOK
  263. Routine Description:
  264.     Handles the case when the user clicks ok on the port name dialog
  265. Arguments:
  266.     hDlg    - handle to dialog
  267. Return Value:
  268.     TRUE success, FALSE an error occurred.
  269. --*/
  270. BOOL
  271. PortNameCommandOK(
  272.     HWND    hwnd
  273.     )
  274. {
  275.     PPORTDIALOG pPort;
  276.     WCHAR   string [MAX_LOCAL_PORTNAME + 1] = L"";
  277.     WCHAR   trimmedString [MAX_LOCAL_PORTNAME + 1] = L"";
  278.     WCHAR   szWideSpace[] = L" ";
  279.     BOOL    rc;
  280.     DWORD   cbNeeded;
  281.     DWORD   dwStatus;
  282.     DWORD   indexString = 0;
  283.     DWORD   indexTrimmedString = 0;
  284.     SHORT   end;
  285.     if ((pPort = (PPORTDIALOG) GetWindowLongPtr( hwnd, GWLP_USERDATA )) == NULL)
  286.     {
  287.         dwStatus = ERROR_INVALID_DATA;
  288.         ErrorMessage (hwnd, dwStatus);
  289.         SetLastError (dwStatus);
  290.         return FALSE;
  291.     }
  292.     GetDlgItemText( hwnd, IDD_PN_EF_PORTNAME, string, COUNTOF(string));
  293.     string [COUNTOF (string) - 1] = L'';
  294.     //
  295.     // Trim the string for Spaces (Front & Back)
  296.     //
  297.     // First Cut off any spaces at the front
  298.     //
  299.     while ((indexString < COUNTOF(string)) &&
  300.            (string[indexString] == szWideSpace[0]))
  301.     {
  302.         indexString++;
  303.     }
  304.     while ((indexString < COUNTOF(string)-1) && (string[indexString]))
  305.     {
  306.         trimmedString[indexTrimmedString++] = string[indexString++];
  307.     }
  308.     trimmedString[indexTrimmedString] = 0x00;
  309.     //
  310.     // Next Cut off any spaces at the end
  311.     //
  312.     end = wcslen(trimmedString)-1;
  313.     while ((end >= 0) && (trimmedString[end] == szWideSpace[0]))
  314.     {
  315.         trimmedString[end--] = 0x00;
  316.     }
  317.     rc = XcvData(   pPort->hXcv,
  318.                     L"PortIsValid",
  319.                     (PBYTE) trimmedString,
  320.                     (wcslen(string) + 1)*sizeof *string,
  321.                     (PBYTE) NULL,
  322.                     0,
  323.                     &cbNeeded,
  324.                     &dwStatus);
  325.     if (!rc) {
  326.         return FALSE;
  327.     } else if (dwStatus != ERROR_SUCCESS) {
  328.         SetLastError(dwStatus);
  329.         if ( (dwStatus == ERROR_INVALID_NAME) || (*trimmedString == 0x00) )
  330.             Message( hwnd, MSG_ERROR, IDS_LOCALMONITOR, IDS_INVALIDPORTNAME_S, string );
  331.         else
  332.             ErrorMessage(hwnd, dwStatus);
  333.         return FALSE;
  334.     } else {
  335.         pPort->pszPortName = AllocSplStr( trimmedString );
  336.         pPort->dwRet = dwStatus;
  337.         EndDialog( hwnd, ERROR_SUCCESS );
  338.         return TRUE;
  339.     }
  340. }
  341. /*++
  342. Routine Name:
  343.     PortNameCommandCancel
  344. Routine Description:
  345.     Handles the case when the user cancels the port name dialog
  346. Arguments:
  347.     hDlg    - handle to dialog
  348. Return Value:
  349.     TRUE success, FALSE an error occurred.
  350. --*/
  351. BOOL
  352. PortNameCommandCancel(
  353.     HWND hwnd
  354.     )
  355. {
  356.     EndDialog(hwnd, ERROR_CANCELLED);
  357.     return TRUE;
  358. }