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

📄 ppcoptions.cpp

📁 PPC流行的播放软件gsplayer源码2.24版
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	SendMessage(hwndCmb, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)str);
	for (i = 0; i < sizeof(s_nCommands) / sizeof(int); i++) {
		str.Load(s_nCommands[i]);
		SendMessage(hwndCmb, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)str);
	}
	SendMessage(hwndCmb, CB_SETCURSEL, 0, 0);

	// ListView傪弶婜壔偡傞
	RECT rc;
	HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_KEYMAP);
	GetClientRect(hwndLV, &rc);
	int nWidth = (RECT_WIDTH(&rc) - GetSystemMetrics(SM_CXVSCROLL) - 1) / 2;
	
	LVCOLUMN lvc;
	lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
	lvc.fmt = LVCFMT_LEFT;
	lvc.cx = nWidth;
	str.Load(IDS_KEY_COLUMN_KEY);
	lvc.pszText = str;
	lvc.iSubItem = COLUMN_KEY;
	ListView_InsertColumn(hwndLV, COLUMN_KEY, &lvc);
	str.Load(IDS_KEY_COLUMN_COMMAND);
	lvc.pszText = str;
	lvc.iSubItem = COLUMN_COMMAND;
	ListView_InsertColumn(hwndLV, COLUMN_COMMAND, &lvc);
	
	DWORD dwExStyle = ListView_GetExtendedListViewStyle(hwndLV);
	ListView_SetExtendedListViewStyle(hwndLV, dwExStyle | LVS_EX_FULLROWSELECT);

	// 傾僀僥儉傪捛壛偡傞
	for (i = 0; i < m_listKeyMap.GetCount(); i++) {
		ACCEL* p = (ACCEL*)m_listKeyMap.GetAt(i);
		KeyMapPageAddMap(hwndDlg, p);
	}

	if (m_fReleaseKeyMap)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_RELEASE), BM_SETCHECK, 1, 0);
}

void CPpcOptions::KeyMapPageOnHotKey(HWND hwndDlg, int nId, UINT fuModifiers, UINT uVirtKey)
{
	HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_KEYMAP);
	HWND hwndCmb = GetDlgItem(hwndDlg, IDC_CMB_FUNC);

	int nSel = SendMessage(hwndCmb, CB_GETCURSEL, 0, 0);
	if (nSel != 0 && nSel != CB_ERR) {
		if (s_nCommands[nSel - 1] == IDM_DELETE_KEYMAP) {
			int nCount = ListView_GetItemCount(hwndLV);
			for (int i = 0; i < nCount; i++) {
				LVITEM li;
				memset(&li, 0, sizeof(LVITEM));
				li.mask = LVIF_PARAM;
				li.iItem = i;
				ListView_GetItem(hwndLV, &li);
				ACCEL* pac = (ACCEL*)li.lParam;
				if (pac->key == uVirtKey) {
					delete pac;
					ListView_DeleteItem(hwndLV, i);
					break;
				}
			}
		}
		else {
			ACCEL accel;
			accel.cmd = s_nCommands[nSel - 1];
			accel.key = uVirtKey;
			accel.fVirt = FVIRTKEY;
			if (fuModifiers & MOD_ALT)
				accel.fVirt |= FALT;
			if (fuModifiers & MOD_CONTROL)
				accel.fVirt |= FCONTROL;
			if (fuModifiers & MOD_SHIFT)
				accel.fVirt |= FSHIFT;
			if (fuModifiers & MOD_WIN)
				accel.fVirt |= FWIN;
			int nIndex = KeyMapPageAddMap(hwndDlg, &accel);
			ListView_SetItemState(hwndLV, nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED);
			ListView_EnsureVisible(hwndLV, nIndex, FALSE);
		}
	}
	SendMessage(hwndCmb, CB_SETCURSEL, 0, 0);
}

