Пример #1
0
void OnDropFile (DWORD wParam)
   {
   TCHAR FileName [FilePathLen + 1] ;
   LPTSTR         pFileNameStart ;
   HANDLE         hFindFile ;
   WIN32_FIND_DATA FindFileInfo ;
   int            NameOffset ;
   int            NumOfFiles = 0 ;

   NumOfFiles = DragQueryFile ((HDROP) wParam, 0xffffffff, NULL, 0) ;
   if (NumOfFiles > 0)
      {
      // we only open the first file for now
      DragQueryFile((HDROP) wParam, 0, FileName, FilePathLen) ;

      pFileNameStart = ExtractFileName (FileName) ;
      NameOffset = pFileNameStart - FileName ;

      // convert short filename to long NTFS filename if necessary
      hFindFile = FindFirstFile (FileName, &FindFileInfo) ;
      if (hFindFile && hFindFile != INVALID_HANDLE_VALUE)
         {
         // append the file name back to the path name
         lstrcpy (&FileName[NameOffset], FindFileInfo.cFileName) ;
         FindClose (hFindFile) ;
         }

      FileOpen (hWndMain, (int)0, (LPTSTR)FileName) ;
      PrepareMenu (GetMenu (hWndMain));
      }

   DragFinish ((HDROP) wParam) ;
   }
