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

📄 mouse.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
📖 第 1 页 / 共 3 页
字号:
        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 + -