我的窗口不包含控件,如何在当鼠标在客户区时显示tooltip 请指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //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{// Constructionpublic: CTipWnd();// Attributespublic:// Operationspublic:// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTipWnd) //}}AFX_VIRTUAL// Implementationpublic: 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 functionsprotected: 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_FILEstatic 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_MAPEND_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类~如果你不知道怎么使用,我可以给个例子给你 ,给我发短消息~ 问:什么时候用CLASS CXXX,什么时候用包含头文件? 找人编两个函数 应该不麻烦 本人菜菜鸟 请教:关于将ACCESS数据库转换到SQL数据库的程序 数据库入库时候字段转换问题 请问自绘菜单的问题 我要写一个简单的Dll,如何实现这个。 有谁知道windows是怎样翻译html文件的? VC 开发activex控件遇到的问题 想得分的请进,很简单的? 请各位大侠出手相救,如何使用带图标的的Combo控件,也即如何用CComboCtrlEx? IE高级问题! 请大虾指教! postmessage和sendmessage
===============================
#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类~如果你不知道怎么使用,我可以给个例子给你 ,给我发短消息~