Example #1
0
os2FrameWindow::~os2FrameWindow()
{
  if (mFrameIcon) {
    WinFreeFileIcon(mFrameIcon);
    mFrameIcon = 0;
  }
}
static void DestroyIcon(HPOINTER hIcon, bool fWpsIcon)
{
  if (fWpsIcon)
    WinDestroyPointer(hIcon);
  else
    WinFreeFileIcon(hIcon);

  return;
}
Example #3
0
nsresult os2FrameWindow::SetIcon(const nsAString& aIconSpec)
{
  static HPOINTER hDefaultIcon = 0;
  HPOINTER        hWorkingIcon = 0;

  // Assume the given string is a local identifier for an icon file.
  nsCOMPtr<nsIFile> iconFile;
  mOwner->ResolveIconName(aIconSpec, NS_LITERAL_STRING(".ico"),
                          getter_AddRefs(iconFile));

  // if the file was found, try to use it
  if (iconFile) {
    nsCAutoString path;
    iconFile->GetNativePath(path);

    if (mFrameIcon) {
      WinFreeFileIcon(mFrameIcon);
    }
    mFrameIcon = WinLoadFileIcon(path.get(), FALSE);
    hWorkingIcon = mFrameIcon;
  }

  // if that doesn't work, use the app's icon (let's hope it can be
  // loaded because nobody should have to look at SPTR_APPICON)
  if (!hWorkingIcon) {
    if (!hDefaultIcon) {
      hDefaultIcon = WinLoadPointer(HWND_DESKTOP, 0, 1);
      if (!hDefaultIcon) {
        hDefaultIcon = WinQuerySysPointer(HWND_DESKTOP, SPTR_APPICON, FALSE);
      }
    }
    hWorkingIcon = hDefaultIcon;
  }

  WinSendMsg(mFrameWnd, WM_SETICON, (MPARAM)hWorkingIcon, (MPARAM)0);
  return NS_OK;
}
// Message определяет пришедшее сообщение.
VOID Changer_ChangerMessageProcessing( PQMSG Message )
{
 // Устанавливаем приоритет потока.
 if( Message->msg == SM_PRIORITY )
  {
   // Устанавливаем приоритет.
   LONG Class = (LONG) Message->mp1;
   LONG Delta = (LONG) Message->mp2;
   DosSetPriority( PRTYS_THREAD, Class, Delta, 0 );

   // Запоминаем приоритет.
   Enhancer.Modules.Changer->Priority = MAKELONG( Class, Delta );
  }

 // Меняем значок окна.
 if( Message->msg == SM_CHANGE_ICON )
  {
   // Узнаем окно рамки.
   HWND Frame_window = (HWND) Message->mp1;
   // Узнаем значок, который должен быть установлен.
   HPOINTER New_icon = (HPOINTER) Message->mp2;

   // Если окна рамки нет - возврат.
   if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return;

   // Меняем значок.
   Changer_ChangeWindowIcon( Frame_window, New_icon );
  }

 // Сбрасываем значок, который был загружен с диска.
 if( Message->msg == SM_FREE_FILE_ICON )
  {
   // Узнаем значок.
   HPOINTER Icon = (HPOINTER) Message->mp1;

   // Освобождаем память.
   WinFreeFileIcon( Icon );
  }

 // Делаем окно доступным или недоступным для переключения.
 if( Message->msg == SM_SET_JUMPABLE )
  {
   // Узнаем окно рамки.
   HWND Frame_window = (HWND) Message->mp1;

   // Если окна рамки нет - возврат.
   if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return;

   // Узнаем свойство.
   ULONG Jumpable = (ULONG) Message->mp2;

   // Меняем его.
   if( Frame_window != GetDetectedShellWindow() ) SetJumpableFlag( Frame_window, Jumpable );
  }

 // Меняем шрифт для текстовых окон - первый и второй шаги.
 if( Message->msg == SM_CHANGE_VIO_FONT || Message->msg == SM_APPLY_VIO_FONT )
  {
   // Узнаем окно рамки.
   HWND Frame_window = (HWND) Message->mp1;

   // Если шрифт менять не надо - возврат.
   if( !VIOFontMustBeChanged( Frame_window ) ) return;

   // Если окна рамки нет - возврат.
   if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return;

   // Шаг первый: вызываем окно смены шрифта и ждем его появления.
   if( Message->msg == SM_CHANGE_VIO_FONT )
    {
     // Проверяем состояние окна.
     BYTE VIO_font_dialog = 0; FindProperty( Frame_window, PRP_VIO_FONT_DIALOG, &VIO_font_dialog );
     // Если для этого окна уже был вызван диалог выбора шрифта - возврат.
     if( VIO_font_dialog ) return;

     // Вызываем окно смены шрифта.
     OpenVIOFontMetricsDialog( Frame_window );

     // Запоминаем, что окно было показано.
     VIO_font_dialog = 1; SetProperty( Frame_window, PRP_VIO_FONT_DIALOG, &VIO_font_dialog );
    }

   // Шаг второй: выбираем в нем шрифт и применяем его.
   if( Message->msg == SM_APPLY_VIO_FONT )
    {
     // Выбираем шрифт.
     SubmitVIOFontMetricsDialog( Frame_window );
    }
  }

 // Делаем окно видимым.
 if( Message->msg == SM_SHOW_AND_ARRANGE )
  {
   // Узнаем окно рамки.
   HWND Frame_window = (HWND) Message->mp1;

   // Если окна рамки нет - возврат.
   if( !WinIsWindow( WinQueryAnchorBlock( Frame_window ), Frame_window ) ) return;

   // Делаем окно видимым.
   if( !WinIsWindowVisible( Frame_window ) ) WinShowWindow( Frame_window, 1 );

   // Если надо выравнивать текстовые окна:
   if( ArrangeVIOWindows() )
    {
     // Посылаем в окно сообщение WM_MARK. Когда оно будет получено, окно можно будет выравнивать.
     WinPostMsg( Frame_window, WM_MARK, (MPARAM) MRK_ARRANGE_WINDOW, (MPARAM) SM_ARRANGE_VIO );
    }
  }

 // Возврат.
 return;
}