📄 ppcoptions.cpp
字号:
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 + -