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

📄 main.cpp

📁 C-Media8738/8768声卡驱动开发源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	return (setDriverData(&cmiTopologyDev) && setCurrentChannelConfig());
}

BOOL initDialog(HWND hWnd)
{
	HICON   hIcon;
	TC_ITEM tci;
	int     i;

	hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_APP_ICON));
	SendMessage(hWnd, WM_SETICON, (LPARAM) ICON_BIG, (WPARAM) hIcon);
	hURLFont = 0;

	hWndTab = GetDlgItem(hWnd,IDC_TAB);

	ZeroMemory(&tci, sizeof(TC_ITEM));
	tci.mask        = TCIF_TEXT;
	for (i=0;i<NUM_TABS;i++) {
		tci.pszText = tabsName[i];
		if (TabCtrl_InsertItem(hWndTab, i, &tci) == -1) {
			PrintLastError("TabCtrl_InsertItem()");
			return FALSE;
		}
		hWndChild[i] = CreateDialogParam(hInst, MAKEINTRESOURCE(tabsResource[i]), hWndTab, (DLGPROC)TabDlgProc, 0);
	}

	hURLFont = CreateFont(20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VARIABLE_PITCH | FF_SWISS, "MS Shell Dlg");
	SendMessage(GetDlgItem(hWndChild[NUM_TABS-1], IDC_URL2), WM_SETFONT, (WPARAM)hURLFont, TRUE);

	currentTab = 0;
	ShowWindow(hWndChild[0], SW_SHOWDEFAULT);

	if (!openDevice()) {
		PrintLastError("openDevice()");
		return FALSE;
	}
	return setDlgItems(hWnd);
}

BOOL changeTab(LPNMHDR lpnmhdr)
{
	if (lpnmhdr->code != TCN_SELCHANGE) {
		return FALSE;
	}
	ShowWindow(hWndChild[currentTab], SW_HIDE);
	currentTab = SendMessage(hWndTab, TCM_GETCURSEL, 0, 0);
	ShowWindow(hWndChild[currentTab], SW_SHOWDEFAULT);
	return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg) {
		case WM_INITDIALOG:
			if (!initDialog(hWnd)) {
				PostQuitMessage(0);
			}
			return TRUE;
		case WM_CLOSE:
			DestroyWindow(hWnd);
			return TRUE;
		case WM_NOTIFY:
			return changeTab((LPNMHDR)lParam);
		case WM_DESTROY:
			cleanUp();
			PostQuitMessage(0);
			return TRUE;
		case WM_COMMAND:
			if (LOWORD(wParam) == IDB_CLOSE) {
				PostQuitMessage(0);
				return TRUE;
			}
			if (LOWORD(wParam) == IDB_APPLY) {
				applySettings();
				setDlgItems(hWnd);
				return TRUE;
			}
			break;
	}
	return 0;
}

void openURL(int control)
{
	char buffer[127];
	GetWindowText(GetDlgItem(hWndChild[3], control), buffer, sizeof(buffer));
	ShellExecute(hWndMain, "open", buffer, NULL, NULL, SW_SHOWNORMAL);
}

LRESULT CALLBACK TabDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg) {
		case WM_COMMAND:
			switch (LOWORD(wParam)) {
				case IDB_STARTSTOP:
					if (stopTestTone()) {
						SetDlgItemText(hWndChild[0], IDB_STARTSTOP, "&Start");
						return TRUE;
					}
					if (playTestTone()) {
						SetDlgItemText(hWndChild[0], IDB_STARTSTOP, "&Stop");
						return TRUE;
					}
					break;
				case IDC_URL1:
				case IDC_URL2:
					openURL(LOWORD(wParam));
					break;
			}
		case WM_CTLCOLORSTATIC:
			if ( (GetDlgItem(hWndChild[3], IDC_URL1) == (HANDLE)lParam) || (GetDlgItem(hWndChild[3], IDC_URL2) == (HANDLE)lParam) ) {
				SetTextColor((HDC)wParam, 0xFF0000);
				SetBkMode((HDC)wParam, TRANSPARENT);
				return (LRESULT)GetSysColorBrush(COLOR_BTNFACE);
			}
	}

	return 0;
}

void printUsage()
{
	unsigned char usage[] = "/h - print this help message\r\n" \
	                        "/enable71Mode - change channel configuration to 7.1\r\n" \
	                        "/enable51Mode - change channel configuration to 5.1\r\n" \
	                        "/enable40Mode - change channel configuration to 4.0 (Quad)\r\n" \
	                        "/enable20Mode - change channel configuration to 2.0 (Stereo)\r\n" \
	                        "/enableSPDIFo - enable SPDIF-out\r\n" \
	                        "/disableSPDIFo - disable SPDIF-out\r\n"\
	                        "/enableSPDIFi - enable SPDIF-in recording\r\n" \
	                        "/disableSPDIFi - disable SPDIF-in recording\r\n";

	MessageBox(NULL, (LPCSTR)usage, TEXT("Usage Help"), MB_ICONINFORMATION | MB_OK);
	return;
}

