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

📄 simple.c

📁 支持XMODEM,YMODEM,FAX协议的串口通信软件包的下一个:基于TAPI应用的通信应用
💻 C
字号:
//---------------------------------------------------------------------------
//
//  Module: simple.c
//
//  Purpose:
//     The sample application demonstrates the usage of the Simple TAPI
//     API.
//
//---------------------------------------------------------------------------
//

#include "tapi.h"
#include "resource.h"
#include <winuser.h>

void MakeLettersIntoDigits (LPSTR dialstring);
LRESULT CALLBACK DialDialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(
               HINSTANCE hInstance,
               HINSTANCE hPrevInstance,
               LPSTR lpCmdLine,
               int nCmdShow
               );
BOOL NEAR InitApplication( HANDLE hInstance );
HWND NEAR InitInstance( HANDLE hInstance, int nCmdShow );
LRESULT FAR PASCAL  SIMPLEWndProc( HWND hWnd, UINT uMsg,
                               WPARAM wParam, LPARAM lParam );


#define MAXDSZ	30		//max size of dial string parts
char szDialString[100];	//phone number to dial
HINSTANCE ghInst;		//global instance handle, for now.
HWND hSIMPLEWnd;		//global window handle
char *gszSimpleClass="Simple";	//window class name
char *gszAppName="Simple";	//application name

//
//   FUNCTION: WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
//
//   PURPOSE: calls initialization function, processes message loop
//
//   COMMENTS:
//
//      Windows recognizes this function by name as the initial entry point
//      for the program.  This function calls the application initialization
//      routine, if no other instance of the program is running, and always
//      calls the instance initialization routine.  It then executes a
//      message retrieval and dispatch loop that is the top-level control
//      structure for the remainder of execution.  The loop is terminated
//      when a WM_QUIT	message is received, at which time this function
//      exits the application instance by returning the value passed by
//      PostQuitMessage().
//
//      If this function must abort before entering the message loop, it
//      returns the conventional value NULL.
//

int APIENTRY WinMain(
               HINSTANCE hInstance,
               HINSTANCE hPrevInstance,
               LPSTR lpCmdLine,
               int nCmdShow
               )
{
   MSG msg;

   // Other instances of app running?
   if (!hPrevInstance) {
      // Initialize shared things
      if (!InitApplication(hInstance)) {
         return (FALSE);               // Exits if unable to initialize
      }
   }

   if (NULL == (hSIMPLEWnd = InitInstance( hInstance, nCmdShow )))
      return ( FALSE ) ;

	ghInst = hInstance;

	while (GetMessage(&msg, NULL, 0, 0)) {
   	    if (!TranslateAccelerator (msg.hwnd, NULL, &msg)) {
			TranslateMessage(&msg);// Translates virtual key codes
   	 		DispatchMessage(&msg); // Dispatches message to window
   	 	}
	} /* end while (not a quit message) */

   // Returns the value from PostQuitMessage
   return (msg.wParam);

   // This will prevent 'unused formal parameter' warnings
   lpCmdLine;
}

//---------------------------------------------------------------------------
//  BOOL NEAR InitApplication( HANDLE hInstance )
//
//  Description:
//     First time initialization stuff.  This registers information
//     such as window classes.
//
//  Parameters:
//     HANDLE hInstance
//        Handle to this instance of the application.
//
//---------------------------------------------------------------------------
BOOL NEAR InitApplication( HANDLE hInstance )
{
   WNDCLASS  wndclass ;

   // register window class

   wndclass.style =         0 ;
   wndclass.lpfnWndProc =   SIMPLEWndProc ;
   wndclass.cbClsExtra =    0 ;
   wndclass.cbWndExtra =    sizeof( DWORD ) ;
   wndclass.hInstance =     hInstance ;
   wndclass.hIcon =         LoadIcon( hInstance, MAKEINTRESOURCE( SIMPLEICON ) );
   wndclass.hCursor =       LoadCursor( NULL, IDC_ARROW ) ;
   wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ;
   wndclass.lpszMenuName =  MAKEINTRESOURCE( SIMPLEMENU ) ;
   wndclass.lpszClassName = gszSimpleClass ;

   return( RegisterClass( &wndclass ) ) ;

} // end of InitApplication()

//---------------------------------------------------------------------------
//  HWND NEAR InitInstance( HANDLE hInstance, int nCmdShow )
//
//  Description:
//     Initializes instance specific information.
//
//  Parameters:
//     HANDLE hInstance
//        Handle to instance
//
//     int nCmdShow
//        How do we show the window?
//
//---------------------------------------------------------------------------
HWND NEAR InitInstance( HANDLE hInstance, int nCmdShow )
{
   HWND  hSIMPLEWnd ;

   // create the SIMPLE window
   hSIMPLEWnd = CreateWindow( gszSimpleClass, gszAppName,
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           CW_USEDEFAULT, CW_USEDEFAULT,
                           NULL, NULL, hInstance, NULL ) ;

   if (NULL == hSIMPLEWnd)
      return ( NULL ) ;

   ShowWindow( hSIMPLEWnd, nCmdShow ) ;
   UpdateWindow( hSIMPLEWnd ) ;

   return ( hSIMPLEWnd ) ;

} // end of InitInstance()

