亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? extapiasync.cpp

?? Cellcore. ExTAPI,ExTAPIAsync,SMS,TAPI
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			}

			// set the currently selected item
			SendMessage(g_hwndOpList, LB_SETCURSEL, 0, 0);

			break;

		case WM_COMMAND:
			switch (wParam) {			
				case IDM_EXTAPIA_QUIT:
					CleanupLB();
					EndDialog(hDlg, 0);
					break;

				case IDM_EXTAPIA_REG:
					{
						RegisterNewOperator();
						break;
					}

				default:
					bProcessedMsg = FALSE;
					break;
			}
			break;
		
		default:
			bProcessedMsg = FALSE;
			break;
	}

	return bProcessedMsg;
}

// ***************************************************************************
// Function Name: InitDialog
// 
// Purpose: Sizes a dialog box to be full screen and adds the menus
//
// Arguments:
//	hDlg = the HWND of the dialog box
//	nToolBarId = the ID of the menu bar to add
//
// Return Values:
//	TRUE if successful, FALSE otherwise
//
// Description:
//	This function simply takes an HWND for a dialog, makes it full screen, adds
//	a menu bar, and sets the title bar to be the title of the application.

BOOL InitDialog(const HWND hDlg, UINT nToolBarId)
{
	// Specify that the dialog box should stretch full screen
	SHINITDLGINFO shidi;
	ZeroMemory(&shidi, sizeof(shidi));
	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_SIZEDLGFULLSCREEN;
	shidi.hDlg = hDlg;

	// set up Soft Keys menu
	SHMENUBARINFO mbi;
	ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
	mbi.cbSize = sizeof(SHMENUBARINFO);
	mbi.hwndParent = hDlg;
	mbi.nToolBarId = nToolBarId;
	mbi.hInstRes = g_hInstance;

	// If we could not initialize the dialog box, return an error
	if (!(SHInitDialog(&shidi) && SHCreateMenuBar(&mbi))) {
		return FALSE;
	}

	// set the title bar
	VERIFY(SetWindowText(hDlg, g_szTitle));

	// In order to make Back work properly, it's necessary to 
	// override it and then call the appropriate SH API
	(void)SendMessage(mbi.hwndMB, SHCMBM_OVERRIDEKEY, VK_TBACK, 
					  MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, 
								 SHMBOF_NODEFAULT | SHMBOF_NOTIFY));

	return TRUE;
}

// ***************************************************************************
// Function Name: TAPIProc
// 
// Purpose: Callback function for asynchronous TAPI calls
//
// Arguments: Standard TAPI callback arguments
//
// Return Values: None
//
// Description:
//	Normally, this function would respond to any messages created by calls to
//	asynchronous TAPI functions.  One would definitely want to keep track of the
//	request numbers so they could be matched to their replies.  However, since this 
//	program only has one asynchronous call, we just assume that anything that passes
//	through here was a reply to that call.

