Click here to Skip to main content
12,356,350 members (65,615 online)
Click here to Skip to main content

Stats

240.6K views
1.1K downloads
32 bookmarked
Posted

RSS Reader Plug-in for Internet Explorer

, 16 Jul 2007 CPOL
This is a toolbar for the Internet Explorer which shows information from RSS taken from the Internet.
Setup.exe
RssReader_src
RRPRssFetcher
RRPRssFetcher
res
RRPRssFetcher.ico
toolbar.bmp
RRPRssFetcher.vcproj.TEKAWADE.Prafulla V Tekawade.user
RSSReaderplugin
Debug
res
RssReaderPlugin.dll.manifest
RRPComInterfaceImplementor.rgs
RssReaderPlugin.aps
RssReaderPlugin.def
RssReaderPlugin.dsp
RssReaderPlugin.dsw
RssReaderPlugin.opt
RssReaderPlugin.plg
RssReaderPlugin.tlb
RssReaderPlugin.vcproj.TEKAWADE.Prafulla V Tekawade.user
RssReaderPluginps.def
RssReaderPluginps.mk
Setup.iss
/*
	Project		: RSS Reader plugin for Internet Explorer
	File name	: RRPMenuTooltip.h
	Date		: 
	Purpose		: It is used to show the Ballon tooltip.
				 
	Note		: Taken from internet
	Send comments 
	or Bugs to	: prafulla_t@users.sourceforge.net
*/

#ifndef _MENU_TOOLTIP
#define _MENU_TOOLTIP

#ifndef TTS_NOANIMATE
	#define TTS_NOANIMATE           0x10
	#define TTS_NOFADE              0x20
	#define TTS_BALLOON             0x40
	#define TTS_CLOSE               0x80

	#define TTM_SETTITLEA           (WM_USER + 32)  // wParam = TTI_*, lParam = char* szTitle
	#define TTM_SETTITLEW           (WM_USER + 33)  // wParam = TTI_*, lParam = wchar* szTitle

	#ifdef UNICODE
	#define TTM_SETTITLE            TTM_SETTITLEW
	#else
	#define TTM_SETTITLE            TTM_SETTITLEA
	#endif
#endif

#include "RRPDebugInfoLogger.h"
#include "stdafx.h"
#include <atlmisc.h>

#define WS_EX_LAYERED	0x00080000
#define LWA_ALPHA		0x00000002



class RRPMenuTooltip {
private:
	HWND popupMenuHandle;
  public:
	RRPMenuTooltip():m_hToolTip(0), m_hParent(0) {
		hUserDll = ::LoadLibrary(_T("USER32.dll"));
	}
	~RRPMenuTooltip() {
		::FreeLibrary(hUserDll);
	}

	// Create the Tooltip to associate the text
	void Create(HWND hParent, LPCTSTR sczTipText, 
			HINSTANCE hInstance = NULL, 
			DWORD dwStyle = 0,
			LPCTSTR sczTipTitle = NULL);
	// Call this funtions on WM_MENUSELECT of menu owner windw
	// with LOWORD(wParam), HIWORD(wParam), lParam
	void OnMenuSelect(TCHAR szBuff[256],UINT nItemID, UINT nFlags, HMENU hSubMenu) {
		return;
	}
	void OnMenuSelect(TCHAR szBuff[256],UINT nItemID, UINT nFlags, HMENU hSubMenu,int x,int y);

	void setMenuHandle(HWND handle) {
		popupMenuHandle = handle;
	}

	// Show or hide tooltip
	void ShowToolTip(BOOL bShow)
	{
		TOOLINFO    ti;
		ti.cbSize = sizeof(TOOLINFO);
		ti.uFlags = TTF_IDISHWND | TTS_NOPREFIX;
		ti.hwnd   = m_hParent;
		ti.uId    = (UINT)m_hParent;
		::SendMessage(m_hToolTip,TTM_TRACKACTIVATE,(WPARAM)bShow,(LPARAM)&ti);
	}

	// Set Tip Position
	TCHAR* SetToolTipPosition(HMENU hMenu, UINT nItemID,int x,int y)	{
		RECT menuRect;
		::ZeroMemory(&menuRect,sizeof(RECT));
		if(::IsWindow(popupMenuHandle)) {
			::GetWindowRect(popupMenuHandle,&menuRect);
		}

	//Change style to layered window style...
		::SetWindowLong(m_hToolTip, GWL_EXSTYLE, ::GetWindowLong(m_hToolTip, GWL_EXSTYLE) |  WS_EX_LAYERED );
		typedef BOOL (WINAPI* lpfnSetTransparent)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
		lpfnSetTransparent pFnSetTransparent  = NULL;
		pFnSetTransparent  = (lpfnSetTransparent)GetProcAddress(hUserDll, "SetLayeredWindowAttributes");
		if (pFnSetTransparent )
			pFnSetTransparent(m_hToolTip, 0, 255 * 90/100, LWA_ALPHA);


		::SendMessage(m_hToolTip, TTM_TRACKPOSITION, 0,
						(LPARAM)MAKELPARAM(x, y));
		
		::SetWindowPos(m_hToolTip, HWND_TOPMOST ,0,0,0,0, SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOMOVE);

		return NULL;
	}

