CEdit不能获取焦点

幻夢之葉 2018-01-11 08:41:37
我继承了一个对话框类,并且关联了一个对话框资源,里面包含按钮,组合框和编辑框
在这个对话框类中重写PreSubclassWindow(),包含如下代码

if (m_bChild)
{
ModifyStyle(WS_POPUP | WS_OVERLAPPED, WS_CHILD);
}
else
{
ModifyStyle(WS_CHILD | WS_OVERLAPPED, WS_POPUP);
}

CDialogEx::PreSubclassWindow();


当作为WS_POPUP弹窗可以正常在CEdit中输出数据(焦点可用)
当在另外一个对话框中把它作为子对话框嵌入,则CEdit根本获取不到点击后的焦点,其他控件均可用并且正常。
     //父对话框中的OnInitDialog代码
CDialogEx::OnInitDialog();

if (m_wndMopt.Create(this))
{
m_wndMopt.ModifyStyle(WS_CAPTION | WS_POPUP | WS_SYSMENU | DS_MODALFRAME, NULL);
m_wndMopt.ModifyStyleEx(WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE, NULL, NULL);
::SetWindowPos(m_wndMopt.GetSafeHwnd(), nullptr, 0, 0, 0, 0, SWP_NOSIZE);
m_wndMopt.ShowWindow(SW_NORMAL);
}

return TRUE;

所有的对话框都是继承自:CDialogEx
是什么原因?或者可能是什么原因造成的?
...全文
238 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2018-01-11
  • 打赏
  • 举报
回复
幻夢之葉 2018-01-11
  • 打赏
  • 举报
回复
确实是窗口风格设置的问题
https://www.codeproject.com/Articles/5302/A-class-for-child-dialogs
子对话框编辑框可用的必要条件
Style: Child
Border: None
More styles: Visible and Control must be ticked

并且不能再创建之后再修改,而是创建之前。

对于我的问题,我的解决方法是,在继承的对话框的重载函数PreSubclassWindow()中

if (m_bChild)
{
// ModifyStyle(WS_POPUP | WS_OVERLAPPED, WS_CHILD);
// 增加DS_CONTROL对话框风格,并且去除标题栏和边框WS_CAPTION | DS_MODALFRAME
ModifyStyle(WS_POPUP | WS_OVERLAPPED | WS_CAPTION | DS_MODALFRAME, WS_CHILD | DS_CONTROL);
}
else
{
ModifyStyle(WS_CHILD | WS_OVERLAPPED, WS_POPUP);
}

CDialogEx::PreSubclassWindow();

64,665

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