DIALDLG.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:9k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1993-1997  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE:   dialdlg.c
  9. //
  10. //  PURPOSE:   Displays the "DialDlg" dialog box
  11. //
  12. //  FUNCTIONS:
  13. //    DialDlg           - Processes messages for "DialDlg" dialog box.
  14. //    MsgDialDlgInit    - To initialize the dialdlg box and make the
  15. //                        RasDial call.
  16. //    MsgDialDlgEvent   - Process WM_RASDIALEVENT message.
  17. //    MsgDialDlgCommand - Process WM_COMMAND message.
  18. //    CmdDialDlgCancel  - Free the dialdlg box and related data.
  19. //    RasDialFunc       - RasDial callback function for Win32.
  20. //
  21. //  COMMENTS:
  22. //    Dialog box to display status of connection attempt
  23. //
  24. //
  25. #include <windows.h>            // required for all Windows applications
  26. #include <windowsx.h>
  27. #ifdef WIN16
  28. #include "win16ext.h"           // required only for win16 applications
  29. #endif
  30. #include "globals.h"            // prototypes specific to this application
  31. #include <ras.h>
  32. #include <raserror.h>
  33. #include "rasutil.h"
  34. #include "dialdlg.h"
  35. #include "phbkdlg.h"
  36. LRESULT MsgDialDlgInit(HWND, UINT, WPARAM, LPARAM);
  37. LRESULT MsgDialDlgEvent(HWND, UINT, WPARAM, LPARAM);
  38. LRESULT MsgDialDlgCommand(HWND, UINT, WPARAM, LPARAM);
  39. LRESULT CmdDialDlgCancel(HWND, WORD, WORD, HWND);
  40. #ifdef WIN32
  41. VOID WINAPI RasDialFunc( UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError );
  42. #endif
  43. // DialDlg dialog message table definition.
  44. MSD rgmsdDialDlg[] =
  45. {
  46.     {WM_RASDIALEVENT, MsgDialDlgEvent},
  47.     {WM_COMMAND,      MsgDialDlgCommand},
  48.     {WM_INITDIALOG,   MsgDialDlgInit}
  49. };
  50. MSDI msdiDialDlg =
  51. {
  52.     sizeof(rgmsdDialDlg) / sizeof(MSD),
  53.     rgmsdDialDlg,
  54.     edwpNone
  55. };
  56. // DialDlg dialog command table definition.
  57. CMD rgcmdDialDlg[] =
  58. {
  59.     {IDCANCEL,  CmdDialDlgCancel}
  60. };
  61. CMDI cmdiDialDlg =
  62. {
  63.     sizeof(rgcmdDialDlg) / sizeof(CMD),
  64.     rgcmdDialDlg,
  65.     edwpNone
  66. };
  67. // Module specific "globals"  Used when a variable needs to be
  68. // accessed in more than on handler function.
  69. HRASCONN hRasConn;
  70. #ifdef WIN32
  71. HWND   g_hDlg;
  72. #endif
  73. //
  74. //  FUNCTION: DialDlg(HWND, UINT, WPARAM, LPARAM)
  75. //
  76. //  PURPOSE:  Processes messages for "DialDlg" dialog box.
  77. //
  78. //  PARAMETERS:
  79. //    hdlg - window handle of the dialog box
  80. //    wMessage - type of message
  81. //    wparam - message-specific information
  82. //    lparam - message-specific information
  83. //
  84. //  RETURN VALUE:
  85. //    TRUE - message handled
  86. //    FALSE - message not handled
  87. //
  88. //  COMMENTS:
  89. //
  90. //
  91. LRESULT CALLBACK DialDlg(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
  92. {
  93.     return DispMessage(&msdiDialDlg, hdlg, uMessage, wparam, lparam);
  94. }
  95. //
  96. //  FUNCTION: MsgDialDlgInit(HWND, UINT, WPARAM, LPARAM)
  97. //
  98. //  PURPOSE: To initialize the dialdlg box and dial
  99. //
  100. //  PARAMETERS:
  101. //    hwnd - The window handing the message.
  102. //    uMessage - WM_INITDLG.
  103. //    wparam - Message specific data (unused).
  104. //    lparam - Message specific data (unused).
  105. //
  106. //  RETURN VALUE:
  107. //    Always returns TRUE - message handled.
  108. //
  109. //  COMMENTS:
  110. //    Registers window message for RAS event.
  111. //    Makes call to RasDial with appropriate params.
  112. //
  113. LRESULT MsgDialDlgInit(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
  114. {
  115.     RASDIALPARAMS rdParams;
  116.     char szEntry[RAS_MaxEntryName+1];
  117.     DWORD dwRet;
  118.     char  szBuf[256];
  119.     HWND  hwndEntry;
  120.     UINT  ndx;
  121.     hwndEntry = GetDlgItem( GetParent(hdlg), IDL_ENTRY);
  122.     ndx = (UINT) SendMessage( hwndEntry, LB_GETCURSEL, 0,  0L );
  123.     SendMessage( hwndEntry, LB_GETTEXT, ndx, (LPARAM)(LPSTR)szEntry );
  124.     wsprintf( (LPSTR) szBuf, "Dialing %s...", (LPSTR) szEntry );
  125.     SetWindowText( hdlg, (LPSTR)szBuf );
  126.     // setup RAS Dial Parameters
  127.     rdParams.dwSize = sizeof(RASDIALPARAMS);
  128.     lstrcpy(rdParams.szEntryName, szEntry );
  129.     rdParams.szPhoneNumber[0] = '';
  130.     rdParams.szCallbackNumber[0] = '*';
  131.     rdParams.szCallbackNumber[0] = '';
  132.     if ( g_bUseCurrent )
  133.     {
  134.         rdParams.szUserName[0] = '';
  135.         rdParams.szPassword[0] = '';
  136.         rdParams.szDomain[0] = '*';
  137.         rdParams.szDomain[1] = '';
  138.     }
  139.     else
  140.     {  
  141.         lstrcpy(rdParams.szUserName, g_szUserName );
  142.         lstrcpy(rdParams.szPassword, g_szPassword );
  143.         lstrcpy(rdParams.szDomain,   g_szDomain );
  144.     }
  145.     hRasConn = NULL;
  146. #ifdef WIN16
  147.     rgmsdDialDlg[0].uMessage = RegisterWindowMessage(RASDIALEVENT);
  148.     dwRet = RasDial( NULL, NULL, &rdParams, NULL, hdlg, &hRasConn );    
  149. #else
  150.     g_hDlg = hdlg;
  151.     dwRet = RasDial( NULL, NULL, &rdParams, 0L, (RASDIALFUNC) RasDialFunc, &hRasConn );
  152. #endif
  153.     if ( dwRet )
  154.     {
  155.         if ( RasGetErrorString( (UINT)dwRet, (LPSTR)szBuf, 256 ) != 0 )
  156.             wsprintf( (LPSTR)szBuf, "Undefined RAS Dial Error (%ld).", dwRet );
  157.         MessageBox(hdlg, (LPSTR)szBuf, szAppName, MB_OK | MB_ICONSTOP );
  158.         EndDialog(hdlg, FALSE);
  159.         return TRUE;
  160.     }
  161.     // Center the dialog over the application window
  162.     CenterWindow(hdlg, GetWindow(hdlg, GW_OWNER));
  163.     return TRUE;
  164. }
  165. //
  166. //  FUNCTION: MsgDialDlgEvent(HWND, UINT, WPARAM, LPARAM)
  167. //
  168. //  PURPOSE: To display messages during dialdlg
  169. //
  170. //  PARAMETERS:
  171. //    hwnd - The window handing the message.
  172. //    uMessage - WM_RASDIALEVENT.
  173. //    wparam - Message specific data (unused).
  174. //    lparam - Message specific data (unused).
  175. //
  176. //  RETURN VALUE:
  177. //    Always returns TRUE - message handled.
  178. //
  179. //  COMMENTS:
  180. //    Updates the text of IDT_MESSAGE to indicate the current
  181. //    state in the connection.  The dialog is closed upon
  182. //    connect or disconnect status.
  183. //
  184. LRESULT MsgDialDlgEvent(HWND hdlg, UINT uMessage, WPARAM wparam, LPARAM lparam)
  185. {
  186.     char szMessage[256];
  187.         
  188.     LoadString(hInst, GetRasConnState( (RASCONNSTATE) wparam ), szMessage, 64 );
  189.     SetDlgItemText( hdlg, IDT_MESSAGE, (LPCSTR) szMessage );
  190.                       
  191.     if ( lparam )  // error occurred
  192.     {
  193.         if ( RasGetErrorString( (UINT)lparam, szMessage, 256 ) != 0 )
  194.             wsprintf( (LPSTR)szMessage, "Undefined RAS Dial Error." );
  195.         MessageBox(hdlg, (LPSTR)szMessage, szAppName, MB_OK | MB_ICONSTOP );
  196.         PostMessage( hdlg, WM_COMMAND, (WPARAM) IDCANCEL, 0L );
  197.     }                                                                                                               
  198.     else if ( RASCS_DONE & wparam )
  199.     {
  200.         EndDialog(hdlg, TRUE);          // Exit the dialog
  201.     }
  202.     return TRUE;
  203. }
  204. //
  205. //  FUNCTION: MsgDialDlgCommand(HWND, UINT, WPARAM, LPARAM)
  206. //
  207. //  PURPOSE: Process WM_COMMAND message sent to the dialdlg box.
  208. //
  209. //  PARAMETERS:
  210. //    hwnd - The window handing the message.
  211. //    uMessage - The message number. (unused).
  212. //    wparam - Message specific data (unused).
  213. //    lparam - Message specific data (unused).
  214. //
  215. //  RETURN VALUE:
  216. //    Always returns TRUE - message handled.
  217. //
  218. //  COMMENTS:
  219. //    Uses this DispCommand function defined in wndproc.c combined
  220. //    with the cmdiDialDlg structure defined in this file to handle
  221. //    the command messages for the dialdlg dialog box.
  222. //
  223. LRESULT MsgDialDlgCommand(HWND   hwnd, 
  224.                         UINT   uMessage, 
  225.                         WPARAM wparam, 
  226.                         LPARAM lparam)
  227. {
  228.     return DispCommand(&cmdiDialDlg, hwnd, wparam, lparam);
  229. }
  230. //
  231. //  FUNCTION: CmdDialDlgCancel(HWND, WORD, WORD,  HWND)
  232. //
  233. //  PURPOSE: Free the dialdlg box and related data.
  234. //
  235. //  PARAMETERS:
  236. //    hwnd - The window handling the command.
  237. //    wCommand - IDCANCEL.
  238. //    wNotify - The notification to be handled (unused).
  239. //    hwndCtrl - NULL (unused).
  240. //
  241. //  RETURN VALUE:
  242. //    Always returns TRUE.
  243. //
  244. //  COMMENTS:    
  245. //    Closes current connection attempt and calls EndDialog
  246. //    to finish the dialog session.
  247. //
  248. LRESULT CmdDialDlgCancel(HWND hdlg, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  249. {
  250.     RasHangUp( hRasConn );
  251.     EndDialog(hdlg, FALSE);          // Exit the dialog
  252.     return TRUE;
  253. }
  254. #ifdef WIN32
  255. //  FUNCTION: RasDialFunc( UINT, RASCONNSTATE, DWORD )
  256. //
  257. //  PURPOSE: Called by RasDial, passes params onto dialog box
  258. //
  259. //  PARAMETERS:
  260. //    unMsg        - Yype of RAS event that occurred.
  261. //    rasconnstate - Connection state about to be entered. 
  262. //    dwError      - Error code that may have occurred.
  263. //
  264. //  COMMENTS:
  265. //    appropriate action is taken in the WM_RASDIALMESSAGE handler
  266. VOID WINAPI RasDialFunc( UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError )
  267. {
  268.     PostMessage( g_hDlg,
  269.                  rgmsdDialDlg[0].uMessage,
  270.                  (WPARAM) rasconnstate,
  271.                  (LPARAM) dwError );
  272. }
  273. #endif