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

📄 main.cpp

📁 C-Media8738/8768声卡驱动开发源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		}

		if (CompareString(MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT), NORM_IGNORECASE, szServiceName, -1, TEXT("cmipci"), -1) == CSTR_EQUAL) {
			return TRUE;
		}
		nIndex++;
	}

	SetupDiDestroyDeviceInfoList(pDev->Info);
	pDev->Info = NULL;
	return FALSE;
}

BOOL getDeviceInterfaceDetail(const GUID* category, CMIDEV* pDev)
{
	SP_DEVICE_INTERFACE_DATA  deviceInterfaceData;
	DWORD                     dataSize = 0;
	BOOL                      result;
	PTSTR                     pnpStr = NULL;
	HDEVINFO                  hDevInfoWithInterface;
	SP_DEVICE_INTERFACE_DATA  DeviceInterfaceData;
	ULONG                     ulDeviceInterfaceDetailDataSize = 0;

	// get the PnP string
	SetupDiGetDeviceInstanceId(pDev->Info, &(pDev->InfoData), NULL, 0, &dataSize);
	if ((GetLastError() != ERROR_INSUFFICIENT_BUFFER) || (!dataSize)) {
		PrintLastError("SetupDiGetDeviceInstanceId()");
		return FALSE;
	}
	pnpStr = (PTSTR)LocalAlloc(LPTR, dataSize * sizeof(TCHAR));
	if (!pnpStr) {
		PrintLastError("LocalAlloc()");
		return FALSE;
	}
	result = SetupDiGetDeviceInstanceId(pDev->Info, &(pDev->InfoData), pnpStr, dataSize, NULL);
	if (!result) {
		PrintLastError("SetupDiGetDeviceInstanceId()");
		LocalFree(pnpStr);
		return FALSE;
	}
	hDevInfoWithInterface = SetupDiGetClassDevs(&KSCATEGORY_TOPOLOGY, pnpStr, NULL, DIGCF_DEVICEINTERFACE);
	LocalFree(pnpStr);
	if (hDevInfoWithInterface == INVALID_HANDLE_VALUE) {
		PrintLastError("SetupDiGetClassDevs()");
		return FALSE;
	}

	// get the device interface data
	DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData);
	result = SetupDiEnumDeviceInterfaces(hDevInfoWithInterface, NULL, &KSCATEGORY_TOPOLOGY, 0, &DeviceInterfaceData);
	if (!result)	{
		PrintLastError("SetupDiEnumDeviceInterfaces()");
		SetupDiDestroyDeviceInfoList(hDevInfoWithInterface);
		return FALSE;
	}

	// get the device interface detail data
	dataSize = 0;
	SetupDiGetDeviceInterfaceDetail(hDevInfoWithInterface, &DeviceInterfaceData, NULL, 0, &dataSize, NULL);
	if ((GetLastError() != ERROR_INSUFFICIENT_BUFFER) || (!dataSize)) {
		PrintLastError("SetupDiGetDeviceInterfaceDetail()");
		SetupDiDestroyDeviceInfoList(hDevInfoWithInterface);
		return FALSE;
	}
	pDev->InterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LPTR, dataSize);
	if (!pDev->InterfaceDetailData) {
		PrintLastError("LocalAlloc()");
		SetupDiDestroyDeviceInfoList(hDevInfoWithInterface);
		return FALSE;
	}
	pDev->InterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
	result = SetupDiGetDeviceInterfaceDetail(hDevInfoWithInterface, &DeviceInterfaceData, pDev->InterfaceDetailData, dataSize, NULL, NULL);
	SetupDiDestroyDeviceInfoList(hDevInfoWithInterface);
	if (!result) {
		PrintLastError("SetupDiGetDeviceInterfaceDetail()");
		LocalFree(pDev->InterfaceDetailData);
		pDev->InterfaceDetailData = NULL;
		return FALSE;
	}

	return TRUE;

}

