TapiComm.C
上传用户:woweijixie
上传日期:2018-12-11
资源大小:131k
文件大小:12k
源码类别:

TAPI编程

开发平台:

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) 1995  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE: TapiComm.c
  9. //
  10. //  PURPOSE: Handles general routines for the TapiComm sample.
  11. //
  12. //  FUNCTIONS:
  13. //    WndProc     - Processes messages for the main window.
  14. //    MsgCommand  - Handle the WM_COMMAND messages for the main window.
  15. //    MsgCreate   - Handle the WM_CREATE messages for the main window.
  16. //    MsgSize     - Handles the WM_SIZE message by calling SendMessage() to
  17. //                  pass the WM_SIZE message onto the status bar and tool bar
  18. //                  controls. 
  19. //    MsgDestroy  - Handles the WM_DESTROY message by calling 
  20. //                  PostQuitMessage().
  21. //    CmdExit     - Handles the file exit command by calling destory 
  22. //                  window on the main window.
  23. //
  24. //  COMMENTS:
  25. //    Message dispatch table -
  26. //      For every message to be handled by the main window procedure
  27. //      place the message number and handler function pointer in
  28. //      rgmsd (the message dispatch table).  Place the prototype
  29. //      for the function in globals.h and the definition of the
  30. //      function in the appropriate module.
  31. //    Command dispatch table -
  32. //      For every command to be handled by the main window procedure
  33. //      place the command number and handler function pointer in
  34. //      rgcmd (the command dispatch table).  Place the prototype
  35. //      for the function in globals.h and the definition of the
  36. //      function in the appropriate module.
  37. //    Globals.h Contains the definitions of the structures and dispatch.c
  38. //      contains the functions that use these structures.
  39. //
  40. #include <windows.h>            // required for all Windows applications
  41. #include <windowsx.h>
  42. #include <commctrl.h>           // prototypes and defs for common controls
  43. #include "globals.h"            // prototypes specific to this application
  44. #include "statbar.h"            // prototypes specific to statbar.c
  45. #include "toolbar.h"            // prototypes specific to toolbar.c
  46. #include "EditCtls.h"
  47. #include "TapiCode.h"
  48. #include "resource.h"
  49. LRESULT CmdCreateFile1(HWND hWnd, WORD wCommand, WORD wNotify, HWND hwndCtrl);
  50. LRESULT CmdCreateFile2(HWND hWnd, WORD wCommand, WORD wNotify, HWND hwndCtrl);
  51. // Main window message table definition.
  52. MSD rgmsd[] =
  53. {
  54.     {WM_COMMAND,    MsgCommand   },
  55.     {WM_MENUSELECT, MsgMenuSelect},
  56.     {WM_SIZE,       MsgSize      },
  57.     {WM_NOTIFY,     MsgNotify    },
  58.     {WM_CLOSE,      MsgClose     },
  59.     {WM_CREATE,     MsgCreate    },
  60.     {WM_SETFOCUS,   MsgSetFocus  },
  61.     //{WM_PAINT,      MsgPaint     },
  62.     {WM_DESTROY,    MsgDestroy   }
  63. };
  64. MSDI msdiMain =
  65. {
  66.     sizeof(rgmsd) / sizeof(MSD),
  67.     rgmsd,
  68.     edwpWindow
  69. };
  70. // Main window command table definition.
  71. CMD rgcmd[] =
  72. {
  73.     {IDM_MAKECALL,    CmdMakeCall},
  74.     {IDM_HANGUPCALL,  CmdHangupCall},
  75.     {IDM_EXIT,        CmdExit},
  76.     {IDM_EDITUNDO,    CmdStub},
  77.     {IDM_EDITCUT,     CmdStub},
  78.     {IDM_EDITCOPY,    CmdStub},
  79.     {IDM_EDITPASTE,   CmdStub},
  80.     {IDM_EDITCLEAR,   CmdStub},
  81.     {IDM_ABOUT,       CmdAbout},
  82. };
  83. CMDI cmdiMain =
  84. {
  85.     sizeof(rgcmd) / sizeof(CMD),
  86.     rgcmd,
  87.     edwpWindow
  88. };
  89. //
  90. //  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
  91. //
  92. //  PURPOSE:  Processes messages for the main window.
  93. //
  94. //  PARAMETERS:
  95. //    hwnd     - window handle
  96. //    uMessage - message number
  97. //    wparam   - additional information (dependant on message number)
  98. //    lparam   - additional information (dependant on message number)
  99. //
  100. //  RETURN VALUE:
  101. //    The return value depends on the message number.  If the message
  102. //    is implemented in the message dispatch table, the return value is
  103. //    the value returned by the message handling function.  Otherwise,
  104. //    the return value is the value returned by the default window procedure.
  105. //
  106. //  COMMENTS:
  107. //    Call the DispMessage() function with the main window's message dispatch
  108. //    information (msdiMain) and the message specific information.
  109. //
  110. LRESULT CALLBACK WndProc(HWND   hwnd, 
  111.                          UINT   uMessage, 
  112.                          WPARAM wparam, 
  113.                          LPARAM lparam)
  114. {
  115.     return DispMessage(&msdiMain, hwnd, uMessage, wparam, lparam);
  116. }
  117. //
  118. //  FUNCTION: MsgCommand(HWND, UINT, WPARAM, LPARAM)
  119. //
  120. //  PURPOSE: Handle the WM_COMMAND messages for the main window.
  121. //
  122. //  PARAMETERS:
  123. //    hwnd     - window handle
  124. //    uMessage - WM_COMMAND (Unused)
  125. //    GET_WM_COMMAND_ID(wparam, lparam)   - Command identifier
  126. //    GET_WM_COMMAND_HWND(wparam, lparam) - Control handle
  127. //
  128. //  RETURN VALUE:
  129. //    The return value depends on the message number.  If the message
  130. //    is implemented in the message dispatch table, the return value is
  131. //    the value returned by the message handling function.  Otherwise,
  132. //    the return value is the value returned by the default window procedure.
  133. //
  134. //  COMMENTS:
  135. //    Call the DispCommand() function with the main window's command dispatch
  136. //    information (cmdiMain) and the command specific information.
  137. //
  138. LRESULT MsgCommand(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  139. {
  140.     return DispCommand(&cmdiMain, hwnd, wparam, lparam);
  141. }
  142. //
  143. //  FUNCTION: MsgCreate(HWND, UINT, WPARAM, LPARAM)
  144. //
  145. //  PURPOSE: Handle the WM_CREATE messages for the main window.
  146. //           and call InitCommonControls() API to initialize the
  147. //           common control library. 
  148. //
  149. //  PARAMETERS:
  150. //    hwnd     - window handle
  151. //
  152. //  RETURN VALUE:
  153. //    Return 0 if the StatusBar and ToolBar Windows could be created
  154. //    successfully. Otherwise, returns -1 to abort the main window
  155. //    creation.
  156. //
  157. //  COMMENTS:
  158. //    Call the CreateTSBars function with the main window's window handle
  159. //    information (msdiMain). 
  160. //
  161. //    Must also initialize TAPI.
  162. //
  163. LRESULT MsgCreate(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  164. {
  165.     InitCommonControls() ; // Initialize the common control library.
  166.     if (InitEditCtls(hwnd) == FALSE)
  167.         return -1;
  168.     InitializeTAPI(hwnd);
  169.     if(!(CreateTBar(hwnd) && CreateSBar(hwnd)))
  170.         return -1;   // Tool and status bars were not created, so return -1.
  171.     UpdateStatusBar("Ready to make a call.",1,0);
  172.     EnableMakeCall(hwnd, TRUE);
  173.     EnableHangupCall(hwnd, FALSE);
  174.     return 0;
  175. }
  176. //
  177. //  FUNCTION: MsgSize(HWND, UINT, WPARAM, LPARAM)
  178. //
  179. //  PURPOSE:  This function resizes the toolbar and statusbar controls. 
  180. //
  181. //
  182. //  PARAMETERS:
  183. //
  184. //    hwnd      - Window handle  (Used)
  185. //    uMessage  - Message number (Used)
  186. //    wparam    - Extra data     (Used)
  187. //    lparam    - Extra data     (Used)
  188. //
  189. //  RETURN VALUE:
  190. //
  191. //    Always returns 0 - Message handled
  192. //
  193. //  COMMENTS:
  194. //
  195. //    When the window procdure that has the status and tool bar controls
  196. //    receive the WM_SIZE message, it has to pass the message on to these 
  197. //    controls so that these controls can adjust their size accordingly. 
  198. //   
  199. //    It also has to resize the edit controls that are the UI for TAPI.
  200. //
  201. //
  202. LRESULT MsgSize(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam) 
  203. {
  204.     SendMessage(hWndStatusbar,  uMessage, wparam, lparam);
  205.     SendMessage(hWndToolbar, uMessage, wparam, lparam);
  206.     // Re-position the panes in the status bar
  207.     InitializeStatusBar(hwnd);
  208.     SizeEditCtls();
  209.     return 0 ;
  210. }
  211. //
  212. //  FUNCTION: MsgSetFocus(HWND, UINT, WPARAM, LPARAM)
  213. //
  214. //  PURPOSE:  This function puts the focus where is should be.
  215. //
  216. //
  217. //  PARAMETERS:
  218. //
  219. //    hwnd      - Window handle  (Used)
  220. //    uMessage  - Identifies window that lost focus (Used)
  221. //    wparam    - Extra data     (Used)
  222. //    lparam    - Extra data     (Used)
  223. //
  224. //  RETURN VALUE:
  225. //
  226. //    Always returns 0 - Message handled
  227. //
  228. //  COMMENTS:
  229. //
  230. //    Just signal the edit controls to set the focus where it belongs.
  231. //
  232. //
  233. LRESULT MsgSetFocus(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam) 
  234. {
  235.     SetFocusEditCtls();
  236.     return 0 ;
  237. }
  238. //
  239. //  FUNCTION: MsgDestroy(HWND, UINT, WPARAM, LPARAM)
  240. //
  241. //  PURPOSE: Calls PostQuitMessage().
  242. //
  243. //  PARAMETERS:
  244. //
  245. //    hwnd      - Window handle  (Unused)
  246. //    uMessage  - Message number (Unused)
  247. //    wparam    - Extra data     (Unused)
  248. //    lparam    - Extra data     (Unused)
  249. //
  250. //  RETURN VALUE:
  251. //
  252. //    Always returns 0 - Message handled
  253. //
  254. //  COMMENTS:
  255. //
  256. //
  257. LRESULT MsgDestroy(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  258. {
  259.     PostQuitMessage(0);
  260.     return 0;
  261. }
  262. //
  263. //  FUNCTION: MsgClose(HWND, UINT, WPARAM, LPARAM)
  264. //
  265. //  PURPOSE: Exits the application.
  266. //
  267. //  PARAMETERS:
  268. //
  269. //    hwnd      - The window.
  270. //    uMessage  - Message number (Unused)
  271. //    wparam    - Extra data     (Unused)
  272. //    lparam    - Extra data     (Unused)
  273. //
  274. //  RETURN VALUE:
  275. //
  276. //    Always returns 0 - Message handled
  277. //
  278. //  COMMENTS:
  279. //    
  280. //    Make sure TAPI is stopped before exiting.
  281. //
  282. //
  283. LRESULT MsgClose(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  284. {
  285.     ShutdownTAPI();
  286.     DestroyWindow(hwnd);
  287.     return 0;
  288. }
  289. //
  290. //  FUNCTION: MsgPaint(HWND, UINT, WPARAM, LPARAM)
  291. //
  292. //  PURPOSE: Paints the client area of the window.
  293. //
  294. //  PARAMETERS:
  295. //
  296. //    hwnd      - The window.
  297. //    uMessage  - Message number (Unused)
  298. //    wparam    - Extra data     (Unused)
  299. //    lparam    - Extra data     (Unused)
  300. //
  301. //  RETURN VALUE:
  302. //
  303. //    Always returns 0 - Message handled
  304. //
  305. //  COMMENTS:
  306. //    
  307. //    Not sure what needs to be painted, maybe text
  308. //    labeling the edit controls?
  309. //
  310. //
  311. LRESULT MsgPaint(HWND hwnd, UINT uMessage, WPARAM wparam, LPARAM lparam)
  312. {
  313.     HDC hdc;
  314.     PAINTSTRUCT ps;
  315.     hdc = BeginPaint(hwnd, &ps);
  316.     EndPaint(hwnd, &ps);
  317.     return 0;
  318. }
  319. //
  320. //  FUNCTION: CmdExit(HWND, WORD, WORD, HWND)
  321. //
  322. //  PURPOSE: Exit the application.
  323. //
  324. //  PARAMETERS:
  325. //    hwnd     - The window.
  326. //    wCommand - IDM_EXIT (unused)
  327. //    wNotify  - Notification number (unused)
  328. //    hwndCtrl - NULL (unused)
  329. //
  330. //  RETURN VALUE:
  331. //    Always returns 0 - command handled.
  332. //
  333. //  COMMENTS:
  334. //
  335. //    Make sure TAPI is stopped before exiting.
  336. //
  337. //
  338. LRESULT CmdExit(HWND hwnd, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  339. {
  340.     char szBuffer[50];   
  341.     int  cbWritten = 0;
  342.     ShutdownTAPI();
  343.     cbWritten = LoadString(hInst, wCommand, szBuffer, sizeof(szBuffer)); 
  344.     if(cbWritten == 0) 
  345.         lstrcpy(szBuffer, "Unknown Command");
  346.     UpdateStatusBar(szBuffer, 0, 0);
  347.  
  348.     DestroyWindow(hwnd);
  349.     return 0;
  350. }
  351. //
  352. //  FUNCTION: CmdHangupCall(HWND, WORD, WORD, HWND)
  353. //
  354. //  PURPOSE: Stops TAPI
  355. //
  356. //  PARAMETERS:
  357. //    hwnd     - The window.
  358. //    wCommand - IDM_HANGUPCALL (unused)
  359. //    wNotify  - Notification number (unused)
  360. //    hwndCtrl - NULL (unused)
  361. //
  362. //  RETURN VALUE:
  363. //    Always returns 0 - command handled.
  364. //
  365. //  COMMENTS:
  366. //
  367. //    Tells TAPI to close any opened lines.
  368. //
  369. //
  370. LRESULT CmdHangupCall(HWND hWnd, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  371. {
  372.     HangupCall();
  373.     return 0;
  374. }
  375. //
  376. //  FUNCTION: CmdMakeCall(HWND, WORD, WORD, HWND)
  377. //
  378. //  PURPOSE: Starts TAPI
  379. //
  380. //  PARAMETERS:
  381. //    hwnd     - The window.
  382. //    wCommand - IDM_MAKECALL (unused)
  383. //    wNotify  - Notification number (unused)
  384. //    hwndCtrl - NULL (unused)
  385. //
  386. //  RETURN VALUE:
  387. //    Always returns 0 - command handled.
  388. //
  389. //  COMMENTS:
  390. //
  391. //    Starts TAPI by calling the Dialing Dialog box.
  392. //    Code for this dialog is with the rest of the TAPI code.
  393. //
  394. //
  395. LRESULT CmdMakeCall(HWND hWnd, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  396. {
  397.     DialCall();
  398.     return 0;
  399. }