Пример #2
0
LRESULT CFloatingWindow::OnContextMenu(WORD wNotifyCode, WORD wID, HWND hWndCtl)
{
	if (!IsWindowEnabled())
		return 0;

	CMenu TrayMenu;
	TrayMenu.CreatePopupMenu();

	if (!m_bIsUploading)
	{
		// Inserting menu items
		int i = 0;
		MyInsertMenu(TrayMenu, i++, IDM_UPLOADFILES, TR("Загрузить файлы") + CString(_T("...")));
		MyInsertMenu(TrayMenu, i++, IDM_ADDFOLDERS, TR("Загрузить папку") + CString(_T("...")));
		MyInsertMenu(TrayMenu, i++, 0, 0);
		bool IsClipboard = false;

		if (OpenClipboard())
		{
			IsClipboard = IsClipboardFormatAvailable(CF_BITMAP) != 0;
			CloseClipboard();
		}
		if (IsClipboard)
		{
			MyInsertMenu(TrayMenu, i++, IDM_PASTEFROMCLIPBOARD, TR("Вставить из буфера"));
			MyInsertMenu(TrayMenu, i++, 0, 0);
		}
		MyInsertMenu(TrayMenu, i++, IDM_IMPORTVIDEO, TR("Импорт видео"));
		MyInsertMenu(TrayMenu, i++, 0, 0);
		MyInsertMenu(TrayMenu, i++, IDM_SCREENSHOTDLG, TR("Скриншот") + CString(_T("...")));
		MyInsertMenu(TrayMenu, i++, IDM_REGIONSCREENSHOT, TR("Снимок выделенной области"));
		MyInsertMenu(TrayMenu, i++, IDM_FULLSCREENSHOT, TR("Снимок всего экрана"));
		MyInsertMenu(TrayMenu, i++, IDM_WINDOWSCREENSHOT, TR("Снимок активного окна"));
		MyInsertMenu(TrayMenu, i++, IDM_WINDOWHANDLESCREENSHOT, TR("Снимок выбранного элемента"));
		MyInsertMenu(TrayMenu, i++, IDM_FREEFORMSCREENSHOT, TR("Снимок произвольной формы"));

		CMenu SubMenu;
		SubMenu.CreatePopupMenu();
		SubMenu.InsertMenu(
			0, MFT_STRING | MFT_RADIOCHECK |
			(Settings.TrayIconSettings.TrayScreenshotAction == TRAY_SCREENSHOT_OPENINEDITOR ? MFS_CHECKED : 0),
			IDM_SCREENTSHOTACTION_OPENINEDITOR, TR("Открыть в редакторе"));
		SubMenu.InsertMenu(
		   0, MFT_STRING | MFT_RADIOCHECK |
		   (Settings.TrayIconSettings.TrayScreenshotAction == TRAY_SCREENSHOT_UPLOAD ? MFS_CHECKED : 0),
		   IDM_SCREENTSHOTACTION_UPLOAD, TR("Загрузить на сервер"));
		SubMenu.InsertMenu(
		   1, MFT_STRING | MFT_RADIOCHECK |
		   (Settings.TrayIconSettings.TrayScreenshotAction == TRAY_SCREENSHOT_CLIPBOARD ? MFS_CHECKED : 0),
		   IDM_SCREENTSHOTACTION_TOCLIPBOARD, TR("Копировать в буфер обмена"));
		SubMenu.InsertMenu(
		   2, MFT_STRING | MFT_RADIOCHECK |
		   (Settings.TrayIconSettings.TrayScreenshotAction == TRAY_SCREENSHOT_SHOWWIZARD ? MFS_CHECKED : 0),
		   IDM_SCREENTSHOTACTION_SHOWWIZARD, TR("Открыть в окне мастера"));
		SubMenu.InsertMenu(
		   3, MFT_STRING | MFT_RADIOCHECK |
		   (Settings.TrayIconSettings.TrayScreenshotAction == TRAY_SCREENSHOT_ADDTOWIZARD ? MFS_CHECKED : 0),
		   IDM_SCREENTSHOTACTION_ADDTOWIZARD, TR("Добавить в мастер"));

		MENUITEMINFO mi;
		mi.cbSize = sizeof(mi);
		mi.fMask = MIIM_TYPE | MIIM_ID | MIIM_SUBMENU;
		mi.fType = MFT_STRING;
		mi.hSubMenu = SubMenu;
		mi.wID = 10000;
		mi.dwTypeData  = TR("Действие со снимком");
		TrayMenu.InsertMenuItem(i++, true, &mi);

		SubMenu.Detach();
		MyInsertMenu(TrayMenu, i++, 0, 0);
		MyInsertMenu(TrayMenu, i++, IDM_SHORTENURL, TR("Сократить ссылку"));
		MyInsertMenu(TrayMenu, i++, 0, 0);
		MyInsertMenu(TrayMenu, i++, IDM_SHOWAPPWINDOW, TR("Показать окно программы"));
		MyInsertMenu(TrayMenu, i++, 0, 0);
		MyInsertMenu(TrayMenu, i++, IDM_SETTINGS, TR("Настройки") + CString(_T("...")));
		MyInsertMenu(TrayMenu, i++, 0, 0);
		MyInsertMenu(TrayMenu, i++, IDM_EXIT, TR("Выход"));
		if (Settings.Hotkeys[Settings.TrayIconSettings.LeftDoubleClickCommand].commandId)
		{
			SetMenuDefaultItem(TrayMenu, Settings.Hotkeys[Settings.TrayIconSettings.LeftDoubleClickCommand].commandId,
			                   FALSE);
		}
	}
	else
		MyInsertMenu(TrayMenu, 0, IDM_STOPUPLOAD, TR("Прервать загрузку"));
	m_hTrayIconMenu = TrayMenu;
	CMenuHandle oPopup(m_hTrayIconMenu);
	PrepareMenu(oPopup);
	CPoint pos;
	GetCursorPos(&pos);
	SetForegroundWindow(m_hWnd);
	oPopup.TrackPopupMenu(TPM_LEFTALIGN, pos.x, pos.y, m_hWnd);
	// BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly"
	PostMessage(WM_NULL);
	return 0;
}
Пример #3
0
LRESULT APIENTRY MainWndProc (HWND hWnd, 
                              UINT message, 
                              DWORD wParam, 
                              LONG lParam)
   {
   LONG     lRetCode = 0L ;
   BOOL     bCallDefWinProc = FALSE ;

   switch (LOWORD (message))
      {  // switch
      case WM_LBUTTONDBLCLK:
         ShowPerfmonMenu (!Options.bMenubar) ;
         if (Options.bMenubar)
            {
            PrepareMenu (GetMenu (hWnd)) ;
            }
         break ;

	   case WM_COMMAND:
	      if (PerfmonCommand (hWnd,wParam,lParam))
	         return(0);
         else
            bCallDefWinProc = TRUE ;
         break;

      case WM_MENUSELECT:
         MenuBarHit (wParam) ;
         break ;

      case WM_NCHITTEST:
        /* if we have no title/menu bar, clicking and dragging the client
         * area moves the window. To do this, return HTCAPTION.
         * Note dragging not allowed if window maximized, or if caption
         * bar is present.
         */
        wParam = DefWindowProc(hWnd, message, wParam, lParam);
        if (!Options.bMenubar && 
            (wParam == HTCLIENT) &&
            !IsZoomed (hWndMain))
           return HTCAPTION ;
        else
           return wParam ;
        break ;

      
      case WM_SHOWWINDOW:
         PrepareMenu (GetMenu (hWnd)) ;
         break ;

      case WM_SIZE:
         OnSize (hWnd, LOWORD (lParam), HIWORD (lParam)) ;
         break ;

      case WM_GETMINMAXINFO:
         {
         MINMAXINFO   *pMinMax ;

         pMinMax = (MINMAXINFO *) lParam ;
         pMinMax->ptMinTrackSize.x = MinimumSize ;
         pMinMax->ptMinTrackSize.y = MinimumSize ;
         }
         break ;

      case WM_NOTIFY:
         {
            LPTOOLTIPTEXT lpTTT = (LPTOOLTIPTEXT)lParam;

            if (lpTTT->hdr.code == TTN_NEEDTEXT) {
                LoadString (hInstance, lpTTT->hdr.idFrom, lpTTT->szText,
                    sizeof(lpTTT->szText)/sizeof(TCHAR));
                return TRUE;
            } else {
                bCallDefWinProc = FALSE ;
                break;
            }
         }

      case WM_F1DOWN:
         if (dwCurrentDlgID)
            {
            CallWinHelp (dwCurrentDlgID) ;
            }
         else if (dwCurrentMenuID)
            {
            CallWinHelp (dwCurrentMenuID) ;
            dwCurrentMenuID = 0 ;
            }
         break ;

      case WM_CREATE:
         OnCreate (hWnd) ;
         ViewChart (hWnd) ;
         PrepareMenu (GetMenu (hWnd)) ;
         break ;

      case WM_DESTROY:
         WinHelp (hWndMain, pszHelpFile, HELP_QUIT, 0) ;
         PostQuitMessage (0);
         break ;

      case WM_QUERYENDSESSION:
         // please shut it down
         return (1) ;
         break ;

      case WM_ENDSESSION:
         if (wParam == TRUE)
            {
            // close any log file before closing down
            PerfmonClose (hWnd) ;
            return (1) ;
            }
         else
            bCallDefWinProc = TRUE ;
         break ;

      case WM_CLOSE:
         PerfmonClose (hWnd) ;
         break ;

      case WM_ACTIVATE:
         {
         int   fActivate = LOWORD (wParam) ;

         bPerfmonIconic = (BOOL) HIWORD (wParam) ;
         if (bPerfmonIconic == 0 && fActivate != WA_INACTIVE)
            {
            // set focus on the Legend window
            if (iPerfmonView == IDM_VIEWCHART)
               {
               SetFocus (hWndGraphLegend) ;
               }
            else if (iPerfmonView == IDM_VIEWALERT)
               {
               SetFocus (hWndAlertLegend) ;
               }
            else if (iPerfmonView == IDM_VIEWLOG)
               {
               SetFocus (hWndLogEntries) ;
               }
            else if (iPerfmonView == IDM_VIEWREPORT)
               {
               SetFocus (hWndReport) ;
               }
            }
         }
         break ;

      case WM_SYSCOLORCHANGE:
         DeletePerfmonSystemObjects () ;
         CreatePerfmonSystemObjects () ;
         WindowInvalidate (PerfmonViewWindow()) ;
         break ;

      case WM_WININICHANGE:
         if (!lParam || strsamei((LPTSTR)lParam, szInternational))
            {
            GetDateTimeFormats () ;
            }
         break ;

      case WM_DROPFILES:
         OnDropFile (wParam) ;
         return (0) ;
         break ;

      default:
         bCallDefWinProc = TRUE ;
         break;

      }  // switch

   if (bCallDefWinProc)
      {
      lRetCode = DefWindowProc (hWnd, message, wParam, lParam) ;
      }
   return (lRetCode);
   }  // MainWndProc