void CPpcOptions::KeyMapPageOnShowMenu(HWND hwndDlg, int x, int y)
{
	HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_KEYMAP);
	if (!ListView_GetSelectedCount(hwndLV))
		return;

	HMENU hMenu = LoadMenu(GetInst(), (LPCTSTR)IDR_KEYMAP);
	HMENU hSub = GetSubMenu(hMenu, 0);
	if (TrackPopupMenu(hSub, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD, 
							x, y, 0, hwndDlg, NULL) == IDM_DELETE_KEYMAP) {
		
		int nCount = ListView_GetItemCount(hwndLV);
		for (int i = 0; i < nCount; i++) {
			if (ListView_GetItemState(hwndLV, i, LVIS_SELECTED)) {
				LVITEM li;
				memset(&li, 0, sizeof(LVITEM));
				li.mask = LVIF_PARAM;
				li.iItem = i;
				ListView_GetItem(hwndLV, &li);
				delete (ACCEL*)li.lParam;
				ListView_DeleteItem(hwndLV, i);
				break;
			}
		}
	}
	DestroyMenu(hMenu);
}

void CPpcOptions::KeyMapPageOnOK(HWND hwndDlg)
{
	DeleteKeyMap();

	HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_KEYMAP);
	int nCount = ListView_GetItemCount(hwndLV);
	for (int i = 0; i < nCount; i++) {
		LVITEM li;
		memset(&li, 0, sizeof(LVITEM));
		li.mask = LVIF_PARAM;
		li.iItem = i;
		ListView_GetItem(hwndLV, &li);

		ACCEL* p = new ACCEL;
		*p = *((ACCEL*)li.lParam);
		m_listKeyMap.Add((DWORD)p);
	}
	m_fReleaseKeyMap = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_RELEASE), BM_GETCHECK, 0, 0);
}

void CPpcOptions::KeyMapPageDeleteAllMap(HWND hwndDlg)
{
	HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_KEYMAP);
	int nCount = ListView_GetItemCount(hwndLV);
	for (int i = 0; i < nCount; i++) {
		LVITEM li;
		memset(&li, 0, sizeof(LVITEM));
		li.mask = LVIF_PARAM;
		li.iItem = i;
		ListView_GetItem(hwndLV, &li);
		
		ACCEL* p = (ACCEL*)li.lParam;
		delete p;
	}
	ListView_DeleteAllItems(hwndLV);
}

int CPpcOptions::KeyMapPageAddMap(HWND hwndDlg, ACCEL* pAccel)
{
	TCHAR szBuf[MAX_PATH];
	HWND hwndLV = GetDlgItem(hwndDlg, IDC_LIST_KEYMAP);

	// 廳暋僠僃僢僋
	int nCount = ListView_GetItemCount(hwndLV);
	for (int i = 0; i < nCount; i++) {
		LVITEM li;
		memset(&li, 0, sizeof(LVITEM));
		li.mask = LVIF_PARAM;
		li.iItem = i;
		ListView_GetItem(hwndLV, &li);

		ACCEL* p = (ACCEL*)li.lParam;
		if (p->fVirt == pAccel->fVirt && p->key == pAccel->key) {
			p->cmd = pAccel->cmd;
			// command暥帤楍抲偒姺偊
			KeyMapPageCreateCommandString(p->cmd, szBuf);
			ListView_SetItemText(hwndLV, i, COLUMN_COMMAND, szBuf);
			return i;
		}
	}

	// 怴婯捛壛
	ACCEL* p = new ACCEL;
	*p = *pAccel;

	LVITEM li;
	memset(&li, 0, sizeof(LVITEM));
	li.mask = LVIF_PARAM;
	li.iItem = nCount;
	li.lParam = (long)p;
	ListView_InsertItem(hwndLV, &li);

	// key暥帤楍嶌惉
	KeyMapPageCreateKeyString(p->key, szBuf);
	ListView_SetItemText(hwndLV, nCount, COLUMN_KEY, szBuf);

	// command暥帤楍嶌惉
	KeyMapPageCreateCommandString(p->cmd, szBuf);
	ListView_SetItemText(hwndLV, nCount, COLUMN_COMMAND, szBuf);

	return nCount;
}

