none
没有注册表时,初次启动时CDockablePane不更新 RRS feed

  • 问题

  • MFC MDI程序,里面很多DockablePane。

    程序在新机器上安装时,由于没有注册表。初次启动Dockpane里面的内容都不更新,一片空白。多个Tab到一起的Dockpane,练Tab标签都是空白的,Dockpane的PaneDivider也不显示。

    点其他程序,再切换回来,或者缩放程序,或者最大化之后,程序才能刷新正常显示。

    如果退出重启,或者注册表正常的化。启动刷新都没问题。

    试了一下几种方法,都不起作用。

    ShowWindow(nCmdShow);

    Invalidate();

    UpdateWindow();

    或者

    ShowWindow(nCmdShow);

    UpdateWindow();

    RecalculateLayout();

    2020年2月4日 13:24

答案

  • InvalidateRect(NULL)

    UpdateWindow()

    还有RedrawWindow都不起作用

    2020年2月4日 13:51
  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>初次启动时CDockablePane不更新

    请问你是如何调用RedrawWindow或者InvalidateRect函数的?

    RedrawWindow(win, NULL, NULL, RDW_INVALIDATE);和InvalidateRect(win, NULL, NULL);这两句代码时等效的,都会使窗口无效。如果您希望立即刷新,我建议你可以尝试调用则调用RedrawWindow(win, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW)或在InvalidateRect其后进行UpdateWindow。

    Best Regards,

    Jeanine Zhang

    2020年2月5日 3:20
    版主

全部回复

  • InvalidateRect(NULL)

    UpdateWindow()

    还有RedrawWindow都不起作用

    2020年2月4日 13:51
  • 你好,

    感谢您在MSDN论坛发帖提问。

    >>初次启动时CDockablePane不更新

    请问你是如何调用RedrawWindow或者InvalidateRect函数的?

    RedrawWindow(win, NULL, NULL, RDW_INVALIDATE);和InvalidateRect(win, NULL, NULL);这两句代码时等效的,都会使窗口无效。如果您希望立即刷新,我建议你可以尝试调用则调用RedrawWindow(win, NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW)或在InvalidateRect其后进行UpdateWindow。

    Best Regards,

    Jeanine Zhang

    2020年2月5日 3:20
    版主
  • 多谢,我调用了RedrawWindow(NULL, NULL, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE);

    我去除了ShowWindow的调用,因为它会调整窗口大小。去除以后界面大小和显示都没问题。

    但是出现一个新情况,任务栏里面不再显示程序图标了。最小化以后在任务栏找不到程序了。

    用Alt+tab切换应用程序,可以看到。切换到程序以后,任务栏就有图标了。

    我估计是需要手工发一个任务栏显示程序图标的消息。请问这个用什么显示?


    2020年2月6日 13:21