void CPrefInfo::SysColorChange() { if (m_bUseWindowsColors) { COLORREF rgbForegroundColor = ::GetSysColor(COLOR_WINDOWTEXT); COLORREF rgbBackgroundColor = ::GetSysColor(COLOR_WINDOW); BOOL bReload = FALSE; // See whether the foreground or background colors changed if (rgbForegroundColor != m_rgbForegroundColor) { m_rgbForegroundColor = rgbForegroundColor; wfe_SetLayoutColor(LO_COLOR_FG, m_rgbForegroundColor); bReload = TRUE; } if (rgbBackgroundColor != m_rgbBackgroundColor) { m_rgbBackgroundColor = rgbBackgroundColor; wfe_SetLayoutColor(LO_COLOR_BG, m_rgbBackgroundColor); bReload = TRUE; } if (bReload) UpdateAllWindows(); } }
void ShowNamesRatioImport( EntityCreator& self, int value ){ self.setShowNamesRatio( value ); UpdateAllWindows(); }
void ToggleShowLightRadii(){ GlobalEntityCreator().setLightRadii( !GlobalEntityCreator().getLightRadii() ); g_show_lightradii_item.update(); UpdateAllWindows(); }
// Message определяет пришедшее сообщение. Thread - поток. VOID Painter_PainterMessageProcessing( PQMSG Message, HAB Thread ) { // Устанавливаем приоритет потока. if( Message->msg == SM_PRIORITY ) { // Устанавливаем приоритет. LONG Class = (LONG) Message->mp1; LONG Delta = (LONG) Message->mp2; DosSetPriority( PRTYS_THREAD, Class, Delta, 0 ); // Запоминаем приоритет. Enhancer.Modules.Painter->Priority = MAKELONG( Class, Delta ); } // Перерисовываем рамки окон. if( Message->msg == SM_DRAW_FRAME ) { // Если рисование отключено - возврат. if( !Painter.Settings.Draw_frames ) return; // Кеш второго уровня: объединяем несколько заданий в одно. { // Ставим задание в список. Painter.RTSettings.Demand[ 0 ].Frame_window = (HWND) Message->mp1; Painter.RTSettings.Demand[ 0 ].Target = (ULONG) Message->mp2; // Забираем следующие задания из очереди и ставим их в список. INT Demand_total = 1; for( INT Count = 1; Count < PAINTER_DEMAND_TABLE; Count ++ ) { QMSG Next_message = {0}; WinPeekMsg( Thread, &Next_message, NULLHANDLE, SM_DRAW_FRAME, SM_DRAW_FRAME, PM_REMOVE ); if( Next_message.msg ) { Painter.RTSettings.Demand[ Count ].Frame_window = (HWND) Next_message.mp1; Painter.RTSettings.Demand[ Count ].Target = (ULONG) Next_message.mp2; Demand_total ++; } else { break; } } // Просматриваем составленный список и выполняем рисование. for( Count = 0; Count < Demand_total; Count ++ ) { // Узнаем окно рамки. HWND Frame_window = Painter.RTSettings.Demand[ Count ].Frame_window; // Если в списке нет значения - продолжаем перебор. if( Frame_window == NULLHANDLE ) continue; // Узнаем, какое окно надо перерисовать. ULONG Target = Painter.RTSettings.Demand[ Count ].Target; // Пробегаем список до конца и забираем задания для того же окна. if( Demand_total > 1 ) if( Count != Demand_total - 1 ) { for( INT Position = Count + 1; Position < Demand_total; Position ++ ) if( Painter.RTSettings.Demand[ Position ].Frame_window == Frame_window ) { Target = Target | Painter.RTSettings.Demand[ Position ].Target; Painter.RTSettings.Demand[ Position ].Frame_window = NULLHANDLE; } } // Если окна нет - продолжаем перебор. if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) continue; // Перерисовываем рамку, применяя "общее задание". Painter_DrawWindowFrame( Frame_window, Target ); } } } // Перерисовываем картинку в левом верхнем углу окна. if( Message->msg == SM_DRAW_SYSMENU ) { // Если рисование отключено - возврат. if( !Painter.Settings.Draw_frames ) return; // Узнаем окно картинки. HWND SysMenu_window = (HWND) Message->mp1; // Если окна нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( SysMenu_window ), SysMenu_window ) ) return; // Узнаем, нажата ли картинка. LONG SysMenu_is_pressed = (LONG) Message->mp2; // Находим в списке значок окна. HPOINTER Icon = NULLHANDLE; HWND Frame_window = WinQueryWindow( SysMenu_window, QW_PARENT ); FindProperty( Frame_window, PRP_ICON, &Icon ); // Узнаем размер и расположение окна рамки. RECT Frame_rectangle = {0}; SWP Frame_placement = {0}; Painter_QueryFrameRectangeAndPlacement( Frame_window, &Frame_rectangle, &Frame_placement ); // Если значок не найден - закрашиваем окно картинки. if( Icon == NULLHANDLE ) Painter_PreDrawControl( SysMenu_window, SYSCLR_BUTTONMIDDLE, 0, Frame_window, &Frame_rectangle, &Frame_placement ); // Иначе - рисуем картинку. else Painter_DrawSystemMenu( SysMenu_window, Frame_window, &Frame_rectangle, &Frame_placement, Icon, FT_UNKNOWN, SysMenu_is_pressed ); } // Перерисовываем кнопки. if( Message->msg == SM_DRAW_BUTTONS ) { // Если рисование отключено - возврат. if( !Painter.Settings.Draw_frames ) return; // Узнаем окно рамки. HWND Frame_window = (HWND) Message->mp1; // Если окна рамки нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return; // Узнаем, как выглядит рамка окна. LONG Frame_type = FrameType( Frame_window ); // Узнаем окно заголовка. HWND TitleBar_window = WinWindowFromID( Frame_window, FID_TITLEBAR ); // Узнаем размер и расположение окна рамки. RECT Frame_rectangle = {0}; SWP Frame_placement = {0}; Painter_QueryFrameRectangeAndPlacement( Frame_window, &Frame_rectangle, &Frame_placement ); // Рисуем кнопки. Painter_DrawButtons( Frame_window, Frame_type, &Frame_rectangle, &Frame_placement, TitleBar_window ); } // Задаем подходящее расположение для окна картинки и кнопок. if( Message->msg == SM_PREPARE_CONTROLS ) { // Узнаем окно рамки. HWND Frame_window = (HWND) Message->mp1; // Если окна рамки нет - возврат. if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return; // Узнаем размер и расположение окна. RECT Frame_rectangle = {0}; SWP Frame_placement = {0}; Painter_QueryFrameRectangeAndPlacement( Frame_window, &Frame_rectangle, &Frame_placement ); // Задаем правильное расположение окна картинки, заголовка и других окон. // При этом окно рамки получит одно сообщение WM_PAINT вместо нескольких. Painter_PrepareWindowControls( Frame_window, FT_UNKNOWN, &Frame_rectangle, &Frame_placement, NULLHANDLE, NULLHANDLE, NULLHANDLE ); } // Обновляем окно. if( Message->msg == SM_UPDATE_FRAME ) UpdateWindow( (HWND) Message->mp1 ); // Обновляем все окна. if( Message->msg == SM_UPDATE_ALL_FRAMES ) { // Перерисовываем рамки всех окон. UpdateAllWindows( QueryDesktopWindow() ); } // Возврат. return; }