//---------------------------------------------------------------------------
//  LRESULT FAR PASCAL  SIMPLEWndProc( HWND hWnd, UINT uMsg,
//                                 WPARAM wParam, LPARAM lParam )
//
//  Description:
//     This is the SIMPLE Window Proc.  This handles ALL messages
//     to the simple window.
//
//  Parameters:
//     As documented for Window procedures.
//
//---------------------------------------------------------------------------
LRESULT FAR PASCAL  SIMPLEWndProc( HWND hWnd, UINT uMsg,
                               WPARAM wParam, LPARAM lParam )
{
LONG lrc;

   switch (uMsg)
   {
      case WM_CREATE:
		break;

      case WM_COMMAND:
      {
         switch ((DWORD) wParam)
         {

            case IDM_DIAL:
				if (!DialogBox (GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIAL), 
					hWnd, (DLGPROC)DialDialogProc))
					break;
			   //make the call
			   if (tapiRequestMakeCall(szDialString, gszAppName, 
			   						NULL, NULL)) {
					MessageBox (hWnd, "Error Making Call", "Error making call", MB_OK);
					break;
			   }
               break;

            case IDM_ABOUT:
               break;

            case IDM_EXIT:
               PostMessage( hWnd, WM_CLOSE, 0, 0L ) ;
               break ;
         }
      }
      break ;

      case WM_PAINT:
         break ;

      case WM_SIZE:
         break ;

      case WM_DESTROY:
         PostQuitMessage( 0 ) ;
         break ;

      case WM_CLOSE:
	         PostQuitMessage( 0 ) ;
            break ;

         // fall through

      default:
         return( DefWindowProc( hWnd, uMsg, wParam, lParam ) ) ;
   }
   return 0L ;

} // end of SIMPLEWndProc()
/****************************************************************************
    FUNCTION: DialDialogProc
****************************************************************************/
LRESULT CALLBACK DialDialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
char szBuf[MAXDSZ];
static char szCurArea[10], szCurCountry[10];
BOOL bForeignCountry= FALSE;

  if ((message == WM_COMMAND) && (LOWORD(wParam) == IDOK)) {
	szDialString[0] = 0;

	//handle tone vs pulse
	if (IsDlgButtonChecked(hwnd, IDC_USETONEDIALING))
		strcat(szDialString, "T");
	if (IsDlgButtonChecked(hwnd, IDC_USEPULSEDIALING))
		strcat(szDialString, "P");

	//get dial prefix
  	GetDlgItemText(hwnd, IDC_DIALPREFIX, szBuf, MAXDSZ-1);
	strcat(szDialString, szBuf);

	//handle wait for dial tone
	if (IsDlgButtonChecked(hwnd, IDC_WAITFORDIALTONE))
		strcat(szDialString, "W");

	//get country code
  	GetDlgItemText(hwnd, IDC_COUNTRYCODE, szBuf, MAXDSZ-1);
	MakeLettersIntoDigits (szBuf);
	if (strcmp(szBuf, szCurCountry)) {
		strcat(szDialString, szBuf);
		bForeignCountry = TRUE;
	}

	//get area code
  	GetDlgItemText(hwnd, IDC_AREACODE, szBuf, MAXDSZ-1);
	MakeLettersIntoDigits (szBuf);
	if (strcmp(szBuf, szCurArea) || bForeignCountry)
		strcat(szDialString, szBuf);

	//get phone number
  	GetDlgItemText(hwnd, IDC_PHONENUMBER, szBuf, MAXDSZ-1);
	MakeLettersIntoDigits (szBuf);
	strcat(szDialString, szBuf);

    EndDialog (hwnd, TRUE);
    return TRUE;
  }
  if ((message == WM_COMMAND) && (LOWORD(wParam) == IDCANCEL)) {
    EndDialog (hwnd, FALSE);
    return TRUE;
  }
  if (message == WM_INITDIALOG) {
	//get current country and area
	tapiGetLocationInfo (szCurCountry, szCurArea);
	// initialize dialog fields
  	SetDlgItemText(hwnd, IDC_COUNTRYCODE, szCurCountry);
  	SetDlgItemText(hwnd, IDC_AREACODE, szCurArea);
	CheckDlgButton (hwnd, IDC_USETONEDIALING, BST_CHECKED);
    return TRUE;
  }
  return FALSE;
}

⌨️ 快捷键说明

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