AfxGetMainWnd() return NULL

前言
手头的试验工程是VC6-MFC的, 现在要用到PSDK, 否则找不到API. 又不想动态加载, 于是用VS2013转了一下.
修正了编译的报错, 测试时,发现在一个线程中报错.具体如下:
* 线程是用_beginthreadex创建的
* 线程中使用了CDocument*派生类中的一个方法, 在这个方法中,向主窗体CMainFrame发送一个自定义消息. 但是AfxGetMainWnd()返回的空指针, 我又没检查, 这也能返回空, 程序就挂了.

跟了下代码, 确实返回空. 猜测是模块状态引起的问题, 在函数入口处用AFX_MANAGE_STATE(AfxGetStaticModuleState()); 切换了模块状态, 还是返回空.

在网上查了下, 他们的解决方法是 : AfxGetApp()->GetMainWnd(), 这次行了.

void CMainDoc::UpdateAllViewsSafe() {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CMainFrame* pWnd = NULL;

    // SetModifiedFlag(TRUE); ///< 如果不需要文档序列化, 不需要设置文档修改标记
    if (m_dwThreadId == GetCurrentThreadId()) {
        UpdateAllViews(NULL);
    } else {
        pWnd = (CMainFrame*)(AfxGetApp()->GetMainWnd()); ///< !
        if (NULL != pWnd) {
            pWnd->PostMessage(WM_UPDATEALLVIEWSSAFE, 0, 0);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值