📄 mouse.c
字号:
else if (_tcscmp(_T("No"), szValueName))
_tcsncpy(g_szNo, szValueData, MAX_PATH);
else if (_tcsicmp(_T("SizeNS"), szValueName))
_tcsncpy(g_szSizeNS, szValueData, MAX_PATH);
else if (_tcsicmp(_T("SizeWE"), szValueName))
_tcsncpy(g_szSizeWE, szValueData, MAX_PATH);
else if (_tcsicmp(_T("SizeNWSE"), szValueName))
_tcsncpy(g_szSizeNWSE, szValueData, MAX_PATH);
else if (_tcsicmp(_T("SizeNESW"), szValueName))
_tcsncpy(g_szSizeNESW, szValueData, MAX_PATH);
else if (_tcsicmp(_T("SizeAll"), szValueName))
_tcsncpy(g_szSizeAll, szValueData, MAX_PATH);
else if (_tcsicmp(_T("UpArrow"), szValueName))
_tcsncpy(g_szUpArrow, szValueData, MAX_PATH);
else if (_tcsicmp(_T("Hand"), szValueName))
_tcsncpy(g_szHand, szValueData, MAX_PATH);
dwIndex++;
}while(1);
RegCloseKey(hCuCursorKey);
RegCloseKey(hCuKey);
return TRUE;
}
BOOL EnumerateCursorSchemes(HWND hwndDlg)
{
HKEY hCuKey;
HKEY hCuCursorKey;
DWORD dwIndex;
TCHAR szValueName[MAX_PATH];
DWORD dwValueName;
TCHAR szSystemScheme[MAX_PATH];
TCHAR szValueData[2000];
DWORD dwValueData;
LONG dwResult;
HWND hDlgCtrl;
LRESULT lResult;
BOOL ProcessedHKLM = FALSE;
if (RegOpenCurrentUser(KEY_READ, &hCuKey) != ERROR_SUCCESS)
{
return FALSE;
}
if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ, &hCuCursorKey) != ERROR_SUCCESS)
{
RegCloseKey(hCuKey);
return FALSE;
}
hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMBO_CURSOR_SCHEME);
SendMessage(hDlgCtrl, CB_RESETCONTENT, 0, 0);
dwIndex = 0;
do
{
dwValueName = sizeof(szValueName) / sizeof(TCHAR);
dwValueData = sizeof(szValueData) / sizeof(TCHAR);
dwResult = RegEnumValue(hCuCursorKey, dwIndex, szValueName, &dwValueName, NULL, NULL, (LPBYTE)szValueData, &dwValueData);
if (dwResult == ERROR_NO_MORE_ITEMS)
{
if(!ProcessedHKLM)
{
RegCloseKey(hCuCursorKey);
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Control Panel\\Cursors\\Schemes"),
0, KEY_READ, &hCuCursorKey);
if (dwResult == ERROR_SUCCESS)
{
dwIndex = 0;
ProcessedHKLM = TRUE;
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
continue;
}
}
break;
}
if(_tcslen(szValueData) > 0)
{
TCHAR * copy = _tcsdup(szValueData);
if (ProcessedHKLM)
_tcscat(szValueName, szSystemScheme);
lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szValueName);
SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)copy);
}
dwIndex++;
}while(1);
RegCloseKey(hCuCursorKey);
RegCloseKey(hCuKey);
LoadString(hApplet, IDS_NONE, szSystemScheme, MAX_PATH);
SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szSystemScheme);
SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
return TRUE;
}
void RefreshCursorList(HWND hwndDlg)
{
TCHAR szCursorName[MAX_PATH];
HWND hDlgCtrl;
LV_ITEM listItem;
LV_COLUMN column;
INT index = 0;
hDlgCtrl = GetDlgItem(hwndDlg, IDC_LISTVIEW_CURSOR);
(void)ListView_DeleteAllItems(hDlgCtrl);
ZeroMemory(&column, sizeof(LV_COLUMN));
column.mask = LVCF_SUBITEM | LVCF_WIDTH;
column.iSubItem = 0;
column.cx = 200;
(void)ListView_InsertColumn(hDlgCtrl, 0, &column);
LoadString(hApplet, IDS_ARROW, szCursorName, MAX_PATH);
ZeroMemory(&listItem, sizeof(LV_ITEM));
listItem.mask = LVIF_TEXT | LVIF_PARAM | LVIF_STATE | LVIF_IMAGE;
listItem.pszText = szCursorName;
listItem.state = 0;
listItem.iImage = -1;
listItem.iItem = index++;
listItem.lParam = 0;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_HELP, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_APPSTARTING, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_WAIT, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_CROSSHAIR, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_IBEAM, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_NWPEN, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_NO, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_SIZENS, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_SIZENWSE, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_SIZENESW, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_SIZEALL, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_UPARROW, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
LoadString(hApplet, IDS_HAND, szCursorName, MAX_PATH);
listItem.iItem = index++;
(void)ListView_InsertItem(hDlgCtrl, &listItem);
}
BOOL DeleteUserCursorScheme(TCHAR * szScheme)
{
HKEY hCuKey;
HKEY hCuCursorKey;
LONG Result;
if (RegOpenCurrentUser(KEY_READ | KEY_SET_VALUE, &hCuKey) != ERROR_SUCCESS)
{
return FALSE;
}
if (RegOpenKeyEx(hCuKey, _T("Control Panel\\Cursors\\Schemes"), 0, KEY_READ | KEY_SET_VALUE, &hCuCursorKey) != ERROR_SUCCESS)
{
RegCloseKey(hCuKey);
return FALSE;
}
Result = RegDeleteValue(hCuCursorKey, szScheme);
RegCloseKey(hCuCursorKey);
RegCloseKey(hCuKey);
return (Result == ERROR_SUCCESS);
}
static INT_PTR CALLBACK
SaveSchemeProc(IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
HWND hDlgCtrl;
UNREFERENCED_PARAMETER(lParam);
switch(uMsg)
{
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_EDIT_SCHEME_NAME);
SendMessage(hDlgCtrl, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)g_szNewScheme);
EndDialog(hwndDlg, TRUE);
}
else if (LOWORD(wParam) == IDCANCEL)
{
EndDialog(hwndDlg, FALSE);
}
}
}
return FALSE;
}
BOOL BrowseCursor(TCHAR * szFileName, HWND hwndDlg)
{
//FIXME load text resources from string
OPENFILENAME ofn;
static TCHAR szFilter[] = _T("Cursors\0*.ani;*.cur\0Animated Cursors\0*.ani\0Static Cursors\0*.cur\0All Files\0*.*\0\0");
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwndDlg;
ofn.lpstrFilter = szFilter;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrInitialDir = _T("%WINDIR%\\Cursors");
ofn.lpstrTitle = _T("Browse");
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn))
return TRUE;
else
return FALSE;
}
static INT_PTR CALLBACK
PointerProc(IN HWND hwndDlg,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam)
{
LPPSHNOTIFY lppsn;
TCHAR buffer[MAX_PATH];
TCHAR szSystemScheme[MAX_PATH];
HWND hDlgCtrl;
HDC memDC;
HCURSOR hCursor;
LRESULT lResult;
switch(uMsg)
{
case WM_INITDIALOG:
{
EnumerateCursorSchemes(hwndDlg);
RefreshCursorList(hwndDlg);
/* drop shadow */
SystemParametersInfo(SPI_GETDROPSHADOW, 0, &g_DropShadow, 0);
if (g_DropShadow)
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_CHECK_DROP_SHADOW);
SendMessage(hDlgCtrl, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
}
if ((INT)wParam == IDC_LISTVIEW_CURSOR)
return TRUE;
else
return FALSE;
}
case WM_NOTIFY:
{
lppsn = (LPPSHNOTIFY) lParam;
if (lppsn->hdr.code == PSN_APPLY)
{
#if (WINVER >= 0x0500)
SystemParametersInfo(SPI_SETDROPSHADOW, 0, (PVOID)g_DropShadow, SPIF_SENDCHANGE);
#endif
SetWindowLong(hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR);
return TRUE;
}
break;
}
case WM_COMMAND:
{
switch(HIWORD(wParam))
{
case CBN_SELENDOK:
{
BOOL bEnable;
wParam = SendMessage((HWND)lParam, CB_GETCURSEL, 0, 0);
if(wParam == CB_ERR)
break;
SendMessage((HWND)lParam, CB_GETLBTEXT, wParam, (LPARAM)buffer);
LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
if(_tcsstr(buffer, szSystemScheme) || wParam == 0) //avoid the default scheme can be deleted
bEnable = 0;
else
bEnable = 1;
/* delete button */
hDlgCtrl = GetDlgItem(hwndDlg, IDC_BUTTON_DELETE_SCHEME);
EnableWindow(hDlgCtrl, bEnable);
break;
}
}
switch(LOWORD(wParam))
{
case IDC_BUTTON_SAVEAS_SCHEME:
{
if(DialogBox(hApplet, MAKEINTRESOURCE(IDD_CURSOR_SCHEME_SAVEAS), hwndDlg, SaveSchemeProc))
{
//FIXME
//save cursor scheme
}
break;
}
case IDC_BUTTON_USE_DEFAULT_CURSOR:
{
hDlgCtrl = GetDlgItem(hwndDlg, IDC_LISTVIEW_CURSOR);
lResult = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0);
if (lResult != CB_ERR)
{
if ((INT)lResult == 0)
memset(g_szArrow, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 1)
memset(g_szHelp, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 2)
memset(g_szAppStarting, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 3)
memset(g_szWait, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 4)
memset(g_szCrosshair, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 5)
memset(g_szIBeam, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 6)
memset(g_szNWPen, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 7)
memset(g_szNo, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 8)
memset(g_szSizeNS, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 9)
memset(g_szSizeWE,0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 10)
memset(g_szSizeNWSE, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 11)
memset(g_szSizeNESW, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 12)
memset(g_szSizeAll, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 13)
memset(g_szUpArrow, 0x0, MAX_PATH * sizeof(TCHAR));
else if ((INT)lResult == 14)
memset(g_szHand, 0x0, MAX_PATH * sizeof(TCHAR));
}
break;
}
case IDC_BUTTON_BROWSE_CURSOR:
{
memset(buffer, 0x0, sizeof(buffer));
hDlgCtrl = GetDlgItem(hwndDlg, IDC_LISTVIEW_CURSOR);
lResult = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0);
if (lResult == CB_ERR)
MessageBox(hwndDlg, _T("CB_ERR"), _T(""),MB_ICONERROR);
if (BrowseCursor(buffer, hwndDlg))
{
if ((INT)lResult == 0)
_tcsncpy(g_szArrow, buffer, MAX_PATH);
else if ((INT)lResult == 1)
_tcsncpy(g_szHelp, buffer, MAX_PATH);
else if ((INT)lResult == 2)
_tcsncpy(g_szAppStarting, buffer, MAX_PATH);
else if ((INT)lResult == 3)
_tcsncpy(g_szWait, buffer, MAX_PATH);
else if ((INT)lResult == 4)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -