Exemple #1
0
void Dde_Server::Initiate ( HWND Owner, HWND Client, PDDEINIT pDdeInit ) {

  /**************************************************************************
   * Prepare to respond with a WM_DDE_INITIATEACK.                          *
   **************************************************************************/

   HMQ Queue = WinQueryWindowULong ( Owner, QWL_HMQ ) ;
   char Text [10] ;
   ULONG Size = 10 ;
   int Country = 1 ;
   if ( PrfQueryProfileData ( HINI_USERPROFILE, PSZ("PM_National"), PSZ("iCountry"), Text, &Size ) )
      Country = atoi ( Text ) ;

   CONVCONTEXT Conv ;
   Conv.cb = sizeof(Conv) ;
   Conv.fsContext = DDECTXT_CASESENSITIVE ;
   Conv.idCountry = Country ;
   Conv.usCodepage = WinQueryCp ( Queue ) ;
   Conv.usLangID = 0 ;
   Conv.usSubLangID = 0 ;

  /**************************************************************************
   * Respond if appropriate.                                                *
   **************************************************************************/

   Application.Initiate ( Owner, Client, pDdeInit, Conv ) ;
}
// For frame windows, 'Show' is equivalent to 'Show & Activate'
nsresult nsFrameWindow::Show( PRBool bState)
{
   if( mWnd)
   {
      ULONG ulFlags;
      if( bState) {
         ULONG ulStyle = WinQueryWindowULong( GetMainWindow(), QWL_STYLE);
         ulFlags = SWP_SHOW;
         /* Don't activate the window unless the parent is visible */
         if (WinIsWindowVisible(WinQueryWindow(GetMainWindow(), QW_PARENT)))
           ulFlags |= SWP_ACTIVATE;
         if (!( ulStyle & WS_VISIBLE)) {
            PRInt32 sizeMode;
            GetSizeMode( &sizeMode);
            if ( sizeMode == nsSizeMode_Maximized) {
               ulFlags |= SWP_MAXIMIZE;
            } else if ( sizeMode == nsSizeMode_Minimized) {
               ulFlags |= SWP_MINIMIZE;
            } else {
               ulFlags |= SWP_RESTORE;
            }
         }
         if( ulStyle & WS_MINIMIZED)
            ulFlags |= (SWP_RESTORE | SWP_MAXIMIZE);
      }
      else
         ulFlags = SWP_HIDE | SWP_DEACTIVATE;
      WinSetWindowPos( GetMainWindow(), NULLHANDLE, 0L, 0L, 0L, 0L, ulFlags);
      SetWindowListVisibility( bState);
   }

   return NS_OK;
}
nsresult os2FrameWindow::Show(bool aState)
{
  uint32_t ulFlags;
  if (!aState) {
    ulFlags = SWP_HIDE | SWP_DEACTIVATE;
  } else {
    ulFlags = SWP_SHOW | SWP_ACTIVATE;

    uint32_t ulStyle = WinQueryWindowULong(mFrameWnd, QWL_STYLE);
    int32_t sizeMode;
    mOwner->GetSizeMode(&sizeMode);
    if (!(ulStyle & WS_VISIBLE)) {
      if (sizeMode == nsSizeMode_Maximized) {
        ulFlags |= SWP_MAXIMIZE;
      } else if (sizeMode == nsSizeMode_Minimized) {
        ulFlags |= SWP_MINIMIZE;
      } else {
        ulFlags |= SWP_RESTORE;
      }
    } else if (ulStyle & WS_MINIMIZED) {
      if (sizeMode == nsSizeMode_Maximized) {
        ulFlags |= SWP_MAXIMIZE;
      } else {
        ulFlags |= SWP_RESTORE;
      }
    }
  }

  WinSetWindowPos(mFrameWnd, 0, 0, 0, 0, 0, ulFlags);
  SetWindowListVisibility(aState);

  return NS_OK;
}
Exemple #4
0
MRESULT APIENTRY OpenSaveFilterDlgProc(HWND hwnd, USHORT msg,
				       MPARAM mp1, MPARAM mp2)
{
   if(msg == WM_HELP)
   {
      PFILEDLG pOpenSaveFileDlgStruct;
      /*
       * Get a pointer to the file dialog structure.
       */
      pOpenSaveFileDlgStruct = (PFILEDLG) WinQueryWindowULong(hwnd, QWL_USER);

      /*
       * If this is an the File Open dialog, display the file open help
       * panel.
       */
      if (pOpenSaveFileDlgStruct->fl & FDS_OPEN_DIALOG)
      {
	 //DisplayHelpPanel(PANEL_FILEOPEN);
         return (MRESULT)FALSE ;
      }

      /*
       * If this is an the File Save or Save As dialog, display the file
       * Save As help panel.
       */

      if (pOpenSaveFileDlgStruct->fl & FDS_SAVEAS_DIALOG)
      {
	 //DisplayHelpPanel(PANEL_FILESAVEAS);
         return (MRESULT)FALSE ;
      }
   }
   return WinDefFileDlgProc( hwnd, msg, mp1, mp2 );
}                                       /* End of OpenSaveFilterDlgProc  */
extern MRESULT EXPENTRY ComboBox_Processor ( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ) {

   static PWINDOWPROC DefaultProcessor = 0 ;

   switch ( msg ) {

      case WM_CREATE: {
         CLASSINFO ClassInfo ;
         WinQueryClassInfo ( WinQueryAnchorBlock(hwnd), WC_COMBOBOX, &ClassInfo ) ;
         DefaultProcessor = ClassInfo.pfnWindowProc ;
         MRESULT Result = DefaultProcessor ( hwnd, msg, mp1, mp2 ) ;
         HWND Entryfield = WinWindowFromID ( hwnd, CBID_EDIT ) ;
         ULONG Style = WinQueryWindowULong ( hwnd, QWL_STYLE ) ;
         if ( Style & CBS_DROPDOWNLIST ) {
            OldComboEntry_Processor1 = WinSubclassWindow ( Entryfield, ComboEntry_Processor1 ) ;
         } else {
            OldComboEntry_Processor2 = WinSubclassWindow ( Entryfield, ComboEntry_Processor2 ) ;
         } /* endif */
         return ( Result ) ; }

      case WM_CONTROL: {
         USHORT Id = WinQueryWindowUShort ( hwnd, QWS_ID ) ;
         SHORT Control = SHORT1FROMMP ( mp1 ) ;
         SHORT Message = SHORT2FROMMP ( mp1 ) ;
         switch ( Control ) {
            case CBID_EDIT: {
               switch ( Message ) {
                  case EN_SETFOCUS: {
                     Sys_SendMessage( OWNER(hwnd), WM_CONTROL, MPFROM2SHORT(Id,CBN_SETFOCUS), 0 ) ;
                     break; }
                  case EN_KILLFOCUS: {
                     Sys_SendMessage( OWNER(hwnd), WM_CONTROL, MPFROM2SHORT(Id,CBN_KILLFOCUS), 0 ) ;
                     break; }
               } /* endswitch */
               break; }
            case CBID_LIST: {
               switch ( Message ) {
                  case LN_SETFOCUS: {
                     Sys_SendMessage( OWNER(hwnd), WM_CONTROL, MPFROM2SHORT(Id,CBN_SETFOCUS), 0 ) ;
                     break; }
                  case LN_KILLFOCUS: {
                     Sys_SendMessage( OWNER(hwnd), WM_CONTROL, MPFROM2SHORT(Id,CBN_KILLFOCUS), 0 ) ;
                     break; }
               } /* endswitch */
               break; }
         } /* endswitch */
         break; }

      case WM_MEASUREITEM:
         return ( Sys_SendMessage( OWNER(hwnd), msg, mp1, mp2 ) ) ;

      case WM_DRAWITEM: 
         return ( Sys_SendMessage( OWNER(hwnd), msg, mp1, mp2 ) ) ;

   } /* endswitch */

   return ( DefaultProcessor ? DefaultProcessor ( hwnd, msg, mp1, mp2 ) : 0 ) ;
}
Exemple #6
0
// Top-level notebook dialog procedure -- for WM_INITDLG, expects mp2 to be a
// pointer to a notebook header structure which defines the notebook
MRESULT EXPENTRY NotebookDlgProc(HWND hDlg, ULONG msg, MPARAM mp1, MPARAM mp2)
{
	int nPage;
	PNBHDR pNotebookHdr;

	if (msg != WM_INITDLG)
		pNotebookHdr = (PNBHDR)WinQueryWindowULong(hDlg, QWL_USER);

	switch(msg) {
	case WM_INITDLG:

		pNotebookHdr = (PNBHDR)(PVOIDFROMMP(mp2));
		pNotebookHdr->hwndNB = WinWindowFromID(hDlg, pNotebookHdr->ulNotebookID);

		// Save upper-level dialog handle for use by page dialog code
		pNotebookHdr->hwndNBDlg = hDlg;

		// Save header pointer in window data so WM_SIZE code can use it
		WinSetWindowULong(hDlg, QWL_USER, (ULONG)pNotebookHdr);

		// Create the notebook
		if (!CreateNotebook(pNotebookHdr)) {
			WinDismissDlg(hDlg, 0);
			return 0;
		}

		// Post a message to open the notebook after initialization is complete
		WinPostMsg(hDlg, WM_OPEN_NOTEBOOK, MP0, MP0);
		break;

	case WM_OPEN_NOTEBOOK:

		// Select the first page, and set the notebook size
		TurnToFirstPage(pNotebookHdr->hwndNB);
		SetNotebookSize(pNotebookHdr);
		break;

	case WM_CONTROL:
		// If user selected a new page, switch to it
		if (((ULONG)pNotebookHdr != 0L) && (SHORT1FROMMP(mp1) == pNotebookHdr->ulNotebookID) && (SHORT2FROMMP(mp1) == BKN_PAGESELECTED))
			SetNBPage(hDlg, (PPAGESELECTNOTIFY)mp2);
		break;

	case WM_CLOSE_NOTEBOOK:
		// clear the notebook page array dialog handles to show the pages are no longer in use
		for (nPage = 0; (nPage < pNotebookHdr->nPages); nPage++)
			pNotebookHdr->PageArray[nPage].hwndPageDlg = (HWND)0L;
		WinDismissDlg(hDlg, 0);
		break;

	default:
		return WinDefDlgProc(hDlg, msg, mp1, mp2);
	}

	return 0;

}
// Frame_window - окно рамки.
VOID Diver_CheckWindowFrameDrawingNode( HWND Frame_window )
{
 // Посылаем сообщение в очередь.
 HMQ Message_queue = WinQueryWindowULong( Frame_window, QWL_HMQ );
 WinPostQueueMsg( Message_queue, WM_MARK, (MPARAM) MRK_DRAW_FRAME, (MPARAM) Frame_window );

 // Возврат.
 return;
}
MRESULT _System DrvMountDrivesDlg( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
 
{
    if (msg == WM_TIMER && mp1 == (MP)CAM_LVMTMR) {
        HEV  hev = WinQueryWindowULong( hwnd, QWL_USER);

        if (!WinWaitEventSem( hev, 0))
            WinSendMsg( hwnd, WM_COMMAND, (MP)CAM_LVMTMR, 0);
        return (0);
    }

    if (msg == WM_COMMAND || msg == WM_SYSCOMMAND) {
        ULONG   ulChk;

        if (!WinStopTimer( 0, hwnd, CAM_LVMTMR))
            printf( "DrvMountDrivesDlg - WinStopTimer\n");

        ulChk = (ULONG)WinSendDlgItemMsg( hwnd, IDC_AUTOMOUNT,
                                          BM_QUERYCHECK, 0, 0);
        DrvSetUseLvm( WinQueryWindow( hwnd, QW_OWNER), ulChk);

        WindowClosed( WinQueryWindowUShort( hwnd, QWS_ID));
        WinDismissDlg( hwnd, (mp1 == (MP)CAM_LVMTMR));
        return (0);
    }

    if (msg == WM_INITDLG) {
        HEV  hev = (HEV)mp2;

        WinSetWindowULong( hwnd, QWL_USER, hev);
        LoadDlgStrings( hwnd, nlsMountDlg);
        WinSendDlgItemMsg( hwnd, IDC_AUTOMOUNT, BM_SETCHECK,
                           (MP)(CAMDRV_IS_NOLVM ? 0 : 1), 0);
        ShowDialog( hwnd, 0);

        if (!WinWaitEventSem( hev, 0)) {
            WindowClosed( WinQueryWindowUShort( hwnd, QWS_ID));
            WinDismissDlg( hwnd, TRUE);
        }
        else
            if (!WinStartTimer( 0, hwnd, CAM_LVMTMR, 250))
                printf( "DrvMountDrivesDlg - WinStartTimer\n");
        return (0);
    }

    if (msg == WM_FOCUSCHANGE) {
        if (SHORT1FROMMP(mp2) && !WinIsWindowEnabled( hwnd)) {
            WinPostMsg( WinQueryWindow( hwnd, QW_OWNER),
                        CAMMSG_FOCUSCHANGE, 0, 0);
            return (0);
        }
    }

    return (WinDefDlgProc( hwnd, msg, mp1, mp2));
}
//************************************************************************************************
// "Playlist API"
//************************************************************************************************
void plAddEntry(HWND hWnd, PSZ pszFilename)
{
   PSTRINGLIST pFirstNode = (PSTRINGLIST)WinQueryWindowPtr(hWnd, QWP_PLAYLIST);
   PSTRINGLIST pList = (PSTRINGLIST)WinQueryWindowPtr(hWnd, QWP_CURRENTENTRY);
   ULONG       cCount = WinQueryWindowULong(hWnd, QWL_PLAYLISTENTRIES);

   if(pFirstNode == NULL)
   {
      // allocate node and increase nodecounter
      pFirstNode = new STRINGLIST;
      cCount++;

      // link it to itself (ever tried biting your own tail?)
      pFirstNode->next = pFirstNode;
      pFirstNode->prev = pFirstNode;

      // allocate stringbuffer in node and copy string to node
      pFirstNode->pszString = new char[strlen(pszFilename)+1];
      strcpy(pFirstNode->pszString, pszFilename);

      // set some nice pointers
      WinSetWindowPtr(hWnd, QWP_PLAYLIST, (PVOID)pFirstNode);
      WinSetWindowPtr(hWnd, QWP_CURRENTENTRY, (PVOID)pFirstNode);
      WinSetWindowULong(hWnd, QWL_PLAYLISTENTRIES, cCount);

      // go no further
      return;
   }

   // allocate the new node & increase the nodecounter
   pList->next = new STRINGLIST;
   cCount++;

   // set the new nodes previous-pointer to the current node (are we confused yet?)
   pList->next->prev = pList;

   // move to the next node
   pList = pList->next;

   // allocate stringbuffer in node and copy string to node
   pList->pszString = new char[strlen(pszFilename)+1];
   strcpy(pList->pszString, pszFilename);

   // link it to the first node in the list
   pList->next = pFirstNode;

   // link the first node's previous-pointer to the current node, since it is the last one (hello?)
   pFirstNode->prev = pList;

   // finish it all off with a big party!
   WinSetWindowPtr(hWnd, QWP_CURRENTENTRY, (PVOID)pList);
   WinSetWindowULong(hWnd, QWL_PLAYLISTENTRIES, cCount);
}
Exemple #10
0
nsresult os2FrameWindow::SetSizeMode(int32_t aMode)
{
  int32_t previousMode;
  mOwner->GetSizeMode(&previousMode);

  // save the new state
  nsresult rv = mOwner->nsBaseWidget::SetSizeMode(aMode);
  if (!NS_SUCCEEDED(rv)) {
    return rv;
  }

  // Minimized windows would get restored involuntarily if we fired an
  // NS_ACTIVATE when the user clicks on them.  Instead, we defer the
  // activation event until the window has explicitly been restored.
  if (previousMode == nsSizeMode_Minimized && previousMode != aMode) {
    DEBUGFOCUS(deferred NS_ACTIVATE);
    ActivateTopLevelWidget();
  }

  ULONG ulStyle = WinQueryWindowULong(mFrameWnd, QWL_STYLE);

  switch (aMode) {
    case nsSizeMode_Normal:
      if (ulStyle & (WS_MAXIMIZED | WS_MINIMIZED)) {
        WinSetWindowPos(mFrameWnd, 0, 0, 0, 0, 0, SWP_RESTORE);
      }
      break;

    case nsSizeMode_Minimized:
      if (!(ulStyle & WS_MINIMIZED)) {
        WinSetWindowPos(mFrameWnd, HWND_BOTTOM, 0, 0, 0, 0,
                        SWP_MINIMIZE | SWP_ZORDER | SWP_DEACTIVATE);
      }
      break;

    case nsSizeMode_Maximized:
      // Don't permit the window to be maximized when in
      // fullscreen mode because it won't be restored correctly.
      if (!(ulStyle & WS_MAXIMIZED) && !mChromeHidden) {
        WinSetWindowPos(mFrameWnd, HWND_TOP, 0, 0, 0, 0,
                        SWP_MAXIMIZE | SWP_ZORDER);
      }
      break;

    // 'nsSizeMode_Fullscreen' is defined but isn't used (as of v1.9.3)
    case nsSizeMode_Fullscreen:
    default:
      break;
  }

  return NS_OK;
}
// Window - окно, Window_is_VIO - что это за окно.
ULONG Krnl_Environment_QueryCodePage( HWND Window, INT Window_is_VIO = -1 )
{
 // Узнаем, что это за окно, если требуется.
 if( Window_is_VIO == -1 )
  {
   if( IsVIOWindow( QueryFrameWindow( Window ) ) ) Window_is_VIO = 1;
   else Window_is_VIO = 0;
  }

 // Для текстовых окон возвращаем значение по умолчанию.
 if( Window_is_VIO ) return Environment_QuerySystemCodePage();

 // Возвращаем страну, которая установлена для окна.
 return WinQueryCp( WinQueryWindowULong( Window, QWL_HMQ ) );
}
Exemple #12
0
nsresult os2FrameWindow::HideWindowChrome(bool aShouldHide)
{
  // Putting a maximized window into fullscreen mode causes multiple
  // problems if it's later minimized & then restored.  To avoid them,
  // restore maximized windows before putting them in fullscreen mode.
  if (WinQueryWindowULong(mFrameWnd, QWL_STYLE) & WS_MAXIMIZED) {
    WinSetWindowPos(mFrameWnd, 0, 0, 0, 0, 0, SWP_RESTORE | SWP_NOREDRAW);
  }

  HWND hParent;
  if (aShouldHide) {
    hParent = HWND_OBJECT;
    mChromeHidden = true;
  } else {
    hParent = mFrameWnd;
    mChromeHidden = false;
  }

  // Hide or show the frame controls.
  WinSetParent(mTitleBar, hParent, FALSE);
  WinSetParent(mSysMenu, hParent, FALSE);
  WinSetParent(mMinMax, hParent, FALSE);

  // Modify the frame style, then advise it of the changes.
  if (aShouldHide) {
    mSavedStyle = WinQueryWindowULong(mFrameWnd, QWL_STYLE);
    WinSetWindowULong(mFrameWnd, QWL_STYLE, mSavedStyle & ~FS_SIZEBORDER);
    WinSendMsg(mFrameWnd, WM_UPDATEFRAME, 0, 0);
  } else {
    WinSetWindowULong(mFrameWnd, QWL_STYLE, mSavedStyle);
    WinSendMsg(mFrameWnd, WM_UPDATEFRAME,
               MPFROMLONG(FCF_TITLEBAR | FCF_SYSMENU | FCF_MINMAX), 0);
  }

  return NS_OK;
}
   //------------------------
   // A main window procedure
   //------------------------
   static MRESULT EXPENTRY message::MainProc (HWND hwnd, ULONG msg, MPARAM mp1,
                                                                                      MPARAM mp2)
   {
      HWND  hwndtemp;

      // Must retrieve the pointer (to all the data members) from the frame since a user pointer
      // can't be stored with a client window.

      hwndtemp = WinQueryWindow (hwnd, QW_PARENT);
      PMESSAGEDATA pmd2;
      if (hwndtemp) pmd2 = (PMESSAGEDATA) WinQueryWindowULong (hwndtemp, QWL_USER);

      switch (msg)
      {
         case WM_SIZE:

            // Keep the MLE sized to fit the client.

            if (pmd2)
            {
               WinQueryWindowPos (pmd2->hwndClient, (PSWP)&pmd2->swp);
               WinSetWindowPos (pmd2->hwndMLE, HWND_TOP, pmd2->swp.x,
                            pmd2->swp.y, pmd2->swp.cx, pmd2->swp.cy, SWP_SIZE | SWP_MOVE);
            }
            break;

         case WM_SETFOCUS:

            // If the message window loses focus, shut it down.
            // This will ensure that the function that called it will get a return and
            // will have a chance to delete new memory etc.

            if (pmd2)
            {
               if (SHORT1FROMMP (mp2) == 0)
                                 WinSendMsg (hwnd, WM_CLOSE, NULL, NULL);
            }
            break;

//-         case WM_CLOSE:
//-            if (pmd2)
//-            {
//-
//-            }
//-            break;
      }
      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
   }
// Все переменные - внешние.
VOID ApplierKbdInputHook( HAB Application, PQMSG Message, PBYTE Discarding )
{
 // Запоминаем значения в окне ввода пароля.
 if( Applier.Settings.Script_after_Logon ) if( Applier.RTSettings.Logon_in_process )
  {
   // Следим за нажатиями на клавиши.
   if( Message->msg == WM_CHAR )
    {
     // Смотрим, какая клавиша нажата.
     BYTE Scan_code = CHAR4FROMMP( Message->mp1 );
     SHORT State = SHORT1FROMMP( Message->mp1 );

     // Если идет отжатие клавиши:
     if( State & KC_KEYUP )
      {
       // Проверяем клавишу.
       BYTE Latin_key = 0;

       if( Scan_code != 0 )
        if( !( State & KC_CTRL ) ) if( !( State & KC_ALT ) )
         Latin_key = 1;

       // Если это латинская клавиша:
       if( Latin_key )
        {
         // Узнаем окно рамки.
         HWND Frame_window = QueryFrameWindow( Message->hwnd );

         // Если оно есть в списке отслеживаемых окон:
         for( INT Count = APPLIER_MONITORING_LOGON_WINDOWS - 1; Count >= 0; Count -- )
          if( Applier.RTDlgMemory.Logon_windows[ Count ].Window == Frame_window )
           {
            // Посылаем в очередь сообщение WM_MARK. Когда оно будет получено, окно подготовит значение в поле ввода.
            HMQ Message_queue = WinQueryWindowULong( Frame_window, QWL_HMQ );
            WinPostQueueMsg( Message_queue, WM_MARK, (MPARAM) MRK_LOGON_VALUES, (MPARAM) Frame_window );
            break;
           }
        }
      }
    }
  }

 // Возврат.
 return;
}
void PlayCompleted(HWND hWnd)
{
   PSTRINGLIST pFirst = (PSTRINGLIST)WinQueryWindowPtr(hWnd, QWP_PLAYLIST);
   PSTRINGLIST pList = (PSTRINGLIST)WinQueryWindowPtr(hWnd, QWP_CURRENTENTRY);

   if((pList->next == pFirst) && (WinQueryWindowULong(hWnd, QWL_LOOP) == 0))
   {
      WinSendMsg(hWnd, WM_CLOSE, NULL, NULL);
      return;
   }
   pList = pList->next;
   WinSetWindowPtr(hWnd, QWP_CURRENTENTRY, pList);

   if((BOOL)WinSendMsg(hWnd, WMU_LOAD, NULL, NULL))
   {
      WinSendMsg(hWnd, WMU_PLAY, NULL, NULL);
   }
}
// Все переменные - внешние.
VOID RoomsSendMsgHook( HAB Application, PSMHSTRUCT Message )
{
 // Если надо добавить комнаты к рабочему столу:
 if( Rooms.Settings.Create_Rooms ) if( !RoomsChangeIsInProcess() )
  {
   // Если окно рамки становится выбранным:
   if( TopFrameWindowIsActivating( Message ) )
    {
     // Узнаем окно рамки.
     HWND Frame_window = QueryFrameWindow( Message->hwnd );

     // Запоминаем комнату, в которой располагается окно.
     Rooms_SetRoomProperty( Frame_window, GetCurrentOrNextRoom() );

     // Делаем окно доступным для переключения.
     WinPostQueueMsg( Enhancer.Modules.Changer->Message_queue, SM_SET_JUMPABLE, (MPARAM) Frame_window, (MPARAM) SWL_JUMPABLE );
    }

   // Если используется оболочка WPS:
   if( ShellIsWPS() )
    {
     // Если окно оболочки скрыто:
     if( GetCurrentOrNextRoom() != SHELL_ROOM )
      {
       // Если оно возвращается в обычное состояние или становится выбранным - надо спрятать его.
       if( TopFrameWindowIsMoving( Message ) || TopFrameWindowIsActivating( Message ) )
        {
         // Узнаем окно рамки.
         HWND Frame_window = QueryFrameWindow( Message->hwnd );

         // Если это окно WPS - посылаем в очередь сообщение WM_MARK. Когда оно будет получено, окно можно будет проверить.
         if( IsFolderWindow( Frame_window ) )
          {
           HMQ Message_queue = WinQueryWindowULong( Frame_window, QWL_HMQ );
           WinPostQueueMsg( Message_queue, WM_MARK, (MPARAM) MRK_CHECK_WINDOW, (MPARAM) Frame_window );
          }
        }
      }
    }
  }

 // Возврат.
 return;
}
// Frame_window - окно рамки. Возвращаемое значение - вид рамки.
LONG WindowTypes_FrameType( HWND Frame_window )
{
 // Узнаем, как выглядит рамка окна.
 ULONG Frame_style = WinQueryWindowULong( Frame_window, QWL_STYLE );

 // Если окно имеет обычную рамку - возвращаем значение.
 if( Frame_style & FS_SIZEBORDER ) return FT_NORMAL;

 // Если это окно постоянного размера или плоское окно - смотрим, есть ли у него заголовок.
 if( Frame_style & FS_DLGBORDER )
  {
   // Узнаем окно заголовка.
   HWND TitleBar_window = WinWindowFromID( Frame_window, FID_TITLEBAR );

   // Если окна заголовка нет - это плоское окно.
   if( TitleBar_window == NULLHANDLE ) return FT_FLAT;

   // Если окно заголовка не показано:
   if( !WindowTypes_WindowIsPresent( TitleBar_window ) )
    {
     // Узнаем расположение окна рамки и его состояние.
     SWP Window_state = {0}; WinQueryWindowPos( Frame_window, &Window_state );

     // Если окно не скрыто и не уменьшено в значок - это плоское окно.
     if( !( Window_state.fl & SWP_HIDE ) )
      if( !( Window_state.fl & SWP_MINIMIZE ) )
       return FT_FLAT;
    }

   // Иначе - это окно постоянного размера.
   return FT_CONST;
  }

 // Окно может иметь рамку в 1 точку.
 if( Frame_style & FS_BORDER ) return FT_POINT;

 // У него может быть только заголовок.
 if( WinWindowFromID( Frame_window, FID_TITLEBAR ) != NULLHANDLE ) return FT_NOFRAME;

 // В другом случае считаем, что рамка не нарисована.
 return FT_RECT;
}
// Window - окно, для которого надо отключить заставку.
VOID Patcher_DisableAnimation( HWND Window )
{
 // Если окно неизвестно - возврат.
 if( Window == NULLHANDLE ) return;

 // Узнаем свойства окна.
 ULONG Window_style = WinQueryWindowULong( Window, QWL_STYLE );

 // Если заставка отключена - возврат.
 if( !( Window_style & WS_ANIMATE ) ) return;

 // Отключаем заставку.
 Window_style = Window_style & ~WS_ANIMATE;

 // Устанавливаем свойства рамки окна.
 WinSetWindowULong( Window, QWL_STYLE, Window_style );

 // Возврат.
 return;
}
/**********************************************************************
 * Function: SrcSelDlgProc
 * Info    : dialog event handler for source file selection
 * Result  : TRUE or FALSE
 **********************************************************************/
MRESULT EXPENTRY SrcSelDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{

 static PFILEDLG pFileDlg;
 MRESULT rc = FALSE;
 USHORT Val;

 switch (msg)
 {

   case WM_INITDLG:
      CenterWindow(hwnd);
      /* Get pointer to FILEDLG structure */
      pFileDlg = (PFILEDLG) WinQueryWindowULong(hwnd, QWL_USER);
    break;

   case WM_HELP:
     DisplayHelp(IDL_SRCFILE_HELP);
    break;

   case WM_COMMAND:
    switch(Val = SHORT1FROMMP(mp1))
    {
      case DID_APPLY_PB:
        if (NO_ERROR == CopyClipBoardData2TempFile())
        {
         pFileDlg->lReturn = DID_APPLY_PB;
         WinDismissDlg(hwnd, TRUE);
         return (MRESULT) TRUE;
        }
       break;
    }
    /* fall through for appropriate DID_OK handling by default windows proc!  */

   default:
     rc = WinDefFileDlgProc (hwnd, msg, mp1, mp2);
 }

 return rc;

}
Exemple #20
0
MRESULT EXPENTRY wndFrameProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
  HWND       hwndClient = WinQueryWindow( hwnd, QW_BOTTOM );
  PGROPDATA  pGrop = (PGROPDATA)WinQueryWindowULong( hwndClient, 0 );

  switch( msg )
  {
    case WM_ADJUSTFRAMEPOS:
      if ( !pGrop->fInternalResize && !pGrop->pVideoSys->fFreeWinSize &&
           ( (pGrop->stUserMode.ulFlags & GROP_MODEFL_RESIZABLE) == 0 ) &&
           ( (((PSWP)mp1)->fl & (SWP_SIZE | SWP_MINIMIZE)) == SWP_SIZE ) )
      {
        RECTL          rectl;

        rectl.xLeft = 0;
        rectl.yBottom = 0;
        rectl.xRight = pGrop->stUserMode.ulWidth;
        rectl.yTop = pGrop->stUserMode.ulHeight;
        WinCalcFrameRect( hwnd, &rectl, FALSE );

        ((PSWP)mp1)->cx = rectl.xRight - rectl.xLeft;
        ((PSWP)mp1)->cy = rectl.yTop - rectl.yBottom;
      }
      break;

    case WM_MINMAXFRAME:
      if ( (((PSWP)mp1)->fl & SWP_MINIMIZE) != 0 )
        // To avoid call GROPCALLBACK.fnSize() on window minimization...
        pGrop->lSkipWinResize++;

      if ( ( (((PSWP)mp1)->fl & SWP_MAXIMIZE) != 0 ) && !pGrop->fInternalResize &&
           !pGrop->pVideoSys->fFreeWinSize &&
           ( (pGrop->stUserMode.ulFlags & GROP_MODEFL_RESIZABLE) == 0 ) )
        ((PSWP)mp1)->fl &= ~(SWP_MAXIMIZE | SWP_MOVE);
      break;
  }

  return pGrop->fnOldFrameWinProc( hwnd, msg, mp1, mp2 );
}
Exemple #21
0
MRESULT EXPENTRY WndProc( HWND hWnd,ULONG iMessage,
                          MPARAM mParam1, MPARAM mParam2)
{
	Window *pWindow = (Window *)WinQueryWindowULong(hWnd,0);
  MRESULT res;

	if (pWindow == 0) {
		if (iMessage == WM_CREATE) {
			pWindow = (Window *)Application::tempthis;
			WinSetWindowULong(hWnd,0,(ULONG)pWindow);
			res = pWindow->wndProc(hWnd,iMessage,mParam1,mParam2);
		} else
			return WinDefWindowProc(hWnd,iMessage,mParam1,mParam2);
	} else
		res = pWindow->wndProc(hWnd,iMessage,mParam1,mParam2);

  if( pWindow != 0 && pWindow->killMe )
  {
    WinSetWindowULong(hWnd,0,(ULONG)0L);
    delete pWindow;
  }
  return res;
}
Exemple #22
0
nsresult os2FrameWindow::SetSizeMode(PRInt32 aMode)
{
  PRInt32 previousMode;
  mOwner->GetSizeMode(&previousMode);

  // save the new state
  nsresult rv = mOwner->nsBaseWidget::SetSizeMode(aMode);

  // Minimized windows would get restored involuntarily if we fired an
  // NS_ACTIVATE when the user clicks on them.  Instead, we defer the
  // activation event until the window has explicitly been restored.
  if (previousMode == nsSizeMode_Minimized && previousMode != aMode) {
    DEBUGFOCUS(deferred NS_ACTIVATE);
    ActivateTopLevelWidget();
  }

  // nothing to do in these cases
  if (!NS_SUCCEEDED(rv) || !mChromeHidden || aMode == nsSizeMode_Maximized) {
    return rv;
  }

  ULONG ulStyle = WinQueryWindowULong(mFrameWnd, QWL_STYLE);

  // act on the request if the frame isn't already in the requested state
  if (aMode == nsSizeMode_Minimized) {
    if (!(ulStyle & WS_MINIMIZED)) {
      WinSetWindowPos(mFrameWnd, HWND_BOTTOM, 0, 0, 0, 0,
                      SWP_MINIMIZE | SWP_ZORDER | SWP_DEACTIVATE);
    }
  } else
  if (ulStyle & (WS_MAXIMIZED | WS_MINIMIZED)) {
    WinSetWindowPos(mFrameWnd, 0, 0, 0, 0, 0, SWP_RESTORE);
  }

  return NS_OK;
}
static MRESULT EXPENTRY newLaunchPadButtonProc(HWND hwnd, ULONG msg,MPARAM mp1,MPARAM mp2 )
{
  POINTL ptl;
  HWND hwndMenu;
  WPObject * wpObject;
  LPObject* lpo;
  PDRAGINFO pDragInfo;
  static BOOL bDrawn=FALSE;
  static DRAGITEM DragItem;
  static DRAGIMAGE DragImage;
  static DRAGINFO *DragInfo;

  switch (msg)
    {

    case WM_PAINT:
      lpo=(LPObject*)WinQueryWindowULong(hwnd,QWL_USER);
      if(lpo) {
        BTNCDATA btCtrl={0};
        WNDPARAMS wndParams={0};

        // memset(&btCtrl,0,sizeof(btCtrl));
        btCtrl.cb=sizeof(btCtrl);
        if(somIsObj(lpo->wpObject)) {
          btCtrl.hImage=lpo->wpObject->wpQueryIcon();
          // memset(&wndParams,0,sizeof(wndParams));
          wndParams.fsStatus=WPM_CTLDATA;
          wndParams.cbCtlData=btCtrl.cb;
          wndParams.pCtlData=&btCtrl;
          WinSendMsg(hwnd,WM_SETWINDOWPARAMS,
                     MPFROMP(&wndParams),0);
        }
      }
      break;
    case WM_CONTEXTMENU:
      if(!SHORT2FROMMP(mp2)) {

        lpo=(LPObject*)WinQueryWindowULong(hwnd,QWL_USER);
        if(lpo) {
          wpObject=lpo->wpObject;
          if(somIsObj(wpObject)) {
            ptl.y=0;
            ptl.x=0;
            hwndMenu=wpObject->wpDisplayMenu(hwnd,hwnd,&ptl,MENU_OBJECTPOPUP,0);
          }
          return (MRESULT) TRUE;
        }
      }/* end of if(!SHORT2FROMMP(mp2)) */
      break;
    case DM_DRAGOVER:
      {
        BOOL bReturn=FALSE;

        TRY_LOUD(LP_DRAGOVER) {
        lpo=(LPObject*)WinQueryWindowULong(hwnd,QWL_USER);
        if(lpo) {
          wpObject=lpo->wpObject;
          if(somIsObj(wpObject)) {
            char chrClassName[10];
            LONG lLength;
            
            pDragInfo=(PDRAGINFO) mp1;
            hwndMenu=pDragInfo->hwndSource;
            lLength=sizeof(chrClassName);
            WinQueryClassName(hwndMenu, lLength, chrClassName);
            if(strcmp(chrClassName,"#37"))
              hwndMenu=NULL;/* Source isn't a container */
            if(!bDrawn) {
              HPS hps;
              RECTL rectl;
              SWP swp;

              /* Draw the rect */
              hps=DrgGetPS(hwnd);
              WinQueryWindowPos(hwnd,&swp);
              rectl.xLeft=1;
              rectl.yBottom=1;
              rectl.xRight=swp.cx-1;
              rectl.yTop=swp.cy-1;
              //WinDrawBorder(hps,&rectl, 3, 3, 0, 0, DB_STANDARD|DB_PATINVERT);  
              DrgReleasePS(hps);
              //bDrawn=TRUE;
            }
            bReturn=TRUE;
          }
        }
        }
        CATCH(LP_DRAGOVER)
          {
          } END_CATCH;
          if(bReturn)
            return wpObject->wpDragOver(hwndMenu,(PDRAGINFO) mp1);
          break;
      }
    case DM_DRAGLEAVE:
      {
        RECTL rectl;
        SWP swp;
        HPS hps;
        
        /* Remove target emphasis here */
        hps=DrgGetPS(hwnd);
        WinQueryWindowPos(hwnd,&swp);
        rectl.xLeft=1;
        rectl.yBottom=1;
        rectl.xRight=swp.cx-1;
        rectl.yTop=swp.cy-1;
        // WinDrawBorder(hps,&rectl,3, 3, 0, 0, DB_STANDARD|DB_PATINVERT);  
        bDrawn=FALSE;
        DrgReleasePS(hps);
        return (MRESULT) FALSE;
      } 
   case DM_DROP:
      {
        BOOL bReturn=FALSE;
        char chrClassName[10];
        LONG lLength;
        PDRAGITEM pDragItem;

        TRY_LOUD(LP_DROP) {
          /* A drop on a toolbar button */
          lpo=(LPObject*)WinQueryWindowULong(hwnd,QWL_USER);
          if(lpo) {
            wpObject=lpo->wpObject;
            if(somIsObj(wpObject)) { 
              pDragInfo=(PDRAGINFO) mp1;
              pDragItem=DrgQueryDragitemPtr(pDragInfo, 0);
              hwndMenu=pDragInfo->hwndSource;
              lLength=sizeof(chrClassName);
              WinQueryClassName(hwndMenu, lLength, chrClassName);
              if(strcmp(chrClassName,"#37"))
                hwndMenu=NULL;/* Source isn't a container */
              bReturn=TRUE;
            }
          }
        }
        CATCH(LP_DROP)
          {
          } END_CATCH;
          if(bReturn)
            return wpObject->wpDrop(hwndMenu,(PDRAGINFO) mp1, pDragItem);
          break;
      }
    case WM_COMMAND:
      TRY_LOUD(LP_COMMAND) {
      lpo=(LPObject*)WinQueryWindowULong(hwnd,QWL_USER);
      if(lpo) {
        wpObject=lpo->wpObject;
        if(somIsObj(wpObject)) {
          if((SHORT)0x6d==SHORT1FROMMP(mp1)) {
            /* Delete menu item */       
            if(wpObject->wpDelete(CONFIRM_DELETE|CONFIRM_DELETEFOLDER ) == OK_DELETE)
              lpo->lpParent->lpRemoveButton(lpo);
          }
          else
            wpObject->wpMenuItemSelected(NULL, SHORT1FROMMP(mp1));
        }/* end of if(somIsObj(wpObject)) */
      }
      }  
      CATCH(LP_COMMAND)
        {
        } END_CATCH;
        return (MRESULT) FALSE;
    default:
      break;			
    }
  // call the standard flyover button procedure to handle the rest of the messages
  return (newButtonProc)(hwnd,msg,mp1,mp2);	
};
static MRESULT EXPENTRY launchPadWindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2) 
{
  WPFolder* thisPtr;
  launchPad * lp;
  LPObject *lpo;
  static USHORT id=0;//Initialisation new in V1.00a 

  switch(msg)
    {
#if 0
    case DM_ENDCONVERSATION:
    case DM_DRAGFILECOMPLETE:
    case DM_DROPNOTIFY:
    case DM_FILERENDERED:
    case DM_RENDERCOMPLETE:

break;
      return (MRESULT)FALSE;
    case WM_ENDDRAG:

      break;
      return (MRESULT)TRUE;
#endif
    case WM_PAINT:
      {
      RECTL rcl;
      launchPad * lp;

      HPS hps=WinBeginPaint(hwnd,NULLHANDLE, &rcl);
      WinFillRect(hps, &rcl, SYSCLR_DIALOGBACKGROUND);
      lp=(launchPad*)WinQueryWindowULong(hwnd,QWL_USER);
      if(lp) {
        if(lp->lpQueryNumObjects()==0) {
          WinQueryWindowRect(hwnd,&rcl);
          WinDrawBorder(hps,&rcl,1,1,SYSCLR_WINDOWFRAME,SYSCLR_DIALOGBACKGROUND, DB_STANDARD);
        }
      }
      WinEndPaint(hps);
      return (MRESULT) 0;
      }
    case DM_DRAGOVER:
      return handleDragOver(hwnd, mp1, mp2);
    case DM_DROP:
      {
        ULONG ulCount;
        ULONG ulNumberOfObjects;
        PDRAGITEM pDragItem;
        SOMClass *folderClass;
        WPObject * wpObject;
        PDRAGINFO pDragInfo;
       
        TRY_LOUD(LP_FRAMEDROP) { 
          /* A new object dropped on the launchpad */
          pDragInfo=(PDRAGINFO)mp1;
          if(DrgAccessDraginfo(pDragInfo)) {
            /* Get number of items */
            ulNumberOfObjects = DrgQueryDragitemCount( pDragInfo);           
            if(ulNumberOfObjects>1){
              /* Free the draginfo */
              DrgDeleteDraginfoStrHandles(pDragInfo);
              DrgFreeDraginfo(pDragInfo);
            }
            else { 
              ulCount=0;
              
              pDragItem=DrgQueryDragitemPtr( pDragInfo, ulCount);
              wpObject=(WPObject*)OBJECT_FROM_PREC(DrgQueryDragitemPtr( pDragInfo, ulCount)->ulItemID);
              lp=(launchPad*)WinQueryWindowULong(hwnd,QWL_USER);
              if(lp) {
                if(somIsObj(wpObject)) {
  
                  POINTL ptl;
                  int numB;
                  SWP swp;
                  
                  WinQueryWindowPos(hwnd,&swp);
                  ptl.x=pDragInfo->xDrop;
                  ptl.y=pDragInfo->yDrop;
                  /* Pos in window coords */
                  WinMapWindowPoints(HWND_DESKTOP, hwnd, &ptl, 1);
                  numB=(ptl.x-xButtonOffset)/(swp.cy+xButtonDelta);
                  numB=((ptl.x-numB*swp.cy) > swp.cy/2 ? numB+1: numB);

                  /* Do a link */
                  lp->lpAddButton(wpObject, numB);
                  handleDragLeave(hwnd, mp1, mp2);
                }
              }
              DrgDeleteDraginfoStrHandles(pDragInfo);
              DrgFreeDraginfo(pDragInfo);
            }
          }
          handleDragLeave(hwnd, mp1, mp2);
        }
        CATCH(LP_FRAMEDROP)
          {
          } END_CATCH;
          
          break;
      }
    case DM_DRAGLEAVE:
      return handleDragLeave(hwnd, mp1, mp2);
      break;
    case WM_COMMAND:
      if(SHORT1FROMMP(mp2)==CMDSRC_PUSHBUTTON) {
        /* It's a push button */
        lpo=(LPObject*)WinQueryWindowULong(WinWindowFromID(hwnd,SHORT1FROMMP(mp1)),QWL_USER);
        if(lpo) {
          if(somIsObj(lpo->wpObject))
            lpo->wpObject->wpViewObject(NULLHANDLE, OPEN_DEFAULT,0);
        }
      }
      return (MRESULT)FALSE;
      /***********************************************/
      /* Stuff for fly over help                     */ 
    case WM_MOUSEMOVE:
      launchPad * lp;

      lp=(launchPad*)WinQueryWindowULong(hwnd,QWL_USER);
      if(lp) {
        if(lp->lpQueryNumObjects()!=0) {
          break;
        }
      }
      
#if 0
      tempID=WinQueryWindowUShort(hwnd,QWS_ID);/*  get the id of the window under the pointer  */  			
      if(id!=tempID) {	// New Button?	
        WinStartTimer(WinQueryAnchorBlock(hwnd),hwnd,tempID,(ULONG)iTBFlyOverDelay); // New timer for delay
        id=tempID;  // Save ID 
      }
      else {
        if(!hwndBubbleWindow)
          WinStartTimer(WinQueryAnchorBlock(hwnd),hwnd,tempID,(ULONG)iTBFlyOverDelay); // New timer for delay	
      }
#endif
      if(!hwndBubbleWindow)
        WinStartTimer(WinQueryAnchorBlock(hwnd), hwnd, 2,(ULONG)iTBFlyOverDelay); // New timer for delay	

      break;
    case WM_DESTROY:
      WinStopTimer(WinQueryAnchorBlock(hwnd),hwnd,1);//Stop timer if running
      if(hwndBubbleWindow)
        WinDestroyWindow(hwndBubbleWindow);/*  close the bubblewindow  */
      hwndBubbleWindow=0;
      /* Stop delay timer if running */
      WinStopTimer(WinQueryAnchorBlock(hwnd),hwnd, 2);			
      break;

    case WM_NEWBUBBLE:
      ULONG bubbleEnabled;
      HWND hwndStore;
      POINTL ptl;
      RECTL  rclWork;
      LONG  ulWinTextLen;
      POINTL aptlPoints[TXTBOX_COUNT];
      LONG   deltaX,deltaY;
      HPS  hps;
      RECTL   rcl;
  
      /*  we have to build a new information window  */
      if(hwndBubbleWindow){// if(){...} new in V1.00a 
        WinDestroyWindow(hwndBubbleWindow);/*  close the bubblewindow  */
        hwndBubbleWindow=NULL;
      }
      // Query the pointer position
      WinQueryPointerPos(HWND_DESKTOP,&ptl);
      WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1);
      WinQueryWindowRect(hwnd,&rclWork);				
      if(!hwndBubbleWindow 
         && WinPtInRect(WinQueryAnchorBlock(hwnd),&rclWork,&ptl)
         && bTBFlyOverEnabled) {
        
        static HWND hwndBubbleClient;
        ULONG style=FCF_BORDER|FCF_NOBYTEALIGN;
        char winText[255];
        
        /* Get window text for size calculating */
            lp=(launchPad*)WinQueryWindowULong(hwnd,QWL_USER);
        if(lp) {
          strncpy(winText, lp->lpQueryFlyOverText(), sizeof(winText));
          winText[sizeof(winText)-1]=0;
        }

        ulWinTextLen=(LONG)strlen(winText); // Query text length
        
        /* Delete 'Returns' in object title */
        char *pBuchst;
        char *pRest;
        pRest=winText;
        while((pBuchst=strchr(pRest,13))!=NULL) {
          *pBuchst=' ';
          pBuchst++;
          if(*pBuchst==10)
            *pBuchst=' ';
          pRest=pBuchst;
        }
        
        /* Create help window */
        hwndBubbleWindow=WinCreateStdWindow(HWND_DESKTOP,
                                            0,
                                            &style,
                                            WC_STATIC,
                                            "",
                                            SS_TEXT|DT_CENTER|DT_VCENTER,
                                            NULLHANDLE,
                                            400,
                                            &hwndBubbleClient);

        hwndShadow=WinCreateWindow(HWND_DESKTOP,
                                   WC_STATIC,
                                   "",
                                   SS_TEXT|DT_CENTER|DT_VCENTER,
                                   0, 0,
                                   0, 0,
                                   hwndBubbleWindow,
                                   hwndBubbleWindow,
                                   401,
                                   NULLHANDLE,
                                   NULLHANDLE);
        oldProc=WinSubclassWindow(hwndShadow, shadowProc);

        // Set the font for the help
        WinSetPresParam(hwndBubbleClient,PP_FONTNAMESIZE,
                        sizeof(chrTBFlyFontName),
                        chrTBFlyFontName);
        /* Calculate text size in pixel */
        hps=WinBeginPaint(hwndBubbleClient,(HPS)NULL,(PRECTL)NULL);
        GpiQueryTextBox(hps,ulWinTextLen,winText,TXTBOX_COUNT,aptlPoints);
        WinEndPaint(hps);
        
        /* Set colors */
        WinSetPresParam(hwndBubbleClient,
                        PP_BACKGROUNDCOLOR,sizeof(rgbTBFlyBackground) ,
                        &rgbTBFlyBackground );
        WinSetPresParam(hwndBubbleClient,
                        PP_FOREGROUNDCOLOR,sizeof(rgbTBFlyForeground) ,
                        &rgbTBFlyForeground );
        
        /* Calculate bubble positon and show bubble */
        WinQueryPointerPos(HWND_DESKTOP,&ptl);//Query pointer position in the desktop window
        WinQueryWindowRect(HWND_DESKTOP,&rcl);//Query desktop size
        aptlPoints[TXTBOX_BOTTOMRIGHT].x-aptlPoints[TXTBOX_BOTTOMLEFT].x+7+xVal+ptl.x 
          > rcl.xRight 
          ? deltaX=-aptlPoints[TXTBOX_BOTTOMRIGHT].x-aptlPoints[TXTBOX_BOTTOMLEFT].x-xVal-xVal-7 
	      : deltaX=0 ;
        
        aptlPoints[TXTBOX_TOPLEFT].y-aptlPoints[TXTBOX_BOTTOMLEFT].y+2+yVal+ptl.y 
          > rcl.yTop 
          ? deltaY=-aptlPoints[TXTBOX_TOPLEFT].y-aptlPoints[TXTBOX_BOTTOMLEFT].y-2*yVal-7
	      : deltaY=0 ;		
        WinSetWindowPos(hwndBubbleWindow,
                        HWND_TOP,
                        ptl.x+xVal+deltaX,ptl.y+yVal+deltaY,  
                        aptlPoints[TXTBOX_BOTTOMRIGHT].x-aptlPoints[TXTBOX_BOTTOMLEFT].x+8,
                        aptlPoints[TXTBOX_TOPLEFT].y-aptlPoints[TXTBOX_BOTTOMLEFT].y+2,
                        SWP_ZORDER|SWP_SIZE|SWP_MOVE|SWP_SHOW);

        WinSetWindowPos(hwndShadow,
                        hwndBubbleWindow,
                        ptl.x+xVal+deltaX+5
                        ,ptl.y+yVal+deltaY-5,  
                        aptlPoints[TXTBOX_BOTTOMRIGHT].x-aptlPoints[TXTBOX_BOTTOMLEFT].x+8,
                        aptlPoints[TXTBOX_TOPLEFT].y-aptlPoints[TXTBOX_BOTTOMLEFT].y+2,
                        SWP_ZORDER|SWP_SIZE|SWP_MOVE|SWP_SHOW);
        
        /* Set bubble text */
        WinSetWindowText(hwndBubbleClient,winText);
        WinStartTimer(WinQueryAnchorBlock(hwnd),hwnd,1,35); 
      } // end if(!hwndBubbleWindow)
      break;
    case WM_TIMER:
      switch (SHORT1FROMMP(mp1))
        {
        case 1: //Intervall timer
          {
            POINTL ptl;
            RECTL  rclWork;

            /* Test pointer position */
            WinQueryPointerPos(HWND_DESKTOP, &ptl);
            WinMapWindowPoints(HWND_DESKTOP, hwnd,&ptl, 1);
            WinQueryWindowRect(hwnd, &rclWork);
            if(!WinPtInRect(WinQueryAnchorBlock(hwnd),&rclWork,&ptl))
              {	// Window has changed				 
                WinStopTimer(WinQueryAnchorBlock(hwnd), hwnd, 1);  // stop the running timer
                if(hwndBubbleWindow) 
                  WinDestroyWindow(hwndBubbleWindow);/*  close the bubblewindow  */
                hwndBubbleWindow=0;
                id=0;
              }			 			
          break;
          }
        case 2:// delay over
          {//our own timer.
            POINTL ptl;
            RECTL  rclWork;

            WinStopTimer(WinQueryAnchorBlock(hwnd), hwnd, 2);//Stop the delay timer
            /* Check the pointer position */
            WinQueryPointerPos(HWND_DESKTOP,&ptl);
            WinMapWindowPoints(HWND_DESKTOP,hwnd,&ptl,1);
            WinQueryWindowRect(hwnd,&rclWork);
            if(WinPtInRect(WinQueryAnchorBlock(hwnd),&rclWork,&ptl))
              WinPostMsg(hwnd,WM_NEWBUBBLE,NULL,NULL);//Request a help window
            return (MRESULT)FALSE;
          }
        default:
          break;
        }
      break;
    default:
      break;    
    }
  return pfnwpOldLPProc(hwnd, msg, mp1, mp2);
}
static MRESULT handleDragOver(HWND hwnd, MPARAM mp1, MPARAM mp2)
{
  MRESULT mResult;
  ULONG ulNumberOfObjects;
  PDRAGINFO pDragInfo;
  HPS hps;
  RECTL rectl;
  SWP swp;

  mResult = MRFROM2SHORT( DOR_NODROPOP, DO_LINK);
  
  /* Get access to the dragInfo */
  pDragInfo=(PDRAGINFO)mp1;
  DrgAccessDraginfo(pDragInfo);
  /* Get number of items */
  ulNumberOfObjects = DrgQueryDragitemCount( pDragInfo);

  if(ulNumberOfObjects>1) {
    /* Free the draginfo */
    DrgFreeDraginfo(pDragInfo);
    return MRFROM2SHORT( DOR_NODROPOP, DO_LINK);
  }

  switch(pDragInfo->usOperation)
    {
    case DO_DEFAULT:
    case DO_LINK:
      if(!bDrawn) {
        POINTL ptl;
        launchPad * lp;
        
        ptl.x=SHORT1FROMMP(mp2);
        ptl.y=SHORT2FROMMP(mp2);
        /* Pos in window coords */
        WinMapWindowPoints(HWND_DESKTOP, hwnd, &ptl, 1);

        hps=DrgGetPS(hwnd);
        WinQueryWindowPos(hwnd,&swp);

        rectl.xLeft=swp.cx;//-swp.cy;

        lp=(launchPad*)WinQueryWindowULong(hwnd,QWL_USER);
        if(lp) {
          if(lp->lpQueryNumObjects()==0) {
            rectl.xLeft=0;
          }
        }
        
        rectl.yTop=swp.cy-1;    
        rectl.yBottom=1;
        if(ptl.x<rectl.xLeft) {
          int numB;

          numB=(ptl.x-xButtonOffset)/(swp.cy+xButtonDelta);
          rectl.xLeft=((ptl.x-numB*swp.cy) > swp.cy/2 ? numB+1: numB);
          rectl.xLeft*=(swp.cy+xButtonDelta);
          rectl.xLeft-=(xButtonDelta)-xButtonOffset+xButtonDelta;
          rectl.xRight=rectl.xLeft+(xButtonDelta*2);
        }
        else {
          rectl.xRight=swp.cx-1;
        }
        rclDrawn=rectl;
        WinDrawBorder(hps,&rectl, 2, 2, 0, 0, DB_STANDARD|DB_PATINVERT);  
        bDrawn=TRUE; 
        
        DrgReleasePS(hps);
      }
      mResult = MRFROM2SHORT( DOR_DROP, DO_LINK);
      break;
    default:
      break;
    }

  /* Free the draginfo */
  DrgFreeDraginfo(pDragInfo);

  return mResult;
}
BOOL launchPad::lpFillPad()
{
  HOBJECT hObject;
  char chrSetup[CCHMAXPATH];
  WPFolder* wpFolder;
  LPObject *lpoTemp;

  SWP swp;
  HWND hwndTemp;
  BTNCDATA btCtrl;
  WNDPARAMS wndParams;
  ULONG ulStyle;
  int a;
  LONG lXSize;
  HENUM hEnum;
  HWND hwndClient;
  LONG lCxSave;

  /* Remove Buttons from pad */
  lpClearPad();

  /* Resize the pad for all objects */
  if(!WinQueryWindowPos(hwndLaunchPad, &swp))
    return FALSE;


  lCxSave=swp.cx;

  lXSize=(ulNumObjects == 0 ? swp.cy : (ulNumObjects) * (swp.cy+xButtonDelta) +2*xButtonOffset);
  lpSetLaunchPadPos( NULLHANDLE,0,0, lXSize , swp.cy, SWP_SIZE);

  /* Move all controls on the right */
  /* Move all client windows so they keep their distance to the left border */
  hEnum=WinBeginEnumWindows(WinQueryWindow(hwndLaunchPad,QW_PARENT));
  while((hwndClient=WinGetNextWindow(hEnum))!=NULLHANDLE) {
    SWP swpClient;

    WinQueryWindowPos(hwndClient,&swpClient);
    if(swpClient.x > swp.x)
      WinSetWindowPos(hwndClient, NULLHANDLE, swpClient.x+(lXSize-lCxSave), swpClient.y, 0, 0, SWP_MOVE);
  }/* while */
  WinEndEnumWindows(hEnum);

  lpoTemp=lpoObjectList;
  for(a=ulNumObjects;a>0 && lpoTemp; a--)
    {
      /* Create Buttons */ 
      if((hwndTemp=WinCreateWindow(hwndLaunchPad, WC_BUTTON, lpoTemp->chrName, WS_VISIBLE, xButtonOffset+(a-1)*(swp.cy+xButtonDelta), 1, swp.cy-2, swp.cy-2,
                                   hwndLaunchPad, HWND_TOP, a*100,
                                   NULLHANDLE, NULLHANDLE))!=NULLHANDLE)
        {
          /* Change Style to mini icon */
          ulStyle=WinQueryWindowULong(hwndTemp,QWL_STYLE);
          ulStyle|=(BS_MINIICON);
          ulStyle&=~BS_TEXT;
          if(WinSetWindowULong(hwndTemp,QWL_STYLE,ulStyle)) {
            memset(&btCtrl,0,sizeof(btCtrl));
            btCtrl.cb=sizeof(btCtrl);
            btCtrl.hImage=lpoTemp->hPtr;
            memset(&wndParams,0,sizeof(wndParams));
            wndParams.fsStatus=WPM_CTLDATA;
            wndParams.cbCtlData=btCtrl.cb;
            wndParams.pCtlData=&btCtrl;
            WinSendMsg(hwndTemp,WM_SETWINDOWPARAMS,
                       MPFROMP(&wndParams),0);
            /* Subclass button for flyover help */
            oldButtonProc2=WinSubclassWindow(hwndTemp, newLaunchPadButtonProc);
            /* Set the class pointer into the window words */
            WinSetWindowULong(hwndTemp,QWL_USER,(ULONG)lpoTemp);//Save object ptr.
          }
        }
      lpoTemp=lpoTemp->lpoNext;
    }
  return TRUE;  
}
/*---------------------------------------------------
 * Process dialog messages
 *--------------------------------------------------*/
