请指点

解决方案 »

  1.   

    //TipWnd.h
    ===============================
    #if !defined(AFX_TIPWND_H__5BA53CF5_C62C_4030_9299_4529BE3A1727__INCLUDED_)
    #define AFX_TIPWND_H__5BA53CF5_C62C_4030_9299_4529BE3A1727__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // TipWnd.h : header file
    ///////////////////////////////////////////////////////////////////////////////
    // CTipWnd windowclass CTipWnd : public CWnd
    {
    // Construction
    public:
    CTipWnd();// Attributes
    public:// Operations
    public:// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CTipWnd)
    //}}AFX_VIRTUAL// Implementation
    public:
    virtual BOOL  Create(CString csMessage,CPoint cPoint);
    virtual BOOL  Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwStyle,const RECT& rect, CWnd* pParentWnd,UINT nID,CCreateContext* pContext=NULL);
    virtual ~CTipWnd(); // Generated message map functions
    protected:
    CSize CalcWndSize();
    //{{AFX_MSG(CTipWnd)
    afx_msg void OnPaint();
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    private:
    CString m_csMessage;
    };///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_TIPWND_H__5BA53CF5_C62C_4030_9299_4529BE3A1727__INCLUDED_)// TipWnd.cpp : implementation file
    //#include "stdafx.h"
    #include "5_1_Popups.h"
    #include "TipWnd.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CTipWndCTipWnd::CTipWnd()
    {
    }CTipWnd::~CTipWnd()
    {
    }
    BEGIN_MESSAGE_MAP(CTipWnd, CWnd)
    //{{AFX_MSG_MAP(CTipWnd)
    ON_WM_PAINT()
    ON_WM_LBUTTONDOWN()
    ON_WM_KEYDOWN()
    ON_WM_SYSKEYDOWN()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // CTipWnd message handlersBOOL CTipWnd::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID, CCreateContext *pContext)
    { return FALSE;
    }BOOL CTipWnd::Create(CString csMessage, CPoint cPoint)
    { CBrush cBrush;
    UINT nResult;
    CSize cSize;
    m_csMessage=csMessage; cSize=CalcWndSize();
    cBrush.CreateSolidBrush (RGB(0,255,0)); LPCTSTR lpszTipClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::LoadCursor(NULL,IDC_ARROW),HBRUSH(cBrush),NULL);
    nResult=CWnd::CreateEx (WS_EX_NOPARENTNOTIFY|WS_EX_TOPMOST|WS_EX_WINDOWEDGE,lpszTipClass,csMessage,WS_POPUPWINDOW|WS_VISIBLE,cPoint.x,cPoint.y,cSize.cx,cSize.cy,GetSafeHwnd(),0); SetCapture();
    return nResult;
    }CSize CTipWnd::CalcWndSize()
    { CDC cDC;
    CSize cSize,cSizeFinal;
    CString csTemp;
    int nLen,nLenTrim,nLines;
    cDC.CreateIC (_T("DISPLAY"),NULL,NULL,NULL); nLines=0;
    nLenTrim=0;
    cSizeFinal.cx =0;
    cSizeFinal.cy =0;
    csTemp=m_csMessage;
    do{
    nLen=csTemp.Find ("\r\n");
    if(nLen>0)
    {
    csTemp=csTemp.Left (nLen);
    nLenTrim+=(nLen+2);
    nLines++;
    cSize=cDC.GetTextExtent (csTemp);
    csTemp=m_csMessage.Right (m_csMessage.GetLength()-nLenTrim);
    }
    else
    {
    nLines++;
    cSize=cDC.GetTextExtent (csTemp);
    }
    cSizeFinal.cy=cSize.cy;
    cSizeFinal.cx=max(cSizeFinal.cx ,cSize.cx);
    }
    while(nLen>=0);
    cSizeFinal.cx +=15;
    cSizeFinal.cy*=nLines;
    cSizeFinal.cy+=15;
    return cSizeFinal;
    }void CTipWnd::OnPaint() 
    {
    CRect cRect;
    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here

    GetClientRect(cRect);
    cRect.DeflateRect (5,5,5,5);
    dc.SetBkColor (RGB(0,255,0));
    dc.DrawText(m_csMessage,&cRect,DT_LEFT|DT_WORDBREAK);
    }void CTipWnd::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    //ShutDown();
    DestroyWindow();
    CWnd::OnLButtonDown(nFlags, point);
    }void CTipWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
    //ShutDown();
    DestroyWindow();
    CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
    }void CTipWnd::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // TODO: Add your message handler code here and/or call default
    // ShutDown();
    DestroyWindow();
    CWnd::OnSysKeyDown(nChar, nRepCnt, nFlags);
    }
    上面的代码就是一个CTipWnd类~如果你不知道怎么使用,我可以给个例子给你 ,给我发短消息~