Beispiel #1
0
ST LRESULT CALLBACK Desk_WndProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static const UINT msgs [] = { BB_DRAGTODESKTOP, BB_REDRAWGUI, 0 };
    static bool button_down, dblclk;
    int n;

    switch (uMsg)
    {
        //====================
        case WM_CREATE:
            hDesktopWnd = hwnd;
            MakeSticky(hwnd);
            MessageManager_Register(hwnd, msgs, true);
            init_DeskDropTarget(hwnd);
            Desk_SetPosition();
            break;

        //====================
        case WM_DESTROY:
            exit_DeskDropTarget(hwnd);
            MessageManager_Register(hwnd, msgs, false);
            RemoveSticky(hwnd);
            break;

        case WM_NCPAINT:
            // dbg_printf("ncpaint: %x %x %x %x", hwnd, uMsg, wParam, lParam);
            // keep the window on bottom
            Desk_SetPosition();
            break;

        case WM_SETTINGCHANGE:
			if (SPI_SETDESKWALLPAPER == wParam)
			{
				CHAR oldWallPaper[(MAX_PATH + 1)];
				if (TRUE == SystemParametersInfo(SPI_GETDESKWALLPAPER, sizeof(oldWallPaper), &oldWallPaper, 0))
					Desk_read_background(oldWallPaper);
					//Desk_new_background(oldWallPaper);
					//Desk_read_background(oldWallPaper);
				Desk_SetPosition();

				//InvalidateRect(hwnd, NULL, FALSE);
			}
            break;


        //====================
        case WM_CLOSE:
            break;

        //====================
        case WM_MOUSEACTIVATE:
            return MA_NOACTIVATE;
        
        case WM_LBUTTONDOWN:
        case WM_RBUTTONDOWN:
        case WM_MBUTTONDOWN:
        case WM_XBUTTONDOWN:
            dblclk = false;
            button_down = true;
            if (uMsg == WM_LBUTTONDOWN) {
                n = 0;
                goto post_click_2;
            }
            break;

        case WM_MOUSEMOVE:
            break;

        case WM_LBUTTONDBLCLK:
        case WM_RBUTTONDBLCLK:
        case WM_MBUTTONDBLCLK:
            dblclk = true;
            button_down = true;
            break;

        case WM_LBUTTONUP: n = dblclk ? 7 : 1; goto post_click;
        case WM_RBUTTONUP: n = 2; goto post_click;
        case WM_MBUTTONUP: n = 3; goto post_click;
        case WM_XBUTTONUP:
            switch (HIWORD(wParam)) {
            case XBUTTON1: n = 4; goto post_click;
            case XBUTTON2: n = 5; goto post_click;
            case XBUTTON3: n = 6; goto post_click;
            } break;

        post_click:
            if (false == button_down)
                break;
            button_down = dblclk = false;

        post_click_2:
            wParam &= (MK_CONTROL|MK_SHIFT);
            if (0x8000 & GetAsyncKeyState(VK_MENU))
                wParam |= MK_ALT;

            PostMessage(BBhwnd, BB_DESKCLICK, wParam, n);
            break;

        //====================

        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc_scrn;
            HDC hdc_bmp;
            HGDIOBJ other;

            hdc_scrn = BeginPaint(hwnd, &ps);
            if (Root.bmp) {
                hdc_bmp = CreateCompatibleDC(hdc_scrn);
                other = SelectObject(hdc_bmp, Root.bmp);
                BitBltRect(hdc_scrn, hdc_bmp, &ps.rcPaint);
                SelectObject(hdc_bmp, other);
                DeleteDC(hdc_bmp);
            } else {
                PaintDesktop(hdc_scrn);
            }
            EndPaint(hwnd, &ps);
            break;
        }

        //====================
        case WM_ERASEBKGND:
            return TRUE;

        //====================
        case BB_DRAGTODESKTOP:
            return get_drop_command((const char *)lParam, wParam);

        case BB_REDRAWGUI:
            if (wParam & BBRG_DESK)
                Desk_new_background("style");
            break;

        //====================
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}
Beispiel #2
0
//===========================================================================
static LRESULT CALLBACK Toolbar_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static const UINT msgs[] =
    {
        BB_RECONFIGURE,
        BB_TASKSUPDATE,
        BB_SETTOOLBARLABEL,
        BB_BROADCAST,
        BB_DESKTOPINFO,
        BB_REDRAWGUI,
        0
    };

    switch (message)
    {
        //====================
        case WM_CREATE:
            TBInfo.hwnd = Toolbar_hwnd = hwnd;
            MessageManager_Register (hwnd, msgs, true);
            MakeSticky(hwnd);
            Toolbar_UpdatePosition();
            break;

        //====================
        case WM_DESTROY:
            RemoveSticky(hwnd);
            MessageManager_Register (hwnd, msgs, false);
            SetDesktopMargin(Toolbar_hwnd, 0, 0);
            if (Toolbar_hFont)
                DeleteObject(Toolbar_hFont), Toolbar_hFont = NULL;
            TBInfo.hwnd = Toolbar_hwnd = NULL;
            break;

        //====================
        case BB_RECONFIGURE:
        tbreconfig:
            Toolbar_UpdatePosition();
            Toolbar_ShowMenu(false);
            InvalidateRect(hwnd, NULL, FALSE);
            break;

        //====================
        case BB_REDRAWGUI:
            if (wParam & BBRG_TOOLBAR)
            {
                Toolbar_force_button_pressed = 0 != (wParam & BBRG_PRESSED);
                Toolbar_UpdatePosition();
                InvalidateRect(hwnd, NULL, FALSE);
            }
            break;

        //====================
        case BB_TASKSUPDATE:
        showlabel:
            Toolbar_setlabel();
            InvalidateRect(hwnd, NULL, FALSE);
            break;

        case BB_DESKTOPINFO:
            Toolbar_setlabel();
            InvalidateRect(hwnd, NULL, FALSE);
            break;

        //====================
        case WM_ACTIVATEAPP:
            if (wParam) SetOnTop(hwnd);
            break;

        //====================

        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            PaintToolbar(hdc, &ps.rcPaint);
            EndPaint(hwnd, &ps);
            break;
        }

        //====================

        case BB_SETTOOLBARLABEL:
            SetTimer(hwnd, TOOLBAR_LABEL_TIMER, 2000, (TIMERPROC)NULL);
            Toolbar_ShowingExternalLabel = true;
            strcpy_max(Toolbar_CurrentWindow, (const char*)lParam, sizeof Toolbar_CurrentWindow);
            InvalidateRect(hwnd, NULL, FALSE);
            break;

        //====================

        case WM_TIMER:
        if (wParam == TOOLBAR_AUTOHIDE_TIMER)
        {
            if (TBInfo.autoHide)
            {
                if (check_mouse(hwnd) || (TBInfo.bbsb_hwnd && check_mouse(TBInfo.bbsb_hwnd)))
                    break;

                Toolbar_AutoHide(true);
            }
            KillTimer(hwnd, wParam);
            break;
        }

        if (wParam == TOOLBAR_CLOCK_TIMER)
        {
            Toolbar_setclock();
            InvalidateRect(hwnd, NULL, FALSE);
            break;
        }

        KillTimer(hwnd, wParam);

        if (wParam == TOOLBAR_LABEL_TIMER)
        {
            Toolbar_ShowingExternalLabel = false;
            goto showlabel;
        }

        break;

        //====================

        case WM_LBUTTONDOWN:
            if (wParam & MK_CONTROL)
            {
                // Allow window to move if control key is being held down,
                UpdateWindow(hwnd);
                SendMessage(hwnd, WM_SYSCOMMAND, 0xf012, 0);
                break;
            }
            goto left_mouse;

        case WM_LBUTTONDBLCLK:
            if (wParam & MK_CONTROL)
            {
                // double click moves the window back to the default position
                Toolbar_set_pos();
                break;
            }
            goto left_mouse;

        case WM_MOUSEMOVE:
            if (TBInfo.autohidden)
            {
                // bring back from autohide
                SetTimer(hwnd, TOOLBAR_AUTOHIDE_TIMER, 250, NULL);
                Toolbar_AutoHide(false);
                break;
            }
            goto left_mouse;

        case WM_LBUTTONUP:
        left_mouse:
        {
            POINT MouseEventPoint; int i;
            MouseEventPoint.x = (short)LOWORD(lParam);
            MouseEventPoint.y = (short)HIWORD(lParam);
            if (HandleCapture(hwnd, message, MouseEventPoint))
                break;

            for (i=0; i<5; i++)
            if (CheckButton(
                    hwnd,
                    message,
                    MouseEventPoint,
                    &Toolbar_Button[i].r,
                    &Toolbar_Button[i].pressed,
                    Toolbar_button_event,
                    i
                    )) goto _break;

            if (message == WM_LBUTTONDOWN)
                SetActiveWindow(hwnd);
        }
        _break:
        break;

        //====================
        // show menus

        case WM_RBUTTONUP:
        {
            int x = (short)LOWORD(lParam);
            if (x < tbClockW)
                PostMessage(BBhwnd, BB_MENU, BB_MENU_TASKS, 0);
            else
            if (x >= TBInfo.width - tbClockW)
                PostMessage(BBhwnd, BB_MENU, BB_MENU_ROOT, 0);
            else
                Toolbar_ShowMenu(true);
            break;
        }

        //====================

        case WM_MBUTTONUP:
            // Is shift key held down?
            if (wParam & MK_SHIFT)
                PostMessage(BBhwnd, BB_TOGGLEPLUGINS, 0, 0);
            else
                PostMessage(BBhwnd, BB_TOGGLETRAY, 0, 0);
        break;

        //====================
        // If moved, snap window to screen edges...

        case WM_WINDOWPOSCHANGING:
            if (Toolbar_moving)
                SnapWindowToEdge((WINDOWPOS*)lParam, 0, SNAP_FULLSCREEN);
            break;

        case WM_ENTERSIZEMOVE:
            Toolbar_moving = true;
            break;

        case WM_EXITSIZEMOVE:
            Toolbar_moving = false;
            break;

        //====================

        case BB_BROADCAST:
        {
            const char *broam = (const char*)lParam;

            if (!stricmp(broam, "@BBShowPlugins"))
            {
                Toolbar_hidden = false;
                Toolbar_UpdatePosition();
                break;
            }

            if (!stricmp(broam, "@BBHidePlugins"))
            {
                if (Settings_toolbar.pluginToggle)
                {
                    Toolbar_hidden = true;
                    Toolbar_UpdatePosition();
                }
                break;
            }

            if (0 == memcmp(broam, "@Toolbar.", 9))
            {
                const struct cfgmenu *p_menu, *p_item;
                exec_internal_broam(broam+9, tb_main, &p_menu, &p_item);
                goto tbreconfig;
            }

            break;
        }

        case WM_CLOSE:
            break;

        default:
            return DefWindowProc(hwnd,message,wParam,lParam);

    //====================
    }
    return 0;
}