CEdit无法获得焦点,输入文字问题。

yhgfriend 2014-09-09 06:25:20
问题描述
IDD_DIALOG1窗体的Style为 Child
窗体上放置二个Edit控件,运行时二个文本框均无法获得焦点,输入文字。
但后来发现把窗体的Style改为 Overlapped 后二个文本框就正常了。
为什么Child不行呢?我该如何解决这个问题呢?

窗体设计


运行时窗体显示


窗体由Child改为Overlapped 后,文本框就能获得焦点输入文字了
...全文
406 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2014-09-15
  • 打赏
  • 举报
回复
问题在于 子对话框 不能有 标题栏。 你可以在子对话框中 用 static 模拟一个 标题栏。
yhgfriend 2014-09-15
  • 打赏
  • 举报
回复
我新建了一个测试工程,就是测试CDialog做主程序界面的子窗口,发现问题还是一样的,子窗口同样无法获得焦点。
见下图的Dialog里的二个CEDIT无法输入,甚至连子窗口都无法获得焦点,因为点击子窗口,子窗口的标题栏颜色不会变深

schlafenhamster 2014-09-15
  • 打赏
  • 举报
回复
笨笨仔 2014-09-15
  • 打赏
  • 举报
回复
你的MFC程序感觉用“单文档”做比较方便,使用对话框做是自找麻烦
schlafenhamster 2014-09-15
  • 打赏
  • 举报
回复
主对话框的高度, 减小到 实际 高度 。
yhgfriend 2014-09-15
  • 打赏
  • 举报
回复
引用 7 楼 schlafenhamster 的回复:
看看你 子窗口 如何创建?
#8楼贴出了我的创建窗口的代码,我在想是不是CDialog不能作为另一CDialog的子窗口呢?
yhgfriend 2014-09-15
  • 打赏
  • 举报
回复
创建后运行效果见#5楼 创建其它三个子窗口的代码如下,三个子窗口的父窗口均为CSpeedMonitorDlg(程序主窗口) BOOL CSpeedMonitorDlg::OnInitDialog() { //创建右侧窗口(窗口名称:单个机房状态与设置) CRect rt; GetClientRect(rt);rt.top+=SysDlgRect.top; pMainDlg=Monitor0 = new SingleMonitor(); Monitor0->Create(IDD_DIALOG1,this); Monitor0->SetWindowPos(&wndTop,SysDlgRect.left,rt.top,rt.Width()-SysDlgRect.left,rt.Height()-SysDlgRect.bottom,SWP_SHOWWINDOW); //创建左侧窗口(窗口名称 分类显示) SortDlg.Create(IDD_DIALOG2,this); SortDlg.SetWindowPos(&wndTop,0,rt.top,SysDlgRect.left,rt.Height()-SysDlgRect.bottom,SWP_SHOWWINDOW); //创建底部窗口(窗口名称 Dialog) MessageWindow.Create(IDD_DIALOG_MSG,this); MessageWindow.SetWindowPos(&wndTop,0,rt.bottom-SysDlgRect.bottom,rt.Width(),rt.Width()-SysDlgRect.bottom,SWP_SHOWWINDOW); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
schlafenhamster 2014-09-15
  • 打赏
  • 举报
回复
看看你 子窗口 如何创建?
yhgfriend 2014-09-15
  • 打赏
  • 举报
回复
我觉得是不是CDialog不能作为另一CDialog的子窗口呢?
yhgfriend 2014-09-15
  • 打赏
  • 举报
回复
引用 14 楼 schlafenhamster 的回复:
问题在于 子对话框 不能有 标题栏。 你可以在子对话框中 用 static 模拟一个 标题栏。
static拟一个 标题栏应该是一个不错的方法,因为由基于对话模型改成单文档、多文档估计改动不小,还是在现在基础上少改动为妙。
yhgfriend 2014-09-14
  • 打赏
  • 举报
回复
每日一顶,有新的发现,只有主界面上放置的EDIT控件能获得焦点,能正常输入。
程序主页面的子窗口上放置的文本框控件均无法获得焦点
schlafenhamster 2014-09-11
  • 打赏
  • 举报
回复
子窗口要有 父窗口才行。 GetDeskTopWindow SetParent
yhgfriend 2014-09-11
  • 打赏
  • 举报
回复
还是没找到原因,我都打算改成overlapped窗口算了,只是移动窗口缩放窗口时比较麻烦,不像子窗口一样可以跟着动
yhgfriend 2014-09-09
  • 打赏
  • 举报
回复
在网上搜了一下,还有不少的网友同样也有 Child窗体 CEdit 无法获得焦点的问题 下面也有一个解决方法,就是给窗体加上DS_CONTROL属性,我试过是可以获得焦点了,但是窗体的标题栏却没有了 http://www.myexception.cn/vc-mfc/1598167.html 原文如下: MFC对话框style设置为child时,为什么edit控件就不能获得焦点,也不能改变值了 1.MFC对话框style设置为child时,edit控件就不能获得焦点,也不能输入值,这个对话框是在tabcontrol控件切换时显示的。 如果style改为popup时,edit就可以输入。 2.我在tabcontrol控件第一个tab显示的对话框中有一个按钮,怎么实现点击对话框中的按钮,可以使tabcontrol的焦点转换为第二个 ------解决方案-------------------- 对话框设置DS_CONTROL属性,同时也给CTabCtrl加入了WS_EX_CONTROLPARENT属性试试 按上面方法我试过是可以获得焦点了,但是窗体的标题栏却没有了

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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