目的:
提供颜色选择选项,添加了一个button按钮,在按钮旁边放了一个edit box,点击按钮后,弹出ccolordialog,将选择的颜色以编辑框背景色的形式显示出来。
该怎么显示?是在MFC的ACtivex控件中做。还有没有更好的显示方法?谢谢。还有一个有关刷新的问题:
对话框上添加了一个picture控件,加载图片后,在picture上画线,或矩形其它的等,鼠标移动时重画,要求动态更新。采用的刷新方法是在OnMouseMove()函数中:
(1)InvalidateRect(前一次画的矩形)
(2)InvalidateRect(本次画的矩形),并将本次的矩形保存为前一次的矩形变量,供下一次用。结果,在刷新的上面一小块,或者下边一小块,会闪。请问这是怎么回事?有什么办法解决吗?
InvalidateRect()函数只能是对话框调用吗?m_picture.Invalidate()或者m_picture.InvalidateRect(),不灵,不会刷新图片。
能帮我解释一下吗?谢谢。
提供颜色选择选项,添加了一个button按钮,在按钮旁边放了一个edit box,点击按钮后,弹出ccolordialog,将选择的颜色以编辑框背景色的形式显示出来。
该怎么显示?是在MFC的ACtivex控件中做。还有没有更好的显示方法?谢谢。还有一个有关刷新的问题:
对话框上添加了一个picture控件,加载图片后,在picture上画线,或矩形其它的等,鼠标移动时重画,要求动态更新。采用的刷新方法是在OnMouseMove()函数中:
(1)InvalidateRect(前一次画的矩形)
(2)InvalidateRect(本次画的矩形),并将本次的矩形保存为前一次的矩形变量,供下一次用。结果,在刷新的上面一小块,或者下边一小块,会闪。请问这是怎么回事?有什么办法解决吗?
InvalidateRect()函数只能是对话框调用吗?m_picture.Invalidate()或者m_picture.InvalidateRect(),不灵,不会刷新图片。
能帮我解释一下吗?谢谢。
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、画图防止闪烁时用双缓冲吧。
CColorDlg的GetColor
CDC的SetBkColor,
CEdit的Invilate。
大概就是这样了。 2.不闪屏的条件:
a. 你不能让 WM_ERASEBACKGROUND 动作
b. WM_PAINT 时, 要有内存镜象直接BitBlt
也就是视觉上不存在顿时的画面清除 而所有 Windows Common Control 都没有做到这两点
有2个简单的方法:
1. Invalidate(FALSE);
2. 计算出要重画的区域,形成一个RECT,然后调用InvalidateRect(&rect);
这个函数的具体意思。什么时候触发这个函数。pDC pWnd代表什么意思,能解释一下么?(2)第二个问题,我明白各位的意思,我也一直是这么做的,但还是有点闪。重绘区域有点闪。
InvalidateRect(&rect)
能否控制OnEraseBkgnd()函数,不刷新图片区域?