社区
界面
帖子详情
请教关于重载CEdit类的问题(光标位置错误)
suerain
2003-09-30 04:35:20
我重载了WM_NCPAINT, WM_PAINT, 但是每次重绘的时候,光标位置都会错误,
我没有控制画光标,如果我不重载WM_PAINT的话,光标输出是正确的,到底是什么
原因呢?谢谢
附:哪里有xp风格的edit控件下载呢?谢谢
...全文
41
2
打赏
收藏
请教关于重载CEdit类的问题(光标位置错误)
我重载了WM_NCPAINT, WM_PAINT, 但是每次重绘的时候,光标位置都会错误, 我没有控制画光标,如果我不重载WM_PAINT的话,光标输出是正确的,到底是什么 原因呢?谢谢 附:哪里有xp风格的edit控件下载呢?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arvid_gs
2003-10-22
打赏
举报
回复
该一下就是xp风格的edit
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);
}
oo
2003-09-30
打赏
举报
回复
up
VC控件
C
Edit
重新审视 一个从没想过的
问题
今天终于出现了!我自己都感到以外!呵呵,什么
问题
呢?可能你也没想过哦。即使想过,你解答了没有? 是一个聊天的程序,
类
似于QQ的界面。简化一点说把。(注意是简化)一个基于...
界面(1):对话框和菜单 打印和按钮等杂项
Q
请教
高手,图形对话框的
问题
T我做了一个图象的界面,对话框的,在OnPaint中 画上背景图案,然后用Invalidate 方法刷新每个控件,但是控件并没有完全显示出来,特别是CCtrlList 等控件,滚动条有时候显示不出来,...
Windows Dev Intro - 孙鑫老师总结的vc小知识
http://blog.csdn.net/tony_whu/article/details/13021075 转自程序员之家论坛。下面的知识都是孙鑫老师总结的一些常见
问题
和解决方案。...
重载
CDocument
类
的虚函数virtual SetModifiedFlag: v
VC++ 知识小结(续)
1)当文档被修改时,如何在标题上加上...
重载
CDocument
类
的虚函数virtual SetModifiedFlag: void CTest2Doc::SetModifiedFlag(BOOL bModified){CString strTitle = GetTitle();CString strDirtyFlag = " *"; // note...
孙鑫老师总结的vc小知识
孙鑫老师总结的vc小知识 收藏转自程序员之家论坛。下面的知识都是孙鑫老师总结的一些常见
问题
和...
重载
CDocument
类
的虚函数virtual SetModifiedFlag:void CTest2Doc::SetModifiedFlag(BOOL bModified){ CString strT
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章