void deleteDriverFiles() {
	TCHAR SysDir[MAX_PATH];
	unsigned int len;
	if (GetSystemDirectory(SysDir, sizeof(SysDir))==0) {
		PrintLastError("GetSystemDirectory()");
		return;
	}
	len = strlen(SysDir);

	strcat(SysDir, "\\cmicpl.cpl");
	if (!DeleteFile(SysDir)) {
		MoveFileEx(SysDir, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
	}
	SysDir[len] = 0;

	strcat(SysDir, "\\cmicontrol.exe");
	if (!DeleteFile(SysDir)) {
		MoveFileEx(SysDir, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
	}
}


void performUninstall() {
	deleteDriverFiles();
	RegDeleteKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\CMIDriver");
	MessageBox(NULL, "The CMI driver applications were successfully removed from your computer!", "CMIDriver", MB_ICONINFORMATION);
	ExitProcess(0);
}

bool checkToken(char* token) {
	if ((strcmp(token, "?")==0) || (strcmp(token, "H")==0)) {
		printUsage();
		return TRUE;
	} else
	if (strcmp(token, "ENABLE71MODE")==0) {
		currentChannelCount = 8;
	} else
	if (strcmp(token, "ENABLE51MODE")==0) {
		currentChannelCount = 6;
	} else
	if ((strcmp(token, "ENABLE40MODE")==0) || (strcmp(token, "ENABLEQUADMODE")==0) || (strcmp(token, "QUAD")==0) ) {
		currentChannelCount = 4;
	} else
	if ((strcmp(token, "ENABLE20MODE")==0) || (strcmp(token, "ENABLESTEREOMODE")==0) || (strcmp(token, "STEREO")==0) ) {
		currentChannelCount = 2;
	} else
	if (strcmp(token, "ENABLESPDIFO")==0) {
		cmiData.enableSPDO = TRUE;
	} else
	if (strcmp(token, "DISABLESPDIFO")==0) {
		cmiData.enableSPDO = FALSE;
	} else
	if (strcmp(token, "ENABLESPDIFI")==0) {
		cmiData.enableSPDI = TRUE;
	} else
	if (strcmp(token, "DISABLESPDIFI")==0) {
		cmiData.enableSPDI = FALSE;
	} else
	if (strcmp(token, "UNINSTALL")==0) {
		performUninstall();
	}
	return FALSE;
}

int parseArguments(LPSTR szCmdLine) {
	BOOL inToken = false;
	int  i = 0, j;
	char token[MAX_TOKEN_SIZE];

	if (!openDevice()) {
		return FALSE;
	}

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

	while (szCmdLine[i]) {
		if (inToken) {
			if (szCmdLine[i] == ' ') {
				inToken = false;
				token[j] = 0;
				if (checkToken(token)) {
					return TRUE;
				}
			} else {
				token[j] = (char)toupper(szCmdLine[i]);
				if (j < MAX_TOKEN_SIZE-1) {
					j++;
				}
			}
		} else {
			if ((szCmdLine[i] == '-') || (szCmdLine[i] == '/')) {
				j = 0;
				inToken = true;
			}
		}

		i++;
	}
	token[j] = 0;
	checkToken(token);
	return (setDriverData(&cmiTopologyDev) && setCurrentChannelConfig());
}

void InitURLControl()
{
	WNDCLASSEX wce;

	ZeroMemory(&wce, sizeof(wce));
	wce.cbSize = sizeof(WNDCLASSEX);
	if (GetClassInfoEx(hInst, "Static", &wce)==0) {
		PrintLastError("GetClassInfoEx()");
        return;
	}

	wce.hCursor = LoadCursor(NULL, IDC_HAND);
	wce.hInstance = hInst;
	wce.lpszClassName = "URLLink";
	if (RegisterClassEx(&wce) == 0) {
		PrintLastError("RegisterClassEx()");
	}

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
	WNDCLASSEX wce;
	MSG        msg;

	ZeroMemory(&cmiData, sizeof(CMIDATA));
	ZeroMemory(&cmiTopologyDev, sizeof(CMIDEV));
	hWave = NULL;

	if (szCmdLine) {
		if (strlen(szCmdLine) > 0) {
			int result = parseArguments(szCmdLine);
			cleanUp();
			return result;
		}
	}

	if (hWndMain = FindWindow("cmiControlPanel", NULL)) {
		SetForegroundWindow(hWndMain);
		return FALSE;
	}

	hInst = hInstance;
	InitCommonControls();
	CoInitialize(NULL);

	ZeroMemory(&wce, sizeof(WNDCLASSEX));
	wce.cbSize        = sizeof(WNDCLASSEX);
	wce.lpfnWndProc   = DefDlgProc;
	wce.style         = 0;
	wce.cbWndExtra    = DLGWINDOWEXTRA;
	wce.hInstance     = hInstance;
	wce.hCursor       = LoadCursor(NULL, IDC_ARROW);
	wce.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
	wce.lpszClassName = "cmiControlPanel";
	wce.lpszMenuName  = NULL;
	wce.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
	wce.hIconSm       = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
    if(!RegisterClassEx(&wce)) {
		PrintLastError("RegisterClassEx()");
		return -1;
	}
	InitURLControl();

	hWndMain = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)WndProc, NULL);
	if (!hWndMain) {
		PrintLastError("CreateDialogParam()");
		return -1;
	}

	while (GetMessage(&msg, (HWND) NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
    return 0;
}

⌨️ 快捷键说明

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