BOOL getDriverData(CMIDEV* pDev)
{
	BOOL       result;
	HANDLE     hDevice;
	KSPROPERTY KSProp;
	DWORD      dataSize;

	hDevice = CreateFile(pDev->InterfaceDetailData->DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
	if (hDevice == INVALID_HANDLE_VALUE) {
		PrintLastError("CreateFile()");
		return FALSE;
	}
	KSProp.Set   = KSPROPSETID_CMI;
	KSProp.Flags = KSPROPERTY_TYPE_GET;
	KSProp.Id    = KSPROPERTY_CMI_GET;
	result = DeviceIoControl(hDevice, IOCTL_KS_PROPERTY, &KSProp, sizeof(KSProp), &cmiData, sizeof(cmiData), &dataSize, NULL);
	CloseHandle(hDevice);

	if (!result) {
		PrintLastError("DeviceIoControl()");
		return FALSE;
	}

	return TRUE;
}

BOOL setDriverData(CMIDEV* pDev)
{
	BOOL       result;
	HANDLE     hDevice;
	KSPROPERTY KSProp;
	DWORD      dataSize;

	hDevice = CreateFile(pDev->InterfaceDetailData->DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
	if (hDevice == INVALID_HANDLE_VALUE) {
		PrintLastError("CreateFile()");
		return FALSE;
	}
	KSProp.Set   = KSPROPSETID_CMI;
	KSProp.Flags = KSPROPERTY_TYPE_SET;
	KSProp.Id    = KSPROPERTY_CMI_SET;
	result = DeviceIoControl(hDevice, IOCTL_KS_PROPERTY, &KSProp, sizeof(KSProp), &cmiData, sizeof(cmiData), &dataSize, NULL);
	CloseHandle(hDevice);

	if (!result) {
		PrintLastError("DeviceIoControl()");
		return FALSE;
	}

	return TRUE;
}

void cleanUp()
{
	stopTestTone();
	if (cmiTopologyDev.Info) {
		SetupDiDestroyDeviceInfoList(cmiTopologyDev.Info);
		cmiTopologyDev.Info = NULL;
	}
	if (cmiTopologyDev.InterfaceDetailData) {
		LocalFree(cmiTopologyDev.InterfaceDetailData);
		cmiTopologyDev.InterfaceDetailData = NULL;
	}
	if (hURLFont) {
		DeleteObject(hURLFont); //hm?
		hURLFont = NULL;
	}
}

BOOL openDevice()
{
	if (!getDeviceInfo(&KSCATEGORY_TOPOLOGY, &cmiTopologyDev)) {
		PrintLastError("getDeviceInfo()");
		return FALSE;
	}

	if (!getDeviceInterfaceDetail(&KSCATEGORY_TOPOLOGY, &cmiTopologyDev)) {
		PrintLastError("getDeviceInterfaceDetail()");
		return FALSE;
	}

	return TRUE;
}

void updateChannelBoxes(HWND hWnd)
{
	switch (SendMessage(GetDlgItem(hWndChild[0], IDCB_CHANNELCONFIG), CB_GETCURSEL, 0, 0)) {
		case 0: // stereo
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BLEFT), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BRIGHT), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CENTER), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_SUB), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CLEFT), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CRIGHT), SW_HIDE);
			SetDlgItemText(hWnd, IDT_SWAPJACKS, "");
			break;
		case 1: // quad
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BLEFT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BRIGHT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CENTER), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_SUB), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CLEFT), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CRIGHT), SW_HIDE);
			SetDlgItemText(hWnd, IDT_SWAPJACKS, "");
			break;
		case 2: // 5.1
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BLEFT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BRIGHT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CENTER), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_SUB), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CLEFT), SW_HIDE);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CRIGHT), SW_HIDE);
			SetDlgItemText(hWnd, IDT_SWAPJACKS, "BL/BR and C/LFE jacks are swapped!");
			break;
		case 3: // 7.1
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BLEFT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_BRIGHT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CENTER), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_SUB), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CLEFT), SW_SHOW);
			ShowWindow(GetDlgItem(hWndChild[0], IDC_CRIGHT), SW_SHOW);
			SetDlgItemText(hWnd, IDT_SWAPJACKS, "BL/BR and C/LFE jacks are swapped!");
			break;
	}
}


