Beispiel #1
0
//////////////////
// Virtual CSubclassWnd window proc. All messages come here before frame
// window. Isn't it cool? Just like in the old days!
//
LRESULT CCoolMenuManager::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
{
	switch(msg) {
	case WM_SYSCOLORCHANGE:
	case WM_SETTINGCHANGE:
		Refresh();
		break;

	case WM_MEASUREITEM:
		if (OnMeasureItem((MEASUREITEMSTRUCT*)lp))
			return TRUE; // handled
		break;

	case WM_DRAWITEM:
		if (OnDrawItem((DRAWITEMSTRUCT*)lp))
			return TRUE; // handled
		break;

	case WM_INITMENUPOPUP:
		// Very important: must let frame window handle it first!
		// Because if someone calls CCmdUI::SetText, MFC will change item to
		// MFT_STRING, so I must change back to MFT_OWNERDRAW.
		//
		CSubclassWnd::WindowProc(msg, wp, lp);
		OnInitMenuPopup(CMenu::FromHandle((HMENU)wp),
			(UINT)LOWORD(lp), (BOOL)HIWORD(lp));
		return 0;

	case WM_MENUSELECT:
		OnMenuSelect((UINT)LOWORD(wp), (UINT)HIWORD(wp), (HMENU)lp);
		break;
	
	case WM_MENUCHAR:
		LRESULT lr = OnMenuChar((TCHAR)LOWORD(wp), (UINT)HIWORD(wp),
			CMenu::FromHandle((HMENU)lp));
		if (lr!=0)
			return lr;
		break;
	}
	return CSubclassWnd::WindowProc(msg, wp, lp);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);

        switch (wmId)
        {
        case IDM_COPY:
            OnCopy(hWnd);
            break;

        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;

        case IDM_200X150:
            OnChangeSize(hWnd, 200, 150);
            sizetype = ST_200X150;
            break;

        case IDM_320X240:
            OnChangeSize(hWnd, 320, 240);
            sizetype = ST_320X240;
            break;

        case IDM_640X480:
            OnChangeSize(hWnd, 640, 480);
            sizetype = ST_640X480;
            break;

        case IDM_1024X768:
            OnChangeSize(hWnd, 1024, 768);
            sizetype = ST_1024X768;
            break;

        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        }
        break;

    case WM_INITMENUPOPUP:
        OnInitMenuPopup(hWnd, (HMENU)wParam);
        break;

    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        OnPaint(hWnd, hdc);
        EndPaint(hWnd, &ps);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Beispiel #3
