为什么我自绘的edit控件一开始就会得到焦点?

如上图所示,我的鼠标都没有移动到edit控件上,就是一进入到这个界面的时候,edit控件就获取了焦点这事为什么啊?我用CEdit类的派生类CMyEdit来重绘,代码如下:
#pragma once
#ifndef _H_MYEDIT_H
#define _H_MYEDIT_H
class CMyEdit :public CEdit
{
DECLARE_DYNAMIC(CMyEdit)
public:
CMyEdit(void);
~CMyEdit(void);
void DrawFrame();
void Text();
protected:
afx_msg void OnMouseLeave();
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnMouseHover(UINT nFlags, CPoint point);
afx_msg void OnNcPaint();
// afx_msg void OnPaint();
// afx_msg void OnSetFocus(CWnd* pOldWnd);
DECLARE_MESSAGE_MAP()
public:
bool m_isinedit;
CBrush m_normalbrush1;
CBrush m_normalbrush2;
CBrush m_hoverbrush1;
CBrush m_hoverbrush2;
bool isfocus;
};
#endif
实现文件
#include "StdAfx.h"
#include "MyEdit.h"
IMPLEMENT_DYNAMIC(CMyEdit, CEdit)
CMyEdit::CMyEdit(void)
{
m_isinedit=false;
m_hoverbrush1.CreateSolidBrush(0xFDC860);
m_hoverbrush2.CreateSolidBrush(0xE7AC49);
m_normalbrush1.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
m_normalbrush2.CreateSolidBrush(GetSysColor(COLOR_WINDOWFRAME));
isfocus=false;
}
CMyEdit::~CMyEdit(void)
{
}
BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
ON_WM_MOUSEMOVE()
ON_WM_MOUSELEAVE()
ON_WM_MOUSEHOVER()
ON_WM_NCPAINT()
/* ON_WM_SETFOCUS()*/
END_MESSAGE_MAP()
void CMyEdit::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_isinedit)
{
TRACKMOUSEEVENT mouseevent;
mouseevent.cbSize=sizeof(mouseevent);
//mouseevent.dwFlags=TME_LEAVE|TME_HOVER;
mouseevent.dwFlags=TME_LEAVE;
mouseevent.dwHoverTime=10;
mouseevent.hwndTrack=m_hWnd;
_TrackMouseEvent(&mouseevent);
m_isinedit=true;
DrawFrame();
}
}
void CMyEdit::OnMouseLeave()
{
m_isinedit=false;
DrawFrame();
isfocus=true;
}
void CMyEdit::OnMouseHover(UINT nFlags, CPoint point)
{
DrawFrame();
}
void CMyEdit::OnNcPaint()
{
CEdit::OnNcPaint();//先调用基类的OnNcPaint()让系统画图,系统画完后再我们画
DrawFrame();
if (!isfocus)
{
Text();
TRACE("1\n");
}
}
// void CMyEdit::OnPaint()
// {
// CEdit::OnPaint();
// DrawFrame();
// }
void CMyEdit::DrawFrame()
{
CDC* pDC = GetWindowDC( );
CRect rect;
GetWindowRect( &rect);
rect.OffsetRect( -rect.left, -rect.top);
if (m_isinedit)
{
pDC->FrameRect( &rect, &m_hoverbrush1);
rect.InflateRect(-1,-1);
pDC->FrameRect( &rect, &m_hoverbrush2);
}
else
{
pDC->FrameRect( &rect, &m_normalbrush1);
rect.InflateRect(-1,-1);
pDC->FrameRect( &rect, &m_normalbrush2);
}
ReleaseDC( pDC);
}
void CMyEdit::Text()
{
CDC* pDC = GetDC();
CRect rect;
GetClientRect(&rect);
rect.OffsetRect(1,1);
pDC->SelectObject( (*GetFont()) );
pDC->SetBkMode(TRANSPARENT);
CString text=_T("hello");
pDC->DrawText (text,&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ;
}
// void CMyEdit::OnSetFocus(CWnd* pOldWnd)
// {
// CEdit::OnSetFocus(pOldWnd);
// isfocus=true;
// }
我这里有借鉴版主邓学彬来实现edit框架重绘~~
...全文
相关推荐
实现EDIT控件自绘的资源
实现EDIT控件自绘 实现EDIT控件自绘 实现EDIT控件自绘实现EDIT控件自绘
Edit控件自绘
自绘MFC Edit编辑框控件。实现字体设置、位图背景、边框变色等。
Mfc实现Edit重绘
mfc中实现Edit控件重绘,包括Edit的悬停边框、文字居中,绘制Edit的非客户区和客户区等。但是有个问题我一直没有解决,就是VS2010中存在.manifest文件时,编辑框上有黑影。
MFC Edit控件之enter回车捕捉
MFC Edit控件之enter回车捕捉:http://blog.csdn.net/cracent/article/details/50986365
color_edit.rar_C++ edit美化_界面美化_自绘_自绘Edit
在做界面美化的时候,迫切需要一些已有的封装类来完成自己的工作,来节省时间,这个自绘类,是您想要的


界面