void CPpcOptions::KeyMapPageCreateKeyString(UINT uKey, LPTSTR psz)
{
	for (int i = 0; i < sizeof(s_uKeys) / sizeof(UINT) / 3; i++) {
		if (s_uKeys[i][2] == uKey) {
			CTempStr str(s_uKeys[i][0]);
			_tcscpy(psz, str);
			return;
		}
	}
	wsprintf(psz, _T("0x%dX"), uKey);
}

void CPpcOptions::KeyMapPageCreateCommandString(int nCommand, LPTSTR psz)
{
	CTempStr str(nCommand);
	_tcscpy(psz, str);
}

void CPpcOptions::KeyMapPageRegisterHotKeys(HWND hwndDlg)
{
	for (int i = 0; i < sizeof(s_uKeys) / sizeof(UINT) / 3; i++) {
		RegisterHotKey(hwndDlg, s_uKeys[i][2], s_uKeys[i][1], s_uKeys[i][2]);
	}
}

void CPpcOptions::KeyMapPageUnregisterHotKeys(HWND hwndDlg)
{
	for (int i = 0; i < sizeof(s_uKeys) / sizeof(UINT) / 3; i++) {
		UnregisterHotKey(hwndDlg, s_uKeys[i][2]);
	}
}

BOOL CALLBACK CPpcOptions::DisplayPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static CPpcOptions* pOptions;
	switch (uMsg) {
	case WM_INITDIALOG:
		SetWindowLong(hwndDlg, DWL_MSGRESULT, FALSE);
		pOptions = (CPpcOptions*)((LPPROPSHEETPAGE)lParam)->lParam;
		pOptions->DisplayPageOnInitDialog(hwndDlg);
		return TRUE;
	case WM_NOTIFY:
		{
			NMHDR* pnmh = (NMHDR*)lParam; 
			if (pnmh->code == PSN_APPLY) {
				pOptions->DisplayPageOnOK(hwndDlg);
				return TRUE;
			}
			return FALSE;
		}
	case WM_PAINT:
		return DefDlgPaintProc(hwndDlg, wParam, lParam);
	case WM_CTLCOLORSTATIC:
		return DefDlgCtlColorStaticProc(hwndDlg, wParam, lParam);
	default:
		return FALSE;
	}
}

void CPpcOptions::DisplayPageOnInitDialog(HWND hwndDlg)
{
	HWND hwndCmb = GetDlgItem(hwndDlg, IDC_CMB_AUTOOFF);
	for (int i = 0; i < sizeof(s_nDispSecs) / sizeof(int); i++) {
		if (i == 0) {
			CTempStr str(IDS_FMT_DISPLAY_AUTOOFF_NONE);
			SendMessage(hwndCmb, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)str);
		}
		else {
			TCHAR sz[32];
			CTempStr str(IDS_FMT_DISPLAY_AUTOOFF);
			wsprintf(sz, str, s_nDispSecs[i]);
			SendMessage(hwndCmb, CB_ADDSTRING, 0, (LPARAM)sz);
		}
		if (m_nDispAutoOff == s_nDispSecs[i])
			SendMessage(hwndCmb, CB_SETCURSEL, i, 0);
	}

	if (m_fDispAutoOn)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_AUTOON), BM_SETCHECK, 1, 0);
	if (m_fDispEnableBattery)
		SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ENABLE_BATTERY), BM_SETCHECK, 1, 0);
}

void CPpcOptions::DisplayPageOnOK(HWND hwndDlg)
{
	HWND hwndCmb = GetDlgItem(hwndDlg, IDC_CMB_AUTOOFF);
	int nSel = SendMessage(hwndCmb, CB_GETCURSEL, 0, 0);
	if (nSel == CB_ERR)
		return;

	m_nDispAutoOff = s_nDispSecs[nSel];
	m_fDispAutoOn = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_AUTOON), BM_GETCHECK, 0, 0);
	m_fDispEnableBattery = SendMessage(GetDlgItem(hwndDlg, IDC_CHECK_ENABLE_BATTERY), BM_GETCHECK, 0, 0);
}

⌨️ 快捷键说明

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