Проблема с курсором в окне слайд-шоу PowerPoint - PullRequest
0 голосов
/ 02 февраля 2019

Я использую VSTO для разработки надстройки Office PowerPoint, и я встроил окно в окно слайд-шоу PowerPoint.Когда я использую инструмент «Перо» в окне слайд-шоу PowerPoint, курсор становится стрелкой, когда мышь перемещается во встроенное окно, это то, чего я хочу, но когда я использую инструмент «Ластик», курсор остается ластиком, когда мышь перемещается ввстроенное окно.

Можно ли как-нибудь помешать PowerPoint превратить курсор в ластик?

Я пробовал WNDPROC, HOOK, SetClassLong, установить курсор на стрелку, но в итоге он был установленв ластик с помощью PowerPoint.

    WNDPROC oldWndProc = NULL;
    LRESULT CALLBACK newWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        if (message == WM_SETCURSOR || message == WM_MOUSEMOVE ||message==WM_MOUSEHOVER 
            || message == WM_MOUSEACTIVATE || message == WM_TIMER) {
            HCURSOR hCursor11 = LoadCursorW(NULL, OCR_SIZENS);
            ::SetClassLong(hwnd, GCL_HCURSOR, (LONG)hCursor11);
            ::SetCursor(hCursor11);
            ::SetSystemCursor(hCursor11, 32645); //OCR_SIZENS(32645)
            return TRUE;
        }
        else {
            return ::CallWindowProc(oldWndProc, hwnd, message, wParam, lParam);
        }
    }
    oldWndProc = (TWndProc)::SetWindowLongA((HWND)this->winId(), GWL_WNDPROC, (LONG)newWndProc);


    LRESULT CALLBACK wndHookProc1(int code, WPARAM wParam, LPARAM lParam) {
        if (code >= 0) {
            CWPSTRUCT * p = (CWPSTRUCT*)lParam;
            if (p->message == WM_SETCURSOR || p->message == WM_MOUSEHOVER || p->message==WM_MOUSEMOVE) {
                HCURSOR hCursor22 = LoadCursorW(NULL, IDC_SIZENS);
                ::SetClassLong(p->hwnd, GCL_HCURSOR, (LONG)hCursor22);
                ::SetCursor(hCursor22);
                ::SetSystemCursor(hCursor22, 32645);
                return TRUE;
            }
            else {
                return ::CallNextHookEx(gWndHook, code, wParam, lParam);
            }
        }
        else {
            return ::CallNextHookEx(gWndHook, code, wParam, lParam);
        }
    }
    gHInstance = GetModuleHandleFromAddress(wndHookProc1);
    gWndHook = ::SetWindowsHookExA(WH_CALLWNDPROC, wndHookProc1, gHInstance, NULL);
...