• 孙鑫C++教程留下来的作业--如何让工具栏在原来隐藏的位置出现


    --加油,不仅仅是口号!

    BEGIN----------------------------------

    将工具栏进行停靠。当隐藏后再次点击出现的时候它出现在工具栏顶部了,并没有停靠在原来的位置,如何解决呢?

    --虽然我们可以用这个函数简单地解决以上的问题:

    --ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);

    --相信会有不少那些精益求精的不懈追求者

         最开始本来使用的是MoveWindow()这个函数,结果发现无法将原来浮动的工具栏移到顶部工具栏区域之外--为什么会这样?因为工具栏此时已经被设定处于停靠

    状态了,所以我们要将它浮动起来,这就需要另外一个函数FloatControlBar()。

    void FloatControlBar( CControlBar * pBar, CPoint point

    point

    The location, in screen coordinates, where the top left corner of the control bar will be placed.

    下面添加我确认可行的代码:

     1 void  CMainFrame::OnNewtoolbar()
     2 {
     3     // TODO: 在此添加命令处理程序代码
     4     static CRect rect;
     5     static BOOL Isfloat=false;
     6     CPoint point;
     7     if(m_newToolBar.IsVisible())
     8     {
     9         if(Isfloat=m_newToolBar.IsFloating());//使工具栏消失前获取它是否浮动
    10         {
    11             m_newToolBar.GetWindowRect(&rect);//工具栏是浮动的就获取它的位置
    12         }
    13         m_newToolBar.ShowWindow(SW_HIDE);    
    14         RecalcLayout();
    15         DockControlBar(&m_newToolBar);
    16     }
    17     else
    18     {    
    19         m_newToolBar.ShowWindow(SW_SHOW);
    20         if(Isfloat)//工具栏消失之前是浮动状态调用下面代码
    21         {
    22             point.x=rect.left;
    23             point.y=rect.top-rect.Height();//根据测试发现移动后的Y坐标多了一个等于工具栏的高度的值
    24             FloatControlBar(&m_newToolBar,point);//调用这个函数使工具栏呈现浮动状态并且移动到point处
    25         }
    26         else
    27         {
    28             RecalcLayout();
    29             DockControlBar(&m_newToolBar);
    30         }
    31     }
    32 }

          对于第23行减去rect.Height()的问题,我觉得可能是FloatControlBar()函数的问题,因为rect获取的是屏幕的参数,我们需要移动的位置也是相对于屏幕的位置,其中不应该

    涉及到屏幕到客户区的转换。欢迎对此能够做出解释的人给我留言

  • 相关阅读:
    web安全
    WCF通信架构
    WCF地址
    WCFContracts(契约)
    分布式中的王者WCF
    SOAP 介绍
    诊所管理软件
    MFC 画图CDC双缓冲
    Linux 启动、关闭、重启网络服务
    C# 除法的小数点问题
  • 原文地址:https://www.cnblogs.com/nice-forever/p/3140133.html
Copyright © 2020-2023  润新知