MFC/VC DLL导出对话框,焦点混乱问题

vs创建dll,然后在dll里面创建对话框,并通过导出函数的方式创建时,会碰到各种各样的问题。比如edit控件获取不了焦点,无法输入;子对话框无法移动;各种button的焦点混乱等各种问题。
原因分析:
dll中创建的mfc对话框底层有自己的窗口map列表,exe中的某些消息有可能传递不到dll中,因此需要将exe中的程序传递到dll,具体的底层原因,以后在分析加入

//dll中导出函数:
BOOL WINAPI FilterDllMsg(LPMSG lpMsg)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    TRY
    {
        return AfxGetThread()->PreTranslateMessage(lpMsg);
    }
    END_TRY
    return FALSE;
}

//如果是dll导出的非子对话框在exe的app中如下调用:

BOOL CScreenCapApp::PreTranslateMessage(MSG* pMsg)
{
    if (CWinApp::PreTranslateMessage(pMsg))
        return(TRUE);

    return(FilterDllMsg(pMsg));
}

// 如果dll导出的是子对话框,则需要在相应父对话框的PreTranslateMessage内调用,如下:
BOOL CYourDialog::PreTranslateMessage(MSG* pMsg)
{
    // 传递给子对话框的消息和传递给父对话框的消息是有交集的,因此注意某些消息需要只交给一方处理。
    // ? 不只为何先处理Prexxx,再调用Filter不行
    if (FilterDllMsg(pMsg))
        return(TRUE);

    return(CDialogEx::PreTranslateMessage(pMsg));
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值