怎样在Edit box控件上设置背景色

liaozhicai 2010-08-11 07:11:42
目的:
提供颜色选择选项,添加了一个button按钮,在按钮旁边放了一个edit box,点击按钮后,弹出ccolordialog,将选择的颜色以编辑框背景色的形式显示出来。
该怎么显示?是在MFC的ACtivex控件中做。

还有没有更好的显示方法?谢谢。

还有一个有关刷新的问题:
对话框上添加了一个picture控件,加载图片后,在picture上画线,或矩形其它的等,鼠标移动时重画,要求动态更新。采用的刷新方法是在OnMouseMove()函数中:
(1)InvalidateRect(前一次画的矩形)
(2)InvalidateRect(本次画的矩形),并将本次的矩形保存为前一次的矩形变量,供下一次用。

结果,在刷新的上面一小块,或者下边一小块,会闪。

请问这是怎么回事?有什么办法解决吗?
InvalidateRect()函数只能是对话框调用吗?m_picture.Invalidate()或者m_picture.InvalidateRect(),不灵,不会刷新图片。
能帮我解释一下吗?谢谢。
...全文
488 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexhoho 2010-08-13
  • 打赏
  • 举报
回复
对于第2个问题
有2个简单的方法:
1. Invalidate(FALSE);
2. 计算出要重画的区域,形成一个RECT,然后调用InvalidateRect(&rect);
alexhoho 2010-08-13
  • 打赏
  • 举报
回复
1.OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

在你的ccolordialog中把选定的RGB值接收过来,然后pDC->SetBkColor(RGB(R,G,B)
大概就是这样了。

2.不闪屏的条件:
a. 你不能让 WM_ERASEBACKGROUND 动作
b. WM_PAINT 时, 要有内存镜象直接BitBlt
也就是视觉上不存在顿时的画面清除

而所有 Windows Common Control 都没有做到这两点
muzizongheng 2010-08-13
  • 打赏
  • 举报
回复
这个用到3个函数:
CColorDlg的GetColor
CDC的SetBkColor,
CEdit的Invilate。
liaozhicai 2010-08-13
  • 打赏
  • 举报
回复
(1)第一个问题解决了,非常感谢各位。但没明白OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
这个函数的具体意思。什么时候触发这个函数。pDC pWnd代表什么意思,能解释一下么?

(2)第二个问题,我明白各位的意思,我也一直是这么做的,但还是有点闪。重绘区域有点闪。
InvalidateRect(&rect)
能否控制OnEraseBkgnd()函数,不刷新图片区域?
psbeond 2010-08-12
  • 打赏
  • 举报
回复
去看我的blog。里面有关于CEdit背景自绘的详细步骤及注意事项。
五香花生米 2010-08-12
  • 打赏
  • 举报
回复
1、添加函数WM_CTLCOLOR
HBRUSH CTestHScrollDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

if (pWnd->GetDlgCtrlID()==IDC_EDIT2) //IDC_EDIT2换成你的编辑框ID
{
pDC->SetBkColor(RGB(0,255,255)); //RGB(0,255,255)换成ccolordialog中你选中的颜色
HBRUSH B=CreateSolidBrush(RGB(0,255,255));
//RGB(0,255,255)换成ccolordialog中你中的颜色
return B;
}
return hbr;
}

2、画图防止闪烁时用双缓冲吧。
liaozhicai 2010-08-12
  • 打赏
  • 举报
回复
谢谢。我再试试。

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