VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 822|回复: 5

[交流] MFC多文档(选项卡)启动后隐藏,通过线程发送消息创建视图页,再显示出来,结果乱了

[复制链接]
66_avatar_middle
在线会员 发表于 2016-7-13 16:59:28 | 显示全部楼层 |阅读模式
重点在 CMainFrame::OnShowWindowOut 里

问题是,
启动后,先是隐藏的
1. 然后创建至少1个视图,
2. 再ShowWindow 出来
3. 界面就乱了(用鼠标改变一下大小后,又正常了)

如果 1,2颠倒 则正常,至少是我要的结果,不过界面上会有“创建窗口对象”的轨迹。

请教,这个是什么原因,能修复吗?

-------------------------------------------------------------------------------------
下面是相关代码,通过另一个线程发送的 消息,这是消息处理函数:
LRESULT CMainFrame::OnShowWindowOut(WPARAM wParam, LPARAM lParam)
{
    CString strTitle = _T("这是标题啊");
     
    do
    {
        // 先 ShowWindow 的代码块,应该是正常的
#if 0
        // 先 ShowWindow ,则正常
        ShowWindow(SW_SHOWNORMAL);

        CDocument* pDoc = theApp.pDocTemplate->OpenDocumentFile(strTitle, FALSE, TRUE);
        if (pDoc == NULL)
            break;

        pDoc = theApp.pDocTemplate->OpenDocumentFile(strTitle, FALSE, TRUE);
        if (pDoc == NULL)
            break;

        pDoc = theApp.pDocTemplate->OpenDocumentFile(strTitle, FALSE, TRUE);
        if (pDoc == NULL)
            break;
#else
        // 先创建视图页,再 ShowWindow 则有问题
        CDocument* pDoc = theApp.pDocTemplate->OpenDocumentFile(strTitle, FALSE, TRUE);
        if (pDoc == NULL)
            break;

        pDoc = theApp.pDocTemplate->OpenDocumentFile(strTitle, FALSE, TRUE);
        if (pDoc == NULL)
            break;

        pDoc = theApp.pDocTemplate->OpenDocumentFile(strTitle, FALSE, TRUE);
        if (pDoc == NULL)
            break;

        ShowWindow(SW_SHOWNORMAL);
#endif

    } while (0);

    return 0;
}


最后的最后,代码工程:
MFC多文档(选项卡)启动后隐藏,通过线程发送消息创建视图页,再显示出来,结果乱了 SecretMark_StandaloneVersion.zip (145.66 KB, 下载次数: 3)




上一篇:boost正則之xpressive
下一篇:VC实现DLL注入
59_avatar_middle
在线会员 发表于 2016-7-13 20:02:18 | 显示全部楼层
这个很简单的啊  唉
26_avatar_middle
在线会员 发表于 2016-7-14 11:25:01 来自手机 | 显示全部楼层
我就笑笑不说话1468465817.23
51_avatar_middle
online_admins 发表于 2016-7-14 13:46:18 | 显示全部楼层
这个恐怕得在 ChildFrm.cpp 中对创建的子窗口进行一个大小的调整,之后就应该可以了
66_avatar_middle
ico_lz  楼主| 发表于 2016-7-15 16:10:05 | 显示全部楼层
Syc 发表于 2016-7-14 13:46
这个恐怕得在 ChildFrm.cpp 中对创建的子窗口进行一个大小的调整,之后就应该可以了

这是 MFC 框架的 bug吗? 我使用的是 vs2010。

在哪个事件,或者实现哪个虚函数 可以做你说的调整呢?
51_avatar_middle
online_admins 发表于 2016-7-15 17:18:18 | 显示全部楼层
寂寞的芥末 发表于 2016-7-15 16:10
这是 MFC 框架的 bug吗? 我使用的是 vs2010。

在哪个事件,或者实现哪个虚函数 可以做你说的调整呢?

应该不是bug,得在代码中去自己处理了,比如动态的获取框架窗口的大小,之后再创建子框架窗口的时候去设置一下
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-19 23:38

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表