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();
	}
}
Beispiel #2
0
void ShowNamesRatioImport( EntityCreator& self, int value ){
	self.setShowNamesRatio( value );
	UpdateAllWindows();
}
Beispiel #3
0
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;
}