BOOL setDlgItems(HWND hWnd)
{
	HWND hWndItem;
	char buffer[127];

	if (!getDriverData(&cmiTopologyDev)) {
		PrintLastError("getDriverData()");
		return FALSE;
	}

	// 'About' tab
	SetWindowText(GetDlgItem(hWndChild[NUM_TABS-1], IDC_VERSION), cmiData.driverVersion);
	wsprintf(buffer, "%d", cmiData.hardwareRevision);
	SetWindowText(GetDlgItem(hWndChild[NUM_TABS-1], IDC_HWREV), buffer);
	wsprintf(buffer, "%d", cmiData.maxChannels);
	SetWindowText(GetDlgItem(hWndChild[NUM_TABS-1], IDC_MAXCHAN), buffer);
	wsprintf(buffer, "%04X", cmiData.IOBase);
	SetWindowText(GetDlgItem(hWndChild[NUM_TABS-1], IDC_BASEADR), buffer);
	wsprintf(buffer, "%04X", cmiData.MPUBase);
	SetWindowText(GetDlgItem(hWndChild[NUM_TABS-1], IDC_MPUADR), buffer);

	// channel config combobox
	hWndItem = GetDlgItem(hWndChild[0], IDCB_CHANNELCONFIG);
	SendMessage(hWndItem, CB_RESETCONTENT, 0, 0);
	if (cmiData.maxChannels >= 2) {
		SendMessage(hWndItem, CB_ADDSTRING, 0, (LPARAM)"Stereo (2.0)");
	}
	if (cmiData.maxChannels >= 4) {
		SendMessage(hWndItem, CB_ADDSTRING, 0, (LPARAM)"Quadrophonic (4.0)");
	}
	if (cmiData.maxChannels >= 6) {
		SendMessage(hWndItem, CB_ADDSTRING, 0, (LPARAM)"5.1 Surround");
	}
	if (cmiData.maxChannels >= 8) {
		SendMessage(hWndItem, CB_ADDSTRING, 0, (LPARAM)"7.1 Surround");
	}
	getCurrentChannelConfig();
	SendMessage(hWndItem, CB_SETCURSEL, (currentChannelCount/2)-1, 0);
	updateChannelBoxes(hWnd);

	// checkboxes
	SendMessage(GetDlgItem(hWndChild[0], IDC_EN_PCMDAC),      BM_SETCHECK, (cmiData.enablePCMDAC        ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[0], IDC_EXCH_FB),        BM_SETCHECK, (cmiData.exchangeFrontBack   ? BST_CHECKED : BST_UNCHECKED), 0);

	SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDO),        BM_SETCHECK, (cmiData.enableSPDO          ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDO5V),      BM_SETCHECK, (cmiData.enableSPDO5V        ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDCOPYRHT),  BM_SETCHECK, (cmiData.enableSPDOCopyright ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDI),        BM_SETCHECK, (cmiData.enableSPDI          ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_SEL_SPDIFI),     BM_SETCHECK, (cmiData.select2ndSPDI       ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_INV_SPDIFI),     BM_SETCHECK, (cmiData.invertPhaseSPDI     ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_POLVALID),       BM_SETCHECK, (cmiData.invertValidBitSPDI  ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[1], IDC_LOOP_SPDF),      BM_SETCHECK, (cmiData.loopSPDI            ? BST_CHECKED : BST_UNCHECKED), 0);

	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_441_PCM),    BM_SETCHECK, ((cmiData.formatMask & FMT_441_PCM)    ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_480_PCM),    BM_SETCHECK, ((cmiData.formatMask & FMT_480_PCM)    ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_882_PCM),    BM_SETCHECK, ((cmiData.formatMask & FMT_882_PCM)    ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_960_PCM),    BM_SETCHECK, ((cmiData.formatMask & FMT_960_PCM)    ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_441_MULTI_PCM),BM_SETCHECK, ((cmiData.formatMask & FMT_441_MULTI_PCM) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_480_MULTI_PCM),BM_SETCHECK, ((cmiData.formatMask & FMT_480_MULTI_PCM) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_882_MULTI_PCM),BM_SETCHECK, ((cmiData.formatMask & FMT_882_MULTI_PCM) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_960_MULTI_PCM),BM_SETCHECK, ((cmiData.formatMask & FMT_960_MULTI_PCM) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_441_DOLBY),  BM_SETCHECK, ((cmiData.formatMask & FMT_441_DOLBY) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_480_DOLBY),  BM_SETCHECK, ((cmiData.formatMask & FMT_480_DOLBY) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_882_DOLBY),  BM_SETCHECK, ((cmiData.formatMask & FMT_882_DOLBY) ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_960_DOLBY),  BM_SETCHECK, ((cmiData.formatMask & FMT_960_DOLBY) ? BST_CHECKED : BST_UNCHECKED), 0);

	// radioboxes
	SendMessage(GetDlgItem(hWndChild[0], IDC_EN_BASS2LINE),   BM_SETCHECK, (cmiData.enableBass2Line     ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[0], IDC_EN_CENTER2LINE), BM_SETCHECK, (cmiData.enableCenter2Line   ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[0], IDC_EN_REAR2LINE),   BM_SETCHECK, (cmiData.enableRear2Line     ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[0], IDC_NOROUTE_LINE),   BM_SETCHECK, ((!cmiData.enableCenter2Line && !cmiData.enableBass2Line && !cmiData.enableRear2Line) ? BST_CHECKED : BST_UNCHECKED), 0);

	SendMessage(GetDlgItem(hWndChild[0], IDC_EN_CENTER2MIC),  BM_SETCHECK, (cmiData.enableCenter2Mic    ? BST_CHECKED : BST_UNCHECKED), 0);
	SendMessage(GetDlgItem(hWndChild[0], IDC_NOROUTE_MIC),    BM_SETCHECK, (!cmiData.enableCenter2Mic   ? BST_CHECKED : BST_UNCHECKED), 0);


	return TRUE;
}

