Edit控件的重绘,该怎么处理
Edit控件的重绘
Edit重绘之后,鼠标点击之后,没有重绘前的内容又会出现,OnPaint函数中的代码
CPaintDC dc(this); // device context for painting
//创建字体
LOGFONT log;
GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);
log.lfHeight = 25; //改
log.lfWidth = 20; //改
log.lfCharSet = GB2312_CHARSET;
log.lfItalic = false;//斜体
log.lfWeight = FW_BOLD;
lstrcpy(log.lfFaceName, _T("宋体"));
font.CreateFontIndirect(&log);
//设置字体
dc.SelectObject(&font);
font.DeleteObject();
//设置背景色
CRect rect;
GetClientRect(&rect);
mybrush.CreateSolidBrush(RGB(0,0,255));
dc.FillRect(&rect,&mybrush); //用FillRect成员函数利用笔刷填充指定区域
mybrush.DeleteObject();
//设置字体垂直居中
TCHAR buffer[MAX_PATH];
ZeroMemory(buffer,MAX_PATH );
::GetWindowText(this->m_hWnd,buffer,MAX_PATH);
dc.SetBkMode(TRANSPARENT);
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
原来的内容是这样的:
重绘之后是这样的:
单击之后又变成原来的样子,但是最大化,最小化重新刷新之后又好了,请问这是为什么
------解决思路----------------------
这是 windows 的问题, 就是 不是所有的 ,绘制 都 在 Onpaint 中 进行的, 有些消息 默认 自己会 绘制, 不 经过 OnPaint
要 经过 OnPaint 必须 Invalidate。
------解决思路----------------------
貌似意思是在 edit点击时加个 Invalidate 控件区域。
------解决思路----------------------
鼠标消息里Invalidate一下
------解决思路----------------------
编辑框自绘 请在 OnNcPaint 和CTLCOLOR执行
Edit重绘之后,鼠标点击之后,没有重绘前的内容又会出现,OnPaint函数中的代码
CPaintDC dc(this); // device context for painting
//创建字体
LOGFONT log;
GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);
log.lfHeight = 25; //改
log.lfWidth = 20; //改
log.lfCharSet = GB2312_CHARSET;
log.lfItalic = false;//斜体
log.lfWeight = FW_BOLD;
lstrcpy(log.lfFaceName, _T("宋体"));
font.CreateFontIndirect(&log);
//设置字体
dc.SelectObject(&font);
font.DeleteObject();
//设置背景色
CRect rect;
GetClientRect(&rect);
mybrush.CreateSolidBrush(RGB(0,0,255));
dc.FillRect(&rect,&mybrush); //用FillRect成员函数利用笔刷填充指定区域
mybrush.DeleteObject();
//设置字体垂直居中
TCHAR buffer[MAX_PATH];
ZeroMemory(buffer,MAX_PATH );
::GetWindowText(this->m_hWnd,buffer,MAX_PATH);
dc.SetBkMode(TRANSPARENT);
dc.DrawText(buffer,&rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
原来的内容是这样的:
重绘之后是这样的:
单击之后又变成原来的样子,但是最大化,最小化重新刷新之后又好了,请问这是为什么
------解决思路----------------------
这是 windows 的问题, 就是 不是所有的 ,绘制 都 在 Onpaint 中 进行的, 有些消息 默认 自己会 绘制, 不 经过 OnPaint
要 经过 OnPaint 必须 Invalidate。
------解决思路----------------------
貌似意思是在 edit点击时加个 Invalidate 控件区域。
------解决思路----------------------
鼠标消息里Invalidate一下
------解决思路----------------------
编辑框自绘 请在 OnNcPaint 和CTLCOLOR执行