0
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	static UINT s_uTaskBarCreated = 0;

	switch(uMsg)
	{
	case WM_CREATE:
		{
			g_hwndMain = hwnd;
			// Register task bar (re)creation in order to reload systray icons after explorer crashes
			s_uTaskBarCreated = RegisterWindowMessage(REGISTER_MESSAGE);

			// Set Icons
			SendMessage(hwnd, WM_SETICON, ICON_BIG, 
				(LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, 
				GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR));

			SendMessage(hwnd, WM_SETICON, ICON_SMALL, 
				(LONG)(LONG_PTR)LoadImage(g_hInst, MAKEINTRESOURCE(IDI_MAIN_ICON), IMAGE_ICON, 
				GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR));

			ShowWindow(hwnd, SW_HIDE);

			// Clear the list
			g_IconTray.clear();

			installHookKeyboard();

			// Open the configuration
			if (openConfig() == FALSE)
			{
				uninstallHookKeyboard();
				clearMenuSkin();

				MessageBox(g_hwndMain, L"Configuration file not found or invalid", ERR_MSGBOX_TITLE, NULL);

				PostQuitMessage(0);
				return 0;
			}

			// Retreive the version of Windows (in order to know if it is a win200 or superior)
			windowsVersion = GetWindowsVersion();

			// Initialisation of variables for menus
			InitMenuVars();

			// Add the system tray icons (depends of the configuration)
			ShowTrayIcons();

			// Show loading error messages
			if (g_loadingmessage != NULL) {
				ShowBalloon(ERR_MSGBOX_TITLE, g_loadingmessage, 0, NIIF_ERROR);
				free(g_loadingmessage);
				g_loadingmessage = NULL;
			}

			// Launch application in "autorun" mode
			fireEvent(PROG_EVENT_START);

			FlushMemory();
		}
		break;

	case WM_HOTKEY:
		if( (wParam >= IDH_HOTKEY_MENU) && (wParam <= (IDH_HOTKEY_MENU + g_portal->hotkeys.size()) ) )
		{
			// Detect application item or menu item in order to open a menu or launch the application
			PortalProg* l_sp = g_portal->hotkeys[ wParam - IDH_HOTKEY_MENU ];

			while( l_sp )
			{
				if( l_sp->progs.size() > 0 )
				{
					ShowTrayMenu(l_sp, PORTAL_MENU_HOTKEY);
				}
				else
				{
					l_sp->run(false);
					// Some commands could call quitPortal. In this case g_portal is set to NULL.
					if(g_portal == NULL)
						return 0;
				}
				l_sp = l_sp->nextSameHotkey;
			}
		}
		FlushMemory();
		break;

	case WM_DESTROY:
		{
			quitPortal();
		}
		break;

	case WM_MYTRAYMSG:
		if ((wParam >= IDI_MAIN_ICON) && g_portal && (wParam <= (IDI_MAIN_ICON + g_portal->menus.size())))
		{
			// Find the clicked systray
			int pos = (int)wParam - IDI_MAIN_ICON;
			if( ((UINT)lParam == WM_RBUTTONUP) || ((UINT)lParam == WM_LBUTTONUP) || ((UINT)lParam == WM_MOUSEMOVE) )
			{
				// Left click : minimalist menu
				// Right click : Complete menu (with About/Reload/Quit)
				// Auto Open : Complete menu (like right click) with a automatic dismiss
				int param = PORTAL_MENU_SYSTRAY;
				if((UINT)lParam == WM_RBUTTONUP)
				{
					param = PORTAL_MENU_SYSTRAY_CMD;
				}
				
				if( ((UINT)lParam == WM_MOUSEMOVE) )
				{
					if( (g_portal->menus[pos] != NULL) && (g_portal->menus[pos]->options & PROG_OPTION_AUTOOPEN) )
					{
						param = PORTAL_MENU_SYSTRAY_AUTO;
					}
					else
					{
						return 0;
					}
				}

				// Detect if the icon is for a menu or a application
				if( (g_portal->menus[pos] != NULL) && ( g_portal->menus[pos]->progs.size() > 0 ) )
				{
					ShowTrayMenu(g_portal->menus[pos], param);
					g_currentMenu = pos;
				}
				else if( (g_portal->menus[pos] != NULL) && (g_portal->menus[pos]->progExe != NULL ))
				{
					if((UINT)lParam == WM_LBUTTONUP)
					{
						g_portal->menus[pos]->run(true);
						g_currentMenu = pos;
					}
					else
					{
						ShowTrayMenu(g_portal->menus[pos], param);
						g_currentMenu = pos;
					}
				}
				else
				{
					ShowTrayMenu(NULL, param);
					g_currentMenu = 0;
				}
				FlushMemory();
			}
			else if( (UINT)lParam == NIN_BALLOONUSERCLICK )
			{
				if(g_aboutbaloon)
					checkGuiproVersion();
				FlushMemory();
				return 0;
			}
		}
		break;

	case WM_INITMENUPOPUP :
		OnInitMenuPopup(hwnd, wParam, lParam);
		break;

	case WM_UNINITMENUPOPUP:
		OnUninitMenuPopup(hwnd, wParam, lParam);
		break;

	case WM_MEASUREITEM :
		OnMeasureItem(hwnd, wParam, lParam);
		break;

	case WM_DRAWITEM :
		OnDrawItem(hwnd, wParam, lParam);
		break;

	case WM_MENUCHAR:
		return OnMenuCharItem(hwnd, wParam, lParam);

	case WM_COMMAND:
		// Retreive a menu command
		if( wParam == IDM_EXIT )
		{
			quitPortal();
		}
		else if( wParam == IDM_RELOAD )
		{
			reloadPortalConfig();
		}
		else if( wParam == IDM_ABOUT )
		{
			ShowAbout(g_currentMenu);
			FlushMemory();
		}
		else if( ((UINT)wParam >= (PORTAL_HK_ID)) && ( (UINT)wParam <= (UINT)(PORTAL_HK_ID + menuGetNbElem()) )  )
		{
			PortalProg* l_sp = menuGetElem( (int)(wParam - 1 - PORTAL_HK_ID) );
			l_sp->run(true);
			FlushMemory();
		}
		else if( ((UINT)wParam >= (PORTAL_FILE_ID)) && ( (UINT)wParam < (UINT)(PORTAL_FILE_ID + menuGetNbFiles()) ) )
		{
			PortalProg* l_sp = menuGetFile( (int)(wParam - PORTAL_FILE_ID) );
			l_sp->run(true);
			FlushMemory();

			for(PortalProgVector::iterator i = g_portal_files.begin(); i != g_portal_files.end(); i++)
			{
				delete (*i);
			}
			g_portal_files.clear();
		}
		break;

	default:
		if( uMsg == s_uTaskBarCreated )
		{
			// Traskbar (re)creation, we have to reset systray icons
			ReloadTrayIcons();
			FlushMemory();
		}
		else
		{
			return(DefWindowProc(hwnd, uMsg, wParam, lParam));
		}
		break;
	}
	return 0;
}
Beispiel #4
0
/*----------------------------------------------------------------------------------------------
	Non-virtual window proc to call standard message handlers.  All handlers should be virtual.
	WARNING: This method is also called for dialogs.

	@param wm Windows message identifier.
	@param wp First message parameter.
	@param lp Second message parameter.
	@param lnRet Value to be returned to the system.  (return value for window procedure)

	@return true to prevent the message from being sent to other windows.
----------------------------------------------------------------------------------------------*/
bool AfWnd::FWndProcPre(uint wm, WPARAM wp, LPARAM lp, long & lnRet)
{
	AssertObj(this);

	bool fRet;

	switch (wm)
	{
	case WM_SYSCOLORCHANGE:
		// In an ActiveX control we may have no Papp().
		// It's a bit unusual to be handling a command in that situation, but it can happen.
		if (!AfApp::Papp())
			return false;
		// Push a color change command and enqueue a command indicating that we're done
		// processing color change messages.
		// NOTE: We get one of these per top level window.
		AfApp::Papp()->PushCid(kcidColorChange, this, wp, lp);
		AfApp::Papp()->EnqueueCid(kcidEndColorChange, this, wp, lp);
		return false;

	case WM_SETTINGCHANGE:
		// In an ActiveX control we may have no Papp().
		// It's a bit unusual to be handling a command in that situation, but it can happen.
		if (!AfApp::Papp())
			return false;
		// Push a color setting command and enqueue a command indicating that we're done
		// processing setting change messages.
		// NOTE: We may get many of these per top level window.
		AfApp::Papp()->PushCid(kcidSettingChange, this, wp, lp);
		AfApp::Papp()->EnqueueCid(kcidEndSettingChange, this, wp, lp);
		return false;

	case WM_MEASUREITEM:
		// Handle menu items.
		if (!wp && AfApp::GetMenuMgr(&m_pmum)->OnMeasureItem((MEASUREITEMSTRUCT *)lp))
			return true;
		return OnMeasureChildItem((MEASUREITEMSTRUCT *)lp);

	case WM_DRAWITEM:
		// Handle menu items.
		if (!wp && AfApp::GetMenuMgr(&m_pmum)->OnDrawItem((DRAWITEMSTRUCT *)lp))
			return true;
		return OnDrawChildItem((DRAWITEMSTRUCT *)lp);

	case WM_INITMENUPOPUP:
		// LOWORD(lp) specifies the zero-based relative position of the menu item that opens the
		// drop-down menu or submenu.
		// HIWORD(lp) If the menu is the window menu, this is TRUE; otherwise, it is FALSE.
		if (HIWORD(lp) == 0) // Ignore system menus.
		{
			AfApp::GetMenuMgr(&m_pmum)->ExpandMenuItems((HMENU)wp, LOWORD(lp));
		}
		return OnInitMenuPopup((HMENU)wp, LOWORD(lp), HIWORD(lp) != 0);

	case WM_MENUSELECT:
		if (!lp && HIWORD(wp) == 0xFFFF)
		{
			// Menu was closed if it had been open.
			AfApp::GetMenuMgr(&m_pmum)->OnMenuClose();
			AfMainWnd * pafw = MainWindow();
			if (pafw)
				pafw->SetContextInfo(NULL, MakePoint(0));
		}
		return OnMenuSelect((int)LOWORD(wp), (UINT)HIWORD(wp), (HMENU)lp);

	case WM_MENUCHAR:
		lnRet = AfApp::GetMenuMgr(&m_pmum)->OnMenuChar((achar)LOWORD(wp), (HMENU)lp);
		return lnRet != 0;

	case WM_PAINT:
		return OnPaint((HDC)wp);

	case WM_SIZE:
		fRet = OnSize(wp, LOWORD(lp), HIWORD(lp));
		OnClientSize();
		return fRet;

	case WM_COMMAND:
		return OnCommand(LOWORD(wp), HIWORD(wp), (HWND)lp);

	case WM_NOTIFY:
		return OnNotifyChild(wp, (NMHDR *)lp, lnRet);

	case WM_SETFOCUS:
		return OnSetFocus();

	case WM_CONTEXTMENU:
		return OnContextMenu((HWND)wp, MakePoint(lp));
	}

	// Keep passing the message.
	return false;
}
Beispiel #5
0
	//--------------------------------------------------------------------------------
	bool CMenuController::ProcessMessage( COSWindow& Window, Cmp_long_ptr& lResult, unsigned int uMsg, Cmp_uint_ptr wParam, Cmp_long_ptr lParam )
	{
		_WINQ_FCONTEXT( "CMenuController::ProcessMessage" );

		bool bProcessed = ProcessHook( Window, lResult, uMsg, wParam, lParam );

		switch ( uMsg )
		{
		case COSWindow::wmContextMenu:
			{
				COSWindow::refType refWnd = COSWindow::FromHandle( CWindowHandle( 0, (void*)(wParam) ).Ref() );
				unsigned short wXPos = LoWord( lParam );
				unsigned short wYPos = HiWord( lParam );
				OnContextMenu( Window, refWnd, wXPos, wYPos );
				bProcessed = true;
			}
			break;
		case COSWindow::wmInitMenu:
			{
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)(wParam) ).Ref() );
				OnInitMenu( Window, refMenu );
				lResult = 0;
				bProcessed = true;
			}
			break;
		case COSWindow::wmInitMenuPopup:
			{
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( wParam ) ).Ref() );
				unsigned short wPos = LoWord( lParam );
				int bWindowMenu = static_cast< int >( HiWord( lParam ) );
				OnInitMenuPopup( Window, refMenu, wPos, bWindowMenu ? true : false );
				lResult = 0;
				bProcessed = true;
			}
			break;
