zoukankan      html  css  js  c++  java
  • MFC 小知识总结二

    1 UpdateData 不能及时更新控件内容

     

    原因: 

    UpdateData是通过数据交换实现改变控件显示的。改变了之后必需要调用一次OnPaint才干实现刷新。

    因此,若是在一个函数里重复多次调用有时是没有效果的。

    若想及时更新控件内容。在调用UpdateData后。须要再调用下UpdateWindow() 来刷新窗体。

     

    1. UpdateData(FALSE);  
    2. UpdateWindow();  

     

    2 Invalidate、Invalidate(FALSE)、Invalidate(TRUE) 关系

     

    1)

    1. void Invalidate(  
    2.    BOOL bErase = TRUE   
    3. );  


    bErase

    Specifies whether the background within the update region is to be erased.

      Invalidate() 相当于 Invalidate(TRUE)

      TRUE代表更新时察除背景色

      FALSE表示更新时不察除背景,在原有背景上继续绘图

     

    2)

             UpdateWindow();     表示马上更新

             可是必须先设置须要更新的无效区域才有效果, 否则不会发生变化。

           

             下例显示的效果为: 直接在原图背景上 绘制新图,  因此会有反复现象  

    1. Invalidate(FALSE);  
    2. UpdateWindow();  


            下例显示的效果为: 先将原图清理掉,然后再画新图, 因此不会有反复现象,但可能会发生闪烁 

             其效果等同于RedrawWindow()

    1. Invalidate();  
    2. UpdateWindow();  

     

    1. RedrawWindow();  

     

     

    3  使用空刷子绘图和不使用空刷子绘图的差别

     

    1. CBrush * pBrush=CBrush::FromHandle((HBRUSH(GetStockObject(NULL_BRUSH))));  
    2.   
    3. CBrush* pOldBrush=pDC->SelectObject(pBrush);  
    4.   
    5. Draw(); //使用空刷子绘图  
    6.   
    7. pDC->SelectObject(pOldBrush);  


    考虑这样一种情况: 

    先画一个小矩形, 然后再画一个大矩形。使得大矩形包括小矩形

     

    1. CRect rc1(0,0,100,100);  
    2.    
    3. CRect rc2(0,0,200,200);  
    4.   
    5.   
    6. pDC->Rectangle(&rc1);  
    7. pDC->Rectangle(&rc2);    


    1)  不使用空刷子时, 则终于结果仅仅能看见大矩形

    2) 使用空刷子时。      则大小矩形都可看见

     

    原因分析:

           不使用空刷子,系统默认的白色刷子,  这样绘图时,  先使得绘图区域失效。然后用刷子刷一下绘图区域,最后再往这块区域中绘图。

           因此,当画大矩形时, 先用刷子刷这块区域,这样就将小矩形给冲刷掉了。

           而。 使用空刷子时。 由于刷子是空的, 所以画大矩形时, 便不再用刷子刷这块区域, 而是直接在这块区域上绘图,因此。原先的小矩形还保留着,没有受到影响。

     

    4 画矩形框架(仅仅画外围框架,不覆盖内部内容)


    1. CBrush brush(RGB(255,0,0));  
    2. CRect rect(0,0,100,100);  
    3. pDC->FrameRect(&rect,&brush);  


    5  ON_COMMAND与ON_UPDATE_COMMAND_UI 差别

       ON_COMMAND是点了button或菜单项后的响应消息,

       ON_UPDATE_COMMAND_UI是用来表示相应的button和菜单项的状态的响应消息.   消息函数对button的状态进行控制, 如将button设置为无效(灰色显示)

       如:控制buttonIDM_DRAW_TABLE 是否有效

     

    1. afx_msg void OnUpdateDrawTable(CCmdUI *pCmdUI);  
    1. ON_UPDATE_COMMAND_UI(IDM_DRAW_TABLE, OnUpdateDrawTable)  

     

    1. void CImageView::OnUpdateDrawTable(CCmdUI *pCmdUI)  
    2. {  
    3.     if(m_TableStep==2)  pCmdUI->Enable(TRUE);  //button有效  
    4.     else                pCmdUI->Enable(FALSE);  //button无效  
    5. }  


     

    1. void CImportView::OnUpdateFormatBrush(CCmdUI *pCmdUI)  
    2. {  
    3.   
    4.   
    5.   if (bFormat)  
    6.   {  
    7.       pCmdUI->Enable(TRUE);  
    8.       pCmdUI->SetRadio(TRUE); //显示凹陷状态  
    9.       return;  
    10.   }else  
    11.           pCmdUI->SetRadio(FALSE); //显示正常状态  
    12. }  

    6  画工具栏button

      【视图】-->【工具栏】--->【图像编辑器】 调出图像编辑器工具栏。

       选取工具栏中提供的工具, 当中包括 A  (文本工具---能够直接往工具栏button写字)

       选择颜色时,没有  填充工具 或 颜色选择工具时  没有调出系统颜色窗体 , 此时 需通过 【图像】-->【显示颜色窗体】来显示不同的颜色

     

      当往一个button上写2个字时,  点中工具栏上的A后,须要划出一个字的范围, 写入改字后。再调整范围,然后划出还有一个字的范围,再画还有一个字, 最后调节两字。

      能够使用放大镜将其放大到最大程度书写

      

     转自:http://blog.csdn.net/shuilan0066/article/details/7309501

  • 相关阅读:
    06springmvc文件上传
    07springmvc文件下载
    05springmvc-json-ajax使用
    04springmvc请路径参数
    03springmvc项目使用静态资源
    02springmvc注解入门
    springmvc入门
    20mybatis集成jndi
    19mybatis集成dbcp
    怎样用hibernate验证登陆界面的用户名和密码
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6727784.html
Copyright © 2011-2022 走看看