我用VC2005实现鼠标移动到多个不同静态文本框,使相应文本颜色变化,鼠标移开后颜色恢复,调用的是OnMouseMove函数。另外一功能是单击各个静态文本使其响应。现在的问题是,单击静态文本框要把属性Notify事件改为true,但是该了之后,不执行鼠标移动事件。也就是单击成功,但是鼠标移动后文本颜色无变化。反之也行。也就是说两者只能选其一。有没有什么方法,让两者都能自如显示? 另外我要按向下键盘的话,希望获取第一个静态文本框的焦点,使其颜色改变。再次按下,获取下一个静态文本框的焦点,使其颜色改变,前一个文本颜色恢复,依此类推。可是调用SetFocus()函数无法获取静态文本框焦点。 求帮助。谢谢!
解决方案 »
- 基于对话框窗口最大化的问题
- 请教:VC中怎样让单文档的视图放大和缩小?
- 用VC怎么实现网站上的用户登陆及发表信息
- CDialogBar问题,急啊.
- 请问:OpenService函数使用中,如何指定各种服务的名称?比如SQL Server2000数据库服务的服务名是什么?上哪里去找各种服务的服务名?谢
- 高分:点击按钮弹出一个类似jscript打开的ie窗口
- 【求助】把CString转unsigned char的方法,谢谢
- 求助注册表编程怎么实现选中“包括可从该对象的父项继承权限”?
- 如何在WebBrowser控件中输出内容(不用url,VC问题)
- 怎样将16进制的字符转换成10进制?
- MFC中怎样实现 汉字和特殊字符可在其他任何语言操作系统中正常显示???
- CHttpFile读取网页乱码连字母都是乱的……
第二种方法。移去所有文本框,在父OnPaint()中画你想要的效果。界面只是一种表现行式。
#ifndef _STATICEX_H_
#define _STATICEX_H_#include "afxwin.h"#define WM_MODIFYFONT WM_USER+200class CStaticEx : public CStatic
{
public:
CStaticEx();
~CStaticEx();
COLORREF m_TextColor;
COLORREF m_BackColor;
CString m_strCaption;
CFont* m_pFont;
BOOL m_bTextLeft; void SetTextColor(COLORREF TextColor);
void SetCaption(CString strCaption);
CString GetCaption();
void SetBkColor(COLORREF BackColor);
void Create(CString strCaption,COLORREF BackColor);
void SetTextLeft(BOOL bStatus);
void SetTextFont(CFont* pFont);
protected:
//{{AFX_MSG(CListCtrlEx)
afx_msg void OnPaint();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG DECLARE_MESSAGE_MAP()
};#endif
#include "staticex.h"CStaticEx::CStaticEx()
{
m_pFont = NULL;
m_bTextLeft = false;
}CStaticEx::~CStaticEx()
{
}BEGIN_MESSAGE_MAP(CStaticEx, CStatic)
//{{AFX_MSG_MAP(CListCtrlEx)
ON_WM_PAINT()
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CStaticEx::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CStatic::OnPaint()
CRect rect;
GetClientRect(rect);
CDC MemDC;
MemDC.CreateCompatibleDC(NULL); //Create MemDC
CBitmap MemBitmap;
MemBitmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height()); //Create MemBitmap
CBitmap* pOldClientBitmap = MemDC.SelectObject(&MemBitmap); //Select MemBitmap into MemDC to Draw//////////////////////////////////////////////////////////////////////////
MemDC.FillSolidRect(rect,m_BackColor);
MemDC.SetBkColor(m_BackColor);
MemDC.SetBkMode(TRANSPARENT);
CFont *pOldFont;
if(m_pFont != NULL)
pOldFont=MemDC.SelectObject(m_pFont);
else
pOldFont = MemDC.SelectObject(GetParent()->GetFont());//选用父窗体的字体
MemDC.SetTextColor(m_TextColor);//设置文本颜色
if(m_bTextLeft)
MemDC.DrawText(m_strCaption,&rect,DT_LEFT);
else
MemDC.DrawText(m_strCaption,&rect,DT_CENTER);
MemDC.SelectObject(pOldFont);
//////////////////////////////////////////////////////////////////////////
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldClientBitmap);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}void CStaticEx::SetTextLeft(BOOL bStatus)
{
m_bTextLeft = bStatus;
}void CStaticEx::SetTextFont(CFont* pFont)
{
m_pFont = pFont;
}int CStaticEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CStatic::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
return 0;
}void CStaticEx::SetTextColor(COLORREF TextColor)
{
m_TextColor=TextColor;
}
void CStaticEx::SetCaption(CString strCaption)
{
m_strCaption=strCaption;
} CString CStaticEx::GetCaption()
{
return m_strCaption;
}void CStaticEx::SetBkColor(COLORREF BackColor)
{
m_BackColor = BackColor;
}