#if		( WINVER >= 0x0500 )
		case COSWindow::wmUninitMenuPopup:
			{
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)(wParam) ).Ref() );
				unsigned short wDestroyedMenu = HiWord( lParam );
				OnDestroyedMenuPopup( Window, refMenu, wDestroyedMenu );
				bProcessed = true;
			}
			break;
#endif//( WINVER >= 0x0500 )
		case COSWindow::wmMenuSelect:
			{
				unsigned short wIndex = LoWord( wParam );
				unsigned short wFlags = HiWord( wParam );
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() );
				OnMenuSelect( Window, refMenu, wIndex, wFlags );
				lResult = 0;
				bProcessed = true;
			}
			break;
		case COSWindow::wmMenuChar:
			{
				unsigned short wCharCode = LoWord( wParam );
				unsigned short wMenuType = HiWord( wParam );
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() );
				lResult = OnMenuChar( Window, refMenu, wCharCode, wMenuType );
				bProcessed = true;
			}
			break;
		case COSWindow::wmNextMenu:
			{
				MDINextMenu* pNextMenu = reinterpret_cast< MDINextMenu* >( lParam );

				CMenu::refType refMenuIn = CMenu::FromHandle( CMenuHandle( 0, (void*)( pNextMenu->hmenuIn ) ).Ref() );
				CMenu::refType refMenuNext = CMenu::FromHandle( CMenuHandle( 0, (void*)( pNextMenu->hmenuNext ) ).Ref() );

				OnNextMenu( Window, wParam, refMenuIn, refMenuNext );
				bProcessed = true;
			}
			break;
