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; }
//=========================================================================== 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; }