	// Update tiptext
	void UpdateToolTipText(LPCTSTR szBuff, HINSTANCE hInstance = 0)
	{

		TOOLINFO    ti;
		ti.cbSize = sizeof(TOOLINFO);
		ti.uFlags = TTF_IDISHWND;
		ti.hwnd   = m_hParent;
		ti.uId    = (UINT)m_hParent;
		ti.hinst = hInstance;
		ti.lpszText  = const_cast<LPTSTR>(szBuff);
		::SendMessage(m_hToolTip,TTM_UPDATETIPTEXT,(WPARAM)0,(LPARAM)&ti);
	}

	operator HWND()	{
		return m_hToolTip;
	}

  private:
		HMODULE hUserDll;
		HWND m_hToolTip;
		HWND m_hParent;
		TCHAR m_szDefault[_MAX_PATH] ;
		HINSTANCE m_hInstance;
};

inline
void RRPMenuTooltip::Create(HWND hParent, LPCTSTR sczTipText, HINSTANCE hInstance, 
							DWORD dwStyle, LPCTSTR sczTipTitle)
{
	INITCOMMONCONTROLSEX icex;
	TOOLINFO    ti;
	// Load the ToolTip class from the DLL.
	icex.dwSize = sizeof(icex);
	icex.dwICC  = ICC_BAR_CLASSES;

	if(!InitCommonControlsEx(&icex))
	   return;

	m_hParent = hParent;
	m_hInstance = hInstance;
	   
	// Create the ToolTip control.
	m_hToolTip = ::CreateWindow(TOOLTIPS_CLASS, TEXT(""),
						  WS_POPUP| dwStyle,
						  CW_USEDEFAULT, CW_USEDEFAULT,
						  CW_USEDEFAULT, CW_USEDEFAULT,
						  NULL, (HMENU)NULL, hInstance,
						  NULL);

	// Prepare TOOLINFO structure for use as tracking ToolTip.
	ti.cbSize = sizeof(TOOLINFO);
	ti.uFlags = TTF_IDISHWND| TTF_TRACK;//| TTF_CENTERTIP;
	ti.hwnd   = hParent;
	ti.uId    = (UINT)hParent;
	ti.hinst  = hInstance;
	ti.lpszText  = const_cast<LPTSTR>(sczTipText);
	if(sczTipText != LPSTR_TEXTCALLBACK) {
		if(sczTipText) {
			_tcscpy(m_szDefault, sczTipText);
		}
		else {
			_tcscpy(m_szDefault, _T("No Text associated"));
		}
	}

	ti.rect.left = ti.rect.top = ti.rect.bottom = ti.rect.right = 0; 

	// Add the tool to the control, displaying an error if needed.
	::SendMessage(m_hToolTip,TTM_ADDTOOL,0,(LPARAM)&ti);

	::SendMessage(m_hToolTip, TTM_SETMAXTIPWIDTH, 0, 300);
	if(sczTipTitle) {
		::SendMessage(m_hToolTip, TTM_SETTITLE, 1, (LPARAM)sczTipTitle);
	}
}

inline 
void RRPMenuTooltip::OnMenuSelect(TCHAR szBuff[256],UINT nItemID, UINT nFlags, HMENU hSubMenu,int x,int y)
{
	if(nFlags & MF_POPUP 
		|| (nFlags == 0xFFFF && hSubMenu == NULL)) {	// menu closing 
		ShowToolTip(FALSE);
	}

	if(!(nFlags & MF_POPUP)) {
		
		// Set the position
	
		 SetToolTipPosition(hSubMenu, nItemID,x,y);
#if 0
		for(int i = 0; i < nRet; i++)
		{
			if(szBuff[i] == _T('\n'))
			{
				szBuff[i] = 0;
				break;
			}
		}
#endif		
		if(szBuff[0] != 0) {
			UpdateToolTipText(szBuff);
		}
		else {
			UpdateToolTipText(m_szDefault);
		}
		ShowToolTip(TRUE);
	}
}

#endif _MENU_TOOLTIP

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

PrafullaT
India India
Quote : "Life is all about solving problems and enjoying their solutions !! "

You may also be interested in...

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.160621.1 | Last Updated 17 Jul 2007
Article Copyright 2007 by PrafullaT
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid