⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infownd.cpp

📁 一个fir滤波器Designer的例子
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////////
   

#include "stdafx.h"
#include "InfoWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CInfoWnd
	
CInfoWnd::CInfoWnd(COLORREF cr)
{
    //static CBrush bkColor(RGB(255,129,129));
    static CBrush bkColor(cr);
    // Register the window class if it has not already been registered.
	WNDCLASS wndcls;
	HINSTANCE hInst = AfxGetInstanceHandle();
	if(!(::GetClassInfo(hInst, INFOWINDOW_CLASSNAME, &wndcls)))
	{
		// otherwise we need to register a new class
		wndcls.style			= CS_SAVEBITS;
		wndcls.lpfnWndProc		= ::DefWindowProc;
		wndcls.cbClsExtra		= wndcls.cbWndExtra = 0;
		wndcls.hInstance		= hInst;
		wndcls.hIcon			= NULL;
		wndcls.hCursor			= LoadCursor( hInst, IDC_ARROW );
        wndcls.hbrBackground	= (HBRUSH) bkColor;
		wndcls.lpszMenuName		= NULL;
		wndcls.lpszClassName	= INFOWINDOW_CLASSNAME;

		if (!AfxRegisterClass(&wndcls))
			AfxThrowResourceException();
	}
    m_nHorizontalOffset = 2;
    m_nVerticalOffset = 2;
    m_nAttach = 0;
}

CInfoWnd::~CInfoWnd()
{
 //   delete m_pBkColor;
}


BEGIN_MESSAGE_MAP(CInfoWnd, CWnd)
	//{{AFX_MSG_MAP(CInfoWnd)
	ON_WM_PAINT()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CInfoWnd message handlers

BOOL CInfoWnd::Create(CWnd * pParentWnd)
{
	ASSERT_VALID(pParentWnd);

	DWORD dwStyle = WS_BORDER | WS_POPUP; 
	DWORD dwExStyle = WS_EX_TOOLWINDOW; //  | WS_EX_TOPMOST;
	m_pParentWnd = pParentWnd;

	return CreateEx(dwExStyle, INFOWINDOW_CLASSNAME, NULL, dwStyle, 
					CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 
					pParentWnd->GetSafeHwnd(), NULL, NULL );
}


void CInfoWnd::Show(CWnd* p, LPCTSTR lpszTitleText)
{
    if (!IsWindow(GetSafeHwnd())) return;
	ASSERT( ::IsWindow( GetSafeHwnd() ) );
    ASSERT(p != NULL);
	ASSERT( ::IsWindow( p->GetSafeHwnd() ) );

    CRect rOriginalWnd;

	// If InfoWnd is already displayed, don't do anything.
	if( IsWindowVisible() ) 
		return;

    p->GetWindowRect(&rOriginalWnd); // Screen Coordinates   

    // Do not display the Infotip is app does not have focus
	if( GetFocus() == NULL )
		return;

    // determin the text extent !
	CClientDC dc(this);
	m_strTitle = _T(" ");
    m_strTitle += lpszTitleText;
    m_strTitle += _T(" ");

	CFont font, *pOldFont = NULL;
    pOldFont = dc.SelectObject( m_pParentWnd->GetFont() );

	CSize TextSize = dc.GetTextExtent( m_strTitle );

	TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);
	TextSize.cx += tm.tmOverhang + 2;
	TextSize.cy += tm.tmDescent + 2;

	dc.SelectObject( pOldFont );


    if (m_nAttach == INFOWND_ATTACH_BOTTOM)
    {
        m_rectDisplay.left = rOriginalWnd.left;
        m_rectDisplay.top = rOriginalWnd.bottom + m_nVerticalOffset;
    }
    else if (m_nAttach & INFOWND_ATTACH_RIGHT)
    {
        m_rectDisplay.left = rOriginalWnd.right + m_nHorizontalOffset;
        m_rectDisplay.top = rOriginalWnd.top;
    }
    else if (m_nAttach & INFOWND_ATTACH_LEFT)
    {
        m_rectDisplay.left = rOriginalWnd.left - m_nHorizontalOffset - TextSize.cx;
        m_rectDisplay.top = rOriginalWnd.top;
    }
    else
    {
        m_rectDisplay.left = rOriginalWnd.left;
        m_rectDisplay.top = rOriginalWnd.top - TextSize.cy - m_nVerticalOffset;
    }
    m_rectDisplay.bottom = m_rectDisplay.top + TextSize.cy;
    m_rectDisplay.right = m_rectDisplay.left + TextSize.cx;

	SetWindowPos(&wndTop,
        m_rectDisplay.left-3,
        m_rectDisplay.top-1,
		m_rectDisplay.Width()+3,
        m_rectDisplay.Height(),
		SWP_SHOWWINDOW|SWP_NOACTIVATE);
        
}

void CInfoWnd::Hide()
{
  	if (!::IsWindow(GetSafeHwnd()))
		return;
	ShowWindow( SW_HIDE );
}

void CInfoWnd::OnPaint() 
{
	CPaintDC dc(this);

    TEXTMETRIC tm;
	dc.GetTextMetrics(&tm);

	CFont *pFont = m_pParentWnd->GetFont();
	CFont *pFontDC = dc.SelectObject( pFont );
	int nHeight=0;

	CRect rect = m_rectDisplay;
	ScreenToClient(rect);

	dc.SetBkMode( TRANSPARENT ); 

	nHeight = dc.DrawText(m_strTitle, rect, 0 
		| DT_LEFT
		| DT_EDITCONTROL
		| DT_NOPREFIX
		| DT_WORDBREAK
		);
	dc.SelectObject( pFontDC );
	// Do not call CWnd::OnPaint() for painting messages
}

void CInfoWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CWnd::OnLButtonDown(nFlags, point);
}

void CInfoWnd::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CWnd::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -