1 UpdateData 不能及时更新控件内容
原因:
UpdateData是通过数据交换实现改变控件显示的,改变了之后必须要调用一次OnPaint才能实现刷新。
因此,若是在一个函数里反复多次调用有时是没有效果的。
若想及时更新控件内容,在调用UpdateData后,需要再调用下UpdateWindow() 来刷新窗口。
UpdateData(FALSE); UpdateWindow();
2 Invalidate、Invalidate(FALSE)、Invalidate(TRUE) 关系
1)
void Invalidate( BOOL bErase = TRUE );
bErase
Specifies whether the background within the update region is to be erased.
Invalidate() 相当于 Invalidate(TRUE)
TRUE代表更新时察除背景色
FALSE表示更新时不察除背景,在原有背景上继续画图
2)
UpdateWindow(); 表示立即更新
但是必须先设置需要更新的无效区域才有效果, 否则不会发生变化。
下例显示的效果为: 直接在原图背景上 绘制新图, 因此会有重复现象
Invalidate(FALSE); UpdateWindow();
下例显示的效果为: 先将原图清理掉,然后再画新图, 因此不会有重复现象,但可能会发生闪烁
其效果等同于RedrawWindow()
Invalidate(); UpdateWindow();
RedrawWindow();
3 使用空刷子画图和不使用空刷子画图的区别
CBrush * pBrush=CBrush::FromHandle((HBRUSH(GetStockObject(NULL_BRUSH)))); CBrush* pOldBrush=pDC->SelectObject(pBrush); Draw(); //使用空刷子画图 pDC->SelectObject(pOldBrush);
考虑这样一种情况:
先画一个小矩形, 然后再画一个大矩形,使得大矩形包含小矩形
CRect rc1(0,0,100,100); CRect rc2(0,0,200,200); pDC->Rectangle(&rc1); pDC->Rectangle(&rc2);
1) 不使用空刷子时, 则最终结果只能看见大矩形
2) 使用空刷子时, 则大小矩形都可看见
原因分析:
不使用空刷子,系统默认的白色刷子, 这样画图时, 先使得画图区域失效,然后用刷子刷一下画图区域,最后再往这块区域中画图。
因此,当画大矩形时, 先用刷子刷这块区域,这样就将小矩形给冲刷掉了。
而, 使用空刷子时, 因为刷子是空的, 所以画大矩形时, 便不再用刷子刷这块区域, 而是直接在这块区域上画图,因此,原先的小矩形还保留着,没有受到影响。
4 画矩形框架(只画外围框架,不覆盖内部内容)
CBrush brush(RGB(255,0,0)); CRect rect(0,0,100,100); pDC->FrameRect(&rect,&brush);
ON_COMMAND是点了按钮或菜单项后的响应消息,
ON_UPDATE_COMMAND_UI是用来表示对应的按钮和菜单项的状态的响应消息. 消息函数对按钮的状态进行控制, 如将按钮设置为无效(灰色显示)
如:控制按钮IDM_DRAW_TABLE 是否有效
afx_msg void OnUpdateDrawTable(CCmdUI *pCmdUI);
ON_UPDATE_COMMAND_UI(IDM_DRAW_TABLE, OnUpdateDrawTable)
void CImageView::OnUpdateDrawTable(CCmdUI *pCmdUI) { if(m_TableStep==2) pCmdUI->Enable(TRUE); //按钮有效 else pCmdUI->Enable(FALSE); //按钮无效 }
void CImportView::OnUpdateFormatBrush(CCmdUI *pCmdUI) { if (bFormat) { pCmdUI->Enable(TRUE); pCmdUI->SetRadio(TRUE); //显示凹陷状态 return; }else pCmdUI->SetRadio(FALSE); //显示正常状态 }
6 画工具栏按钮
【视图】-->【工具栏】--->【图像编辑器】 调出图像编辑器工具栏。
选取工具栏中提供的工具, 其中包含 A (文本工具---可以直接往工具栏按钮写字)
选择颜色时,没有 填充工具 或 颜色选择工具时 没有调出系统颜色窗口 , 此时 需通过 【图像】-->【显示颜色窗口】来显示不同的颜色
当往一个按钮上写2个字时, 点中工具栏上的A后,需要划出一个字的范围, 写入改字后,再调整范围,然后划出另一个字的范围,再画另一个字, 最后调节两字。
可以使用放大镜将其放大到最大程度书写