MRESULT _System KLSetupHKeys::dlg_proc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
{
  switch ( msg )
  {
    case WM_INITDLG:
    {
      KLSetupHKeys* instance = (KLSetupHKeys*)mp2;

      SET_TEXT( hwnd, ID_KEY_TEXT, MSG_KEYPROMPT );
      KLApp::do_warpsans( hwnd, ID_KEY_TEXT );
      WinSetWindowULong( hwnd, QWL_USER, (ULONG)instance );
      instance->hk_exclude = hkey_exclude( hwnd );
      break;
    }

    case WM_DESTROY:
    {
      KLSetupHKeys* instance = (KLSetupHKeys*)WinQueryWindowULong( hwnd, QWL_USER );

      hkey_exclude( instance->hk_exclude );
      instance->hk_exclude = NULLHANDLE;
    }

    case WM_COMMAND:
      if( SHORT1FROMMP(mp1) == DID_CANCEL )
        WinDismissDlg( hwnd, FALSE );

      return MRFROMLONG(TRUE);

    case WM_CLOSE:
      WinDismissDlg( hwnd, FALSE );
      return MRFROMLONG(TRUE);

    case WM_CHAR:
      if( !( CHARMSG(&msg)->fs & KC_KEYUP )
          && CHARMSG(&msg)->vkey != VK_NUMLOCK
          && CHARMSG(&msg)->vkey != VK_ESC
          && CHARMSG(&msg)->vkey != VK_PRINTSCRN
          && CHARMSG(&msg)->vkey != VK_PAUSE
          && CHARMSG(&msg)->vkey != VK_SHIFT
          && CHARMSG(&msg)->vkey != VK_CTRL
          && CHARMSG(&msg)->vkey != VK_ALT
          && CHARMSG(&msg)->vkey != VK_CAPSLOCK
          && CHARMSG(&msg)->vkey != VK_SCRLLOCK
          && CHARMSG(&msg)->scancode
        )
      {
        KLSetupHKeys* instance = (KLSetupHKeys*)WinQueryWindowULong( hwnd, QWL_USER );

        if( instance )
        {
          instance->hk_state    = 0;
          instance->hk_scancode = CHARMSG(&msg)->scancode;

          if( CHARMSG(&msg)->fs & KC_CTRL  ) instance->hk_state |= KLHotkey::control;
          if( CHARMSG(&msg)->fs & KC_ALT   ) instance->hk_state |= KLHotkey::alt;
          if( CHARMSG(&msg)->fs & KC_SHIFT ) instance->hk_state |= KLHotkey::shift;

          instance->hk_assigned->assign( instance->hk_scancode, instance->hk_state );
        }

        WinDismissDlg( hwnd, TRUE );
        return MRFROMLONG(TRUE);
      }
      break;
  }

  return WinDefDlgProc( hwnd, msg, mp1, mp2 );
}
Exemple #28
0
static MRESULT EXPENTRY LinkLabelProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
{
    linkData *ld = (linkData *)WinQueryWindowULong( hwnd, QWL_USER );
    switch ( msg )
    {
    case WM_PAINT:
    {
        FONTMETRICS fm;
        FATTRS fat;
        HPS hps;
        ULONG style;
        char *text = (char *)malloc( MAXTEXTLEN );
        WinQueryWindowText( hwnd, MAXTEXTLEN, text);
        hps = WinBeginPaint( hwnd , 0L , 0L );
        GpiQueryFontMetrics( hps , sizeof( FONTMETRICS ) , &fm );
        memset( &fat , 0 , sizeof( fat ) );
        fat.usRecordLength = sizeof( FATTRS );
        fat.lMatch = fm.lMatch;
        fat.fsSelection = FATTR_SEL_UNDERSCORE;
        strcpy( fat.szFacename , fm.szFacename );
        GpiDeleteSetId( hps , 1 );
        GpiCreateLogFont( hps , 0 , 1 , &fat );
        GpiSetCharSet( hps , 1 );
        WinQueryWindowRect( hwnd , &ld->textRect );
        style = WinQueryWindowULong( hwnd, QWL_STYLE );
        style &= DT_LEFT|DT_CENTER|DT_RIGHT|DT_TOP|DT_VCENTER|DT_BOTTOM;
        WinDrawText( hps, -1, text, &ld->textRect,
                     CLR_BLUE, SYSCLR_DIALOGBACKGROUND,
                     style | DT_ERASERECT | DT_UNDERSCORE );
        WinDrawText( hps, -1, text, &ld->textRect,
                     CLR_BLUE, SYSCLR_DIALOGBACKGROUND,
                     style | DT_QUERYEXTENT | DT_UNDERSCORE );
        WinEndPaint( hps );
        free( text );
    }
    return (MRESULT)FALSE;

    case WM_MOUSEMOVE:
    {
        if ( handPtr != NULLHANDLE )
        {
            POINTL ptl;
            ptl.x = SHORT1FROMMP( mp1 );
            ptl.y = SHORT2FROMMP( mp1 );
            if ( WinPtInRect( WinQueryAnchorBlock( hwnd ), &ld->textRect, &ptl) )
            {
                WinSetPointer( HWND_DESKTOP, handPtr );
                return (MRESULT)FALSE;
            }
        }
    }
    break;

    case WM_BUTTON1CLICK:
    {
        PROGDETAILS pd;
        char *text;
        POINTL ptl;

        if ( strcmp( browserExe, "" ) == 0 )  break;

        ptl.x = SHORT1FROMMP( mp1 );
        ptl.y = SHORT2FROMMP( mp1 );
        if ( !WinPtInRect( WinQueryAnchorBlock( hwnd ), &ld->textRect, &ptl) )
            break;

        if ( ld->url == NULL )
        {
            text = (char *)malloc( MAXTEXTLEN );
            WinQueryWindowText( hwnd, MAXTEXTLEN, text);
        }
        else  text = strdup( ld->url );

        pd.Length          = sizeof( PROGDETAILS );
        pd.progt.progc     = PROG_DEFAULT;
        pd.progt.fbVisible = SHE_VISIBLE;
        pd.pszTitle        = NULL;
        pd.pszExecutable   = browserExe;
        pd.pszParameters   = NULL;
        pd.pszStartupDir   = ( browserDir[0] == 0 ) ? NULL : browserDir;
        pd.pszIcon         = NULL;
        pd.pszEnvironment  = NULL;
        pd.swpInitial.fl   = SWP_ACTIVATE;
        pd.swpInitial.cy   = 0;
        pd.swpInitial.cx   = 0;
        pd.swpInitial.y    = 0;
        pd.swpInitial.x    = 0;
        pd.swpInitial.hwndInsertBehind = HWND_TOP;
        pd.swpInitial.hwnd             = NULLHANDLE;
        pd.swpInitial.ulReserved1      = 0;
        pd.swpInitial.ulReserved2      = 0;
        WinStartApp( NULLHANDLE , &pd , text , NULL , 0 );
        free( text );
    }
    break;

    case WM_DESTROY:
        ld->labelProc( hwnd, msg, mp1, mp2 );
        if ( ld->url != NULL )  free( ld->url );
        free( ld );
        return (MRESULT)FALSE;
    }
    return ld->labelProc( hwnd, msg, mp1, mp2 );
}
MRESULT EXPENTRY AreaSettingsProc(HWND parent, ULONG message, MPARAM mp1, MPARAM mp2)
{
   extern WINDOWPOSITIONS windowpositions;
   extern HWND hwndhelp;
   char pchTemp[200];
   char pchTitle[250];
   HWND notebook=NULLHANDLE;
   MRESULT resultbuf=0;
   int rc;

   switch(message)
   {
      case WM_INITDLG:
         notebook=WinWindowFromID(parent,IDD_AREASETTINGS+1);
         AddCancelItem(parent);
         InsertSettingsPages(notebook, (PVOID) mp2);
         WinSetWindowULong(parent, QWL_USER, ((PAREAPAR)mp2)->bMultiple);
         RestoreWinPos(parent, &windowpositions.areasetuppos, TRUE, TRUE);
         WinAssociateHelpInstance(hwndhelp, parent);
         break;

      case WM_ADJUSTFRAMEPOS:
         SizeToClient(anchor, (PSWP) mp1, parent, IDD_AREASETTINGS+1);
         break;

      case WM_QUERYTRACKINFO:
         /* Default-Werte aus Original-Prozedur holen */
         resultbuf=WinDefDlgProc(parent,message,mp1,mp2);

         /* Minimale Fenstergroesse einstellen */
         ((PTRACKINFO)mp2)->ptlMinTrackSize.x=255;
         ((PTRACKINFO)mp2)->ptlMinTrackSize.y=190;

         return resultbuf;

      case WM_CLOSE:
         if (!WinQueryWindowULong(parent, QWL_USER))
         {
            /* Message an alle Windows schicken */
            rc = SendToAllPages(WinWindowFromID(parent, IDD_AREASETTINGS+1), APM_REQCLOSE, NULL, NULL);
            if (rc == 1)
               return (MRESULT) FALSE;
            if (rc == 2)
            {
               SendToAllPages(WinWindowFromID(parent, IDD_AREASETTINGS+1), APM_CANCEL, NULL, NULL);
               WinDismissDlg(parent, DID_CANCEL);
            }
            else
               WinDismissDlg(parent, DID_OK);
         }
         else
            WinDismissDlg(parent, DID_OK);
         QueryWinPos(parent, &(windowpositions.areasetuppos));
         WinAssociateHelpInstance(hwndhelp, WinQueryWindow(parent, QW_OWNER));
         return (MRESULT) FALSE;

      case APM_SETTITLE:
         if (!((PCHAR) mp1)[0])
            LoadString(IDST_AP_EMPTYTITLE, 250, pchTitle);
         else
         {
            LoadString(IDST_AP_TITLE, 200, pchTemp);
            sprintf(pchTitle, pchTemp, (PCHAR) mp1);
         }
         WinSetWindowText(parent, pchTitle);
         break;

      case WM_COMMAND:
         if (SHORT1FROMMP(mp1) == IDM_AS_CANCEL)
         {
            SendToAllPages(WinWindowFromID(parent, IDD_AREASETTINGS+1), APM_CANCEL, NULL, NULL);
            WinDismissDlg(parent, DID_CANCEL);
         }
         return (MRESULT) FALSE;

      default:
         break;
   }
   return WinDefDlgProc(parent,message,mp1,mp2);
}
//==============================================================================
// WndProc - this function vectors WndProc (window processing) message handling
//           requests to the correct message handler
//==============================================================================
MRESULT EXPENTRY _export WndProc(HWND hWnd, ULONG iMessage, MPARAM mParam1, MPARAM mParam2)
{
    Window *pWindow = (Window *)WinQueryWindowULong(hWnd,0);
    if  (pWindow == 0) {
        if (iMessage == WM_CREATE) {
            pWindow = Main::tempthis;
            WinSetWindowULong(hWnd,0,(ULONG)pWindow);
            return pWindow->WndProc(hWnd,iMessage,mParam1,mParam2);
            }
        else return WinDefWindowProc(hWnd,iMessage,mParam1,mParam2);
        }
    else return pWindow->WndProc(hWnd,iMessage,mParam1,mParam2);
}