#if		( WINVER >= 0x0500 )
		case COSWindow::wmMenuGetObject:
			{
				MenuGetObjectInfo* pMenuObjectInfo = reinterpret_cast< MenuGetObjectInfo* >( lParam );
				lResult = OnGetObject( Window, pMenuObjectInfo );
				bProcessed = true;
			}
			break;
		case COSWindow::wmMenuRButtonUp:
			{
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() );
				OnRButtonUp( Window, refMenu, wParam );
				bProcessed = true;
			}
			break;
		case COSWindow::wmMenuCommand:
			{
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() );

				unsigned short wItemID = static_cast< unsigned short >( -1 );
				int iIndex = 0;

				if( System().Information(QOR_PP_SHARED_OBJECT_ACCESS).IsWindows98orME() )
				{
					wItemID = LoWord( wParam );
					iIndex = static_cast< int >( HiWord( wParam ) );
				}
				else
				{
					iIndex = wParam;
				}

				OnMenuCommand( Window, refMenu, iIndex, wItemID );

				bProcessed = true;
			}
			break;
		case COSWindow::wmMenuDrag:
			{
				CMenu::refType refMenu = CMenu::FromHandle( CMenuHandle( 0, (void*)( lParam ) ).Ref() );
				lResult = OnMenuDrag( Window, refMenu, static_cast< unsigned short >( wParam ) );
				bProcessed = true;
			}
			break;
#endif//( WINVER >= 0x0500 )
		case COSWindow::wmCommand:
			{
				unsigned short wCode = HiWord( wParam );
					
				if( wCode == 0 )
				{
					unsigned short wMenuID = LoWord( wParam );						
					OnCommand( Window, wMenuID );
					lResult = 0;
					bProcessed = true;
				}
			}
			break;
		}

		return bProcessed;
	}