void CALLBACK TAPIProc(DWORD hDevice, DWORD dwMessage, DWORD dwInstance,
					   DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
{
	// since we only made one asynch request, we just want to see if it was
	// successful or not.  A dwParam2 of 0 indicates success.
	if (dwMessage == LINE_REPLY) {
		if (!dwParam2) {
			MessageBox(g_hDlg, TEXT("LINE_REPLY: Success!"), 
					   g_szTitle, MB_OK | MB_ICONINFORMATION);
		} else {
			MessageBox(g_hDlg, TEXT("LINE_REPLY: Failure"), 
					   g_szTitle, MB_OK | MB_ICONERROR);
		}
		// Update the Current Operator text box
		GetCurrentOperator(g_hDlg);
	}
}

// ***************************************************************************
// Function Name: GetCurrentOperator
// 
// Purpose: Get the current operator and update the dialog display
//
// Arguments:
//	hDlg - the dialog containing the IDC_EXTAPIA_CUROP control
//
// Return Values:
//	TRUE if successful, FALSE otherwise
//
// Side Effects:
//	Updates the text for control IDC_EXTAPIA_CUROP
//
// Description:
//	This function simply calls the lineGetCurrentOperator function and updates
//	the display with the results.

BOOL GetCurrentOperator(HWND hDlg)
{
	LINEOPERATOR CurrentOperator;
	if (lineGetCurrentOperator(g_hLine, &CurrentOperator)) {
		return FALSE;
	}
	SetDlgItemText(hDlg, IDC_EXTAPIA_CUROP, CurrentOperator.lpszLongName);

	return TRUE;
}

// ***************************************************************************
// Function Name: GetAvailableOperators
// 
// Purpose: Get the available operators and update the dialog display
//
// Arguments:
//	hDlg - the dialog containing the IDC_EXTAPIA_CUROP control
//
// Return Values:
//	TRUE if successful, FALSE otherwise
//
// Side Effects:
//	Updates the text in the listbox with HWND g_hwndOpList
//	Allocates memory to copy the operator strings
//
// Description:
//	This function simply calls the lineGetOperatorStatus function and updates
//	the display with the results.  If there are more operators than can fit in pbInit
//	it also temporarily allocates memory.

BOOL GetAvailableOperators(HWND hDlg)
{
	// set up the initial mega data structure
	BYTE pbInit[REASONABLE_BUFFER];
	LPLINEOPERATORSTATUS plosOperatorStatus = (LPLINEOPERATORSTATUS)pbInit;
	LPBYTE pLineOperatorStatusBytes = NULL;
	LPTSTR lpszItemData;
	DWORD dwNeededSize;
	int iResult;

	plosOperatorStatus->dwTotalSize = REASONABLE_BUFFER;
	if (lineGetOperatorStatus(g_hLine, plosOperatorStatus)) {
		return FALSE;
	}

	// check to see if our buffer was large enough
	if (plosOperatorStatus->dwNeededSize >= plosOperatorStatus->dwTotalSize) {
		// allocate a byte array and cast it to a LPLINEOPERATORSTATUS
		dwNeededSize = plosOperatorStatus->dwNeededSize;
		pLineOperatorStatusBytes = new BYTE[dwNeededSize];
		if (!pLineOperatorStatusBytes) {
			return FALSE;
		}
		plosOperatorStatus = (LPLINEOPERATORSTATUS)pLineOperatorStatusBytes;
		
		// call lGOS again to fill the new structure
		plosOperatorStatus->dwTotalSize = dwNeededSize;
		if (lineGetOperatorStatus(g_hLine, plosOperatorStatus)) {
			delete[] pLineOperatorStatusBytes;
			return FALSE;
		}
	}

	// set the pointer to the first available operator and iterate
	LPLINEOPERATOR ploOperator;
	DWORD dwOperatorNumber;
	ploOperator = (LPLINEOPERATOR)((LPBYTE)plosOperatorStatus+(plosOperatorStatus->dwAvailableOffset));
	for(dwOperatorNumber = 0; 
		dwOperatorNumber < plosOperatorStatus->dwAvailableCount; 
		dwOperatorNumber++) {
		// add the element to the listbox
		iResult = SendMessage(g_hwndOpList, LB_ADDSTRING, 0, (LPARAM) ploOperator->lpszLongName);

		// copy the lpszNumName and store the pointer as ItemData
		if (iResult >= LB_OKAY) {
			lpszItemData = _tcsdup(ploOperator->lpszNumName);
			if (!lpszItemData) {
				delete[] pLineOperatorStatusBytes;
				return FALSE;
			}
			SendMessage(g_hwndOpList, LB_SETITEMDATA, iResult, (LPARAM) lpszItemData);
		} else {
			delete[] pLineOperatorStatusBytes;
			return FALSE;
		}

		// increment the pointer
		ploOperator++;
	}

	// cleanup
	delete[] pLineOperatorStatusBytes;
	return TRUE;
}

// ***************************************************************************
// Function Name: RegisterNewOperator
// 
// Purpose: call lineRegister on the currently selected operator
//
// Arguments: none
//
// Return Values: none
//
// Description:
//	This function simply takes the currently selected member of g_hwndOpList and
//	tries to register it as a new operator.  lineRegister is asynchronous, so the
//	result of this call is posted to TAPIProc.

void RegisterNewOperator()
{
	LPTSTR lpszNumName;
	int iCurSel, iResult;

	iCurSel = SendMessage(g_hwndOpList, LB_GETCURSEL, 0, 0);
	if (iCurSel != LB_ERR) {
		// get the provider name
		lpszNumName = (LPTSTR) SendMessage(g_hwndOpList, LB_GETITEMDATA, 
										   (WPARAM) iCurSel, (LPARAM) 0);

		// now try to set the current provider
		// normally we would store this ID and verify it in TAPIProc, but since we are
		// only making one asynchronous request, we ignore this value...
		iResult = lineRegister(g_hLine, LINEREGMODE_MANUAL, 
							   lpszNumName, LINEOPFORMAT_NUMERIC);
	} else {
		MessageBox(NULL, TEXT("Unable to get current selection"),
				   TEXT("Error!!!"), MB_OK | MB_ICONERROR);
	}

}

// ***************************************************************************
// Function Name: CleanupLB
// 
// Purpose: free the strings pointed to by a listbox's itemdata
//
// Arguments: none
//
// Return Values: none
//
// Description:
//	This function simply iterates through the members of a listbox, gets their
//	item data values, which should be pointers to strings, and frees them.

void CleanupLB()
{
	int iResult;
	LPTSTR lpszNumName;
	
	// get the number of items in the listbox
	iResult = SendMessage(g_hwndOpList, LB_GETCOUNT, 0, 0);
	if (iResult != LB_ERR) {
		for (int i = 0; i < iResult; i++) {
			lpszNumName = (LPTSTR) SendMessage(g_hwndOpList, LB_GETITEMDATA, (WPARAM) i, (LPARAM) 0);
			free(lpszNumName);
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图色小说| 成人美女在线观看| 国产98色在线|日韩| 在线亚洲高清视频| 久久久99精品免费观看不卡| 亚洲综合丁香婷婷六月香| 久久国产剧场电影| 91精品1区2区| 国产精品久久久久久一区二区三区| 日韩电影在线一区二区三区| 99久久99久久综合| 久久久噜噜噜久久人人看| 日韩电影在线一区二区| 色8久久精品久久久久久蜜| 欧美国产国产综合| 国产在线精品一区二区三区不卡| 欧美猛男男办公室激情| 亚洲欧美日韩电影| 成人免费av资源| 国产三级一区二区三区| 久久激情综合网| 欧美浪妇xxxx高跟鞋交| 一级特黄大欧美久久久| 91美女视频网站| 国产精品不卡视频| 国产成a人亚洲| 国产亚洲精品aa午夜观看| 麻豆精品一区二区| 精品日产卡一卡二卡麻豆| 午夜欧美在线一二页| 欧美色网站导航| 亚洲精品福利视频网站| 成人a免费在线看| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩国产欧美在线视频| 51精品视频一区二区三区| 亚洲午夜三级在线| 欧美日韩在线精品一区二区三区激情| 一色屋精品亚洲香蕉网站| 岛国精品在线播放| 国产精品网站一区| 丁香激情综合五月| 国产精品嫩草影院av蜜臀| 国产成人免费在线| 国产精品久久久久久久久果冻传媒| 国产成人福利片| 国产日韩欧美激情| 成人动漫中文字幕| 亚洲欧美日韩国产一区二区三区 | 99精品久久只有精品| 亚洲国产成人在线| 91天堂素人约啪| 亚洲成人动漫在线免费观看| 欧美亚洲日本国产| 视频精品一区二区| 91精品欧美久久久久久动漫| 精品在线你懂的| 久久久久久久久蜜桃| 大白屁股一区二区视频| 日韩理论在线观看| 91精品欧美一区二区三区综合在| 日韩中文字幕不卡| 精品国产一区二区三区久久影院| 国产露脸91国语对白| 久久综合九色综合97婷婷| 成人91在线观看| 亚洲电影视频在线| 日韩一级片网站| 成人午夜视频免费看| 一区二区三区不卡视频在线观看| 91精品一区二区三区久久久久久| 国产一区欧美一区| 亚洲一区二区三区爽爽爽爽爽| 日韩精品一区国产麻豆| av亚洲精华国产精华精华| 日韩vs国产vs欧美| www欧美成人18+| 欧美午夜宅男影院| 国产成人一级电影| 日韩av不卡一区二区| 国产欧美一区二区三区在线老狼| 日韩一区二区在线观看视频 | 日本欧美肥老太交大片| 精品国产91乱码一区二区三区 | 国产高清不卡二三区| 亚洲一区日韩精品中文字幕| 精品国产三级a在线观看| 日本乱码高清不卡字幕| 国产精品系列在线播放| 亚洲成a人片在线观看中文| 国产精品欧美一级免费| 日韩一二三区视频| 在线免费观看日本一区| 成人黄色a**站在线观看| 蜜臀av性久久久久av蜜臀妖精| 一区二区三区四区高清精品免费观看 | 9191成人精品久久| 91久久精品国产91性色tv| 粉嫩蜜臀av国产精品网站| 美女爽到高潮91| 午夜在线成人av| 一区二区三区在线免费| 亚洲欧洲av一区二区三区久久| 久久综合网色—综合色88| 欧美日韩国产成人在线91| 色综合天天综合在线视频| aaa亚洲精品| 99久久99久久精品免费看蜜桃| 国产精品一区二区x88av| 久久激情五月婷婷| 毛片av一区二区| 麻豆国产91在线播放| 日韩av一区二| 琪琪一区二区三区| 美女任你摸久久 | 99麻豆久久久国产精品免费| 国产传媒欧美日韩成人| 国产一区二区三区久久悠悠色av| 蜜臀av一区二区三区| 麻豆精品国产91久久久久久| 麻豆国产欧美一区二区三区| 精品在线视频一区| 东方欧美亚洲色图在线| 成人avav影音| 色综合久久久久综合体桃花网| 91视频你懂的| 欧美亚洲一区二区三区四区| 欧美日本在线一区| 日韩欧美久久久| xnxx国产精品| 亚洲欧美一区二区三区久本道91 | 蜜臂av日日欢夜夜爽一区| 日韩高清不卡一区| 久久激五月天综合精品| 国产精品综合av一区二区国产馆| 国产在线精品一区二区夜色 | 国产精品人成在线观看免费| 国产精品久久久久久久久久久免费看 | 色菇凉天天综合网| 欧美酷刑日本凌虐凌虐| 日韩写真欧美这视频| 亚洲精品在线一区二区| 国产精品人成在线观看免费| 亚洲午夜影视影院在线观看| 日产国产欧美视频一区精品| 国产成人综合自拍| 在线中文字幕一区| 精品精品欲导航| 成人免费视频在线观看| 午夜精品一区二区三区免费视频| 激情国产一区二区 | 亚洲女厕所小便bbb| 日本vs亚洲vs韩国一区三区二区 | 极品少妇一区二区| 99久久精品国产麻豆演员表| 在线成人高清不卡| 中文字幕免费不卡在线| 亚洲高清免费在线| 粉嫩在线一区二区三区视频| 欧美日韩高清影院| 国产精品美女久久久久久久网站| 亚洲成人av一区二区| 岛国一区二区三区| 欧美一区二区三区人| 综合在线观看色| 精油按摩中文字幕久久| 在线观看av一区| 国产欧美日韩三区| 日本视频在线一区| 91国产免费看| 国产精品国产三级国产普通话99| 日本不卡一区二区三区高清视频| 99re热视频精品| 国产欧美一区二区三区在线看蜜臀| 偷拍一区二区三区四区| 色8久久人人97超碰香蕉987| 国产免费成人在线视频| 美国三级日本三级久久99| 欧美日韩色综合| 亚洲日本一区二区三区| 国产mv日韩mv欧美| 精品国产免费人成电影在线观看四季 | 亚洲天堂成人在线观看| 国产一区二区不卡| 日韩一区二区三区视频| 一区二区三区**美女毛片| www..com久久爱| 国产人成亚洲第一网站在线播放| 日本中文在线一区| 欧美人成免费网站| 亚洲一区在线免费观看| 一本大道久久a久久综合| 欧美国产乱子伦| 成人免费的视频| 国产精品久久久久一区二区三区共| 国产成人在线免费观看| 国产欧美va欧美不卡在线| 国产suv精品一区二区三区| 久久九九99视频| 成人激情午夜影院|