BOOL applySettings()
{
	cmiData.enablePCMDAC        = (SendMessage(GetDlgItem(hWndChild[0], IDC_EN_PCMDAC),      BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.exchangeFrontBack   = (SendMessage(GetDlgItem(hWndChild[0], IDC_EXCH_FB),        BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableBass2Line     = (SendMessage(GetDlgItem(hWndChild[0], IDC_EN_BASS2LINE),   BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableCenter2Line   = (SendMessage(GetDlgItem(hWndChild[0], IDC_EN_CENTER2LINE), BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableRear2Line     = (SendMessage(GetDlgItem(hWndChild[0], IDC_EN_REAR2LINE),   BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableCenter2Mic    = (SendMessage(GetDlgItem(hWndChild[0], IDC_EN_CENTER2MIC),  BM_GETCHECK, 0, 0) == BST_CHECKED);

	cmiData.enableSPDO          = (SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDO),        BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableSPDO5V        = (SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDO5V),      BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableSPDOCopyright = (SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDCOPYRHT),  BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.enableSPDI          = (SendMessage(GetDlgItem(hWndChild[1], IDC_EN_SPDI),        BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.select2ndSPDI       = (SendMessage(GetDlgItem(hWndChild[1], IDC_SEL_SPDIFI),     BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.invertPhaseSPDI     = (SendMessage(GetDlgItem(hWndChild[1], IDC_INV_SPDIFI),     BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.invertValidBitSPDI  = (SendMessage(GetDlgItem(hWndChild[1], IDC_POLVALID),       BM_GETCHECK, 0, 0) == BST_CHECKED);
	cmiData.loopSPDI            = (SendMessage(GetDlgItem(hWndChild[1], IDC_LOOP_SPDF),      BM_GETCHECK, 0, 0) == BST_CHECKED);

	cmiData.formatMask          = 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_441_PCM),  BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_441_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_480_PCM),  BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_480_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_882_PCM),  BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_882_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_960_PCM),  BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_960_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_441_MULTI_PCM), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_441_MULTI_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_480_MULTI_PCM), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_480_MULTI_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_882_MULTI_PCM), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_882_MULTI_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_960_MULTI_PCM), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_960_MULTI_PCM : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_441_DOLBY), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_441_DOLBY : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_480_DOLBY), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_480_DOLBY : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_882_DOLBY), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_882_DOLBY : 0;
	cmiData.formatMask          |= (SendMessage(GetDlgItem(hWndChild[2], IDC_FMT_960_DOLBY), BM_GETCHECK, 0, 0) == BST_CHECKED) ? FMT_960_DOLBY : 0;

	currentChannelCount = (int)(SendMessage(GetDlgItem(hWndChild[0], IDCB_CHANNELCONFIG), CB_GETCURSEL, 0, 0)+1)*2;

⌨️ 快捷键说明

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