代码之家  ›  专栏  ›  技术社区  ›  cigarman

如何更改CDockablePane标题

  •  6
  • cigarman  · 技术社区  · 16 年前

    不过,它们似乎被缓存在某个地方,因为当我更改默认值时,它使用的是应用程序在上一次运行时使用的内容。我在登记处找不到与此有关的东西。

    新的标题似乎不会加载,直到窗格被隐藏并再次显示。这应该是个暗示,但我搞不懂。

    6 回复  |  直到 16 年前
        1
  •  6
  •   cigarman    16 年前

    可停靠窗格中选项卡窗格的标题存储在注册表中。如果注册表中已存在标题,则不使用创建时使用的标题。

    使用AppWizard创建的设置,注册表设置位于:

    HKEY_CURRENT_USER\Software\Local AppWizard-Generated Applications\MyApp\Workspace\DockingManager-128\DockingPaneAndPaneDividers
    

    存储在这个键中的值基本上是一个二进制文件,由docking manager在启动时序列化到窗格中。这些内容没有文档记录,但是您可以在afxdockablepane.cpp中看到代码在做什么。

        2
  •  2
  •   Patrik    16 年前

    嗯,也许我误解了,但我只是在CDockablePane的实例上调用了“SetWindowText”。 它的标题更改为我传递给“SetWindowText”的内容。。。

        3
  •  1
  •   Izzy    12 年前

    我遇到了类似的问题,在应用程序第一次关闭后,两个窗格的名称相同。我删除了注册表项,第一次开始一切正常,第二次我又得到同样的错误。 SetWindowText(“MyPane”);在覆盖中 当然,他干的是脏活。它不是设置windows标题的最佳位置,但是正如Colerman在上面所说的,SetWindowsText并不是总是像它应该的那样工作。

    无论如何,当应用程序启动时,窗格定位进程总是调用 尺寸 之后 窗格的创建完成了,所以对我来说,这个肮脏的黑客做的把戏。

        4
  •  0
  •   johnwbyrd    15 年前

    窗口的名称在LoadState()时序列化。删除应用程序中与窗口位置相关的所有注册表信息。就我而言,它在HKCU\Software\my App Name。

        5
  •  0
  •   spin_eight    13 年前

    我也遇到了同样的问题,但由于我不喜欢这里提供的任何解决方案,我进一步发现,通过引用 CDockingManager 调用它的方法 DisableRestoreDockState

        6
  •  0
  •   Owen Ransen    12 年前

    由于选项卡的文本存储在注册表中,而执行该操作的代码隐藏得很好,而且没有文档记录,因此我发现了一种不好的方法来做您想做的事情。

    将.rc文件中的字符串表更改为所需的格式,例如,我在此处将ClassView更改为LayerView:

    STRINGTABLE
    BEGIN
        IDS_CLASS_VIEW          "Layer View"
        ...
    END
    

    在mainframe类中添加以下调用:

    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
        if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
            return -1;
    
        BOOL bNameValid;
    
        // set the visual manager and style based on persisted value
        OnApplicationLook(theApp.m_nAppLook);
    
        GetDockingManager()->DisableRestoreDockState(TRUE); // <-- THIS CALL
    

    关闭 然后 你的应用程序存储在注册表中的名称将是你放在.rc文件中的名称。

    现在您可以注释掉对DisableRestoreDockState的调用,因为正确的调用存储在注册表中。在你的用户电脑上安装新的软件也可以。

    HTH公司

    推荐文章