请教关于重载CEdit类的问题(光标位置错误) 我重载了WM_NCPAINT, WM_PAINT, 但是每次重绘的时候,光标位置都会错误,我没有控制画光标,如果我不重载WM_PAINT的话,光标输出是正确的,到底是什么原因呢?谢谢附:哪里有xp风格的edit控件下载呢?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 该一下就是xp风格的editCFlatEdit::CFlatEdit(){ m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT); m_clrShadow = GetSysColor(COLOR_BTNSHADOW); m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW); m_clrButton = GetSysColor(COLOR_BTNFACE); m_bDrawGripper = TRUE; m_bDrawSeperator = TRUE; m_bFlatStyle = TRUE;}CFlatEdit::~CFlatEdit(){}BEGIN_MESSAGE_MAP(CFlatEdit, CEdit) //{{AFX_MSG_MAP(CFlatEdit) ON_WM_LBUTTONDOWN() ON_WM_PAINT() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() ON_WM_SYSCOLORCHANGE() ON_WM_TIMER() //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CFlatEdit message handlersvoid CFlatEdit::OnMouseMove(UINT nFlags, CPoint point) { SetTimer(1, 10, NULL); CEdit::OnMouseMove(nFlags, point);}void CFlatEdit::OnLButtonDown(UINT nFlags, CPoint point) { m_bLBtnDown = true; CEdit::OnLButtonDown(nFlags, point);}void CFlatEdit::OnLButtonUp(UINT nFlags, CPoint point) { m_bLBtnDown = false; CEdit::OnLButtonUp(nFlags, point);}void CFlatEdit::OnTimer(UINT nIDEvent) { POINT pt; GetCursorPos(&pt); CRect rcItem; GetWindowRect(&rcItem); static bool bPainted = false; if(!rcItem.PtInRect(pt)) { KillTimer(1); DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton); return; } else { DrawEdit(FE_MOUSEOVER, m_clrShadow, m_clrHilite); } CEdit::OnTimer(nIDEvent);}void CFlatEdit::OnPaint() { Default(); DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);}void CFlatEdit::OnSysColorChange() { CEdit::OnSysColorChange(); m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT); m_clrShadow = GetSysColor(COLOR_BTNSHADOW); m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW); m_clrButton = GetSysColor(COLOR_BTNFACE); }void CFlatEdit::DrawEdit(int style, COLORREF clrTopLeft, COLORREF clrBottomRight){ CRect rcItem; CRect rcGripper; CRect rcSeperator; GetClientRect(&rcItem); GetClientRect(&rcGripper); GetClientRect(&rcSeperator); CDC* pDC = GetDC(); COLORREF clrBlack; clrBlack = RGB(0, 0, 0); if(m_bFlatStyle) { pDC->Draw3dRect(rcItem, clrTopLeft, clrBottomRight); rcItem.InflateRect(1,1); if (!IsWindowEnabled()) { pDC->Draw3dRect(rcItem, m_clrHilite, m_clrHilite); } else { pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); } rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); rcItem.DeflateRect(4, 4); if(m_bDrawGripper) { rcGripper.top = rcItem.top; rcGripper.bottom = rcItem.bottom; rcGripper.left -= 4; rcGripper.right = rcGripper.left +2; pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow); rcGripper.left -= 3; rcGripper.right = rcGripper.left +2; pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow); } if(m_bDrawSeperator) { rcSeperator.top = rcItem.top; rcSeperator.bottom = rcItem.bottom; rcSeperator.left = rcItem.right + 2; rcSeperator.right = rcSeperator.left + 2; pDC->Draw3dRect(rcSeperator, m_clrShadow, m_clrHilite); } if (!IsWindowEnabled()) { return; } if(style == FE_MOUSEOVER) { pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); //added this rcItem.top -= 1; //added this rcItem.left -= 1; rcItem.bottom += 1; rcItem.right += 1; //added this pDC->Draw3dRect(rcItem, m_clrShadow, m_clrHilite); //was hilite, shadow } } else { pDC->Draw3dRect(rcItem, clrBlack, clrBlack); rcItem.InflateRect(1, 1); pDC->Draw3dRect(rcItem, clrBlack, clrBlack); pDC->Draw3dRect(rcItem, clrBlack, clrBlack); rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); rcItem.DeflateRect(4, 4); if(m_bDrawGripper) { rcGripper.top = rcItem.top - 2; rcGripper.bottom = rcItem.bottom + 2; rcGripper.left -= 6; rcGripper.right = rcGripper.left + 2; pDC->Draw3dRect(rcGripper, clrBlack, clrBlack); rcGripper.left -= 3; rcGripper.right -= 3; pDC->Draw3dRect(rcGripper, clrBlack, clrBlack); } if(m_bDrawSeperator) { rcSeperator.top = rcItem.top - 2; rcSeperator.bottom = rcItem.bottom + 2; rcSeperator.left = rcItem.right + 4; rcSeperator.right = rcSeperator.left + 2; pDC->Draw3dRect(rcSeperator, clrBlack, clrBlack); } } ReleaseDC(pDC);}void CFlatEdit::SetIndent(int margin){ SetMargins(margin, 1);} 求高人写一个MFC调用dll的例子,东西很简单。高分求助 vb调用vc dll 参数为结构体 jpg 转为tif,请帮帮忙 用DS创建驱动,然后通过GUID无法打开我的驱动,郁闷好几天了,大家进来看看,好吗? 菜鸟提问:用什么方法实现饼图呢? 求MFC的CHtmlView类获得网页多个元素的值 页面设置问题 IPicture支持几种格式的picture文件? 如何把系统时间添加到StatusBar中 "未找到XXX符号名"的错误。非常规 请问是有 vc网络通信协议分析与应用实现 的代码光盘 请问是有 vc网络通信协议分析与应用实现 的代码光盘
CFlatEdit::CFlatEdit()
{
m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
m_clrButton = GetSysColor(COLOR_BTNFACE);
m_bDrawGripper = TRUE;
m_bDrawSeperator = TRUE;
m_bFlatStyle = TRUE;}CFlatEdit::~CFlatEdit()
{
}
BEGIN_MESSAGE_MAP(CFlatEdit, CEdit)
//{{AFX_MSG_MAP(CFlatEdit)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_SYSCOLORCHANGE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CFlatEdit message handlers
void CFlatEdit::OnMouseMove(UINT nFlags, CPoint point)
{
SetTimer(1, 10, NULL);
CEdit::OnMouseMove(nFlags, point);
}void CFlatEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
m_bLBtnDown = true;
CEdit::OnLButtonDown(nFlags, point);
}void CFlatEdit::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bLBtnDown = false;
CEdit::OnLButtonUp(nFlags, point);
}void CFlatEdit::OnTimer(UINT nIDEvent)
{
POINT pt;
GetCursorPos(&pt);
CRect rcItem;
GetWindowRect(&rcItem); static bool bPainted = false; if(!rcItem.PtInRect(pt)) {
KillTimer(1);
DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);
return;
}
else {
DrawEdit(FE_MOUSEOVER, m_clrShadow, m_clrHilite);
} CEdit::OnTimer(nIDEvent);
}void CFlatEdit::OnPaint()
{
Default();
DrawEdit(FE_MOUSEOUT, m_clrButton, m_clrButton);}void CFlatEdit::OnSysColorChange()
{
CEdit::OnSysColorChange();
m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
m_clrButton = GetSysColor(COLOR_BTNFACE);
}void CFlatEdit::DrawEdit(int style, COLORREF clrTopLeft, COLORREF clrBottomRight)
{
CRect rcItem;
CRect rcGripper;
CRect rcSeperator; GetClientRect(&rcItem);
GetClientRect(&rcGripper);
GetClientRect(&rcSeperator); CDC* pDC = GetDC();
COLORREF clrBlack;
clrBlack = RGB(0, 0, 0); if(m_bFlatStyle)
{
pDC->Draw3dRect(rcItem, clrTopLeft, clrBottomRight);
rcItem.InflateRect(1,1);
if (!IsWindowEnabled()) {
pDC->Draw3dRect(rcItem, m_clrHilite, m_clrHilite);
}
else {
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
} rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.DeflateRect(4, 4); if(m_bDrawGripper)
{
rcGripper.top = rcItem.top;
rcGripper.bottom = rcItem.bottom;
rcGripper.left -= 4;
rcGripper.right = rcGripper.left +2;
pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
rcGripper.left -= 3;
rcGripper.right = rcGripper.left +2;
pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
}
if(m_bDrawSeperator)
{
rcSeperator.top = rcItem.top;
rcSeperator.bottom = rcItem.bottom;
rcSeperator.left = rcItem.right + 2;
rcSeperator.right = rcSeperator.left + 2;
pDC->Draw3dRect(rcSeperator, m_clrShadow, m_clrHilite);
}
if (!IsWindowEnabled()) {
return;
}
if(style == FE_MOUSEOVER)
{
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); //added this
rcItem.top -= 1; //added this
rcItem.left -= 1;
rcItem.bottom += 1;
rcItem.right += 1; //added this
pDC->Draw3dRect(rcItem, m_clrShadow, m_clrHilite); //was hilite, shadow
}
}
else { pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
rcItem.InflateRect(1, 1);
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
rcItem.InflateRect(1,1); pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.InflateRect(1,1);
pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
rcItem.DeflateRect(4, 4);
if(m_bDrawGripper)
{
rcGripper.top = rcItem.top - 2;
rcGripper.bottom = rcItem.bottom + 2;
rcGripper.left -= 6;
rcGripper.right = rcGripper.left + 2;
pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
rcGripper.left -= 3;
rcGripper.right -= 3;
pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
} if(m_bDrawSeperator)
{
rcSeperator.top = rcItem.top - 2;
rcSeperator.bottom = rcItem.bottom + 2;
rcSeperator.left = rcItem.right + 4;
rcSeperator.right = rcSeperator.left + 2;
pDC->Draw3dRect(rcSeperator, clrBlack, clrBlack);
}
} ReleaseDC(pDC);
}void CFlatEdit::SetIndent(int margin)
{
SetMargins(margin, 1);
}