怎样点击CEDIT框,使其获得输入焦点?

lrypower 2011-11-28 02:57:17
基于CDIALOG的主框,其下有个基于CDIALOG的子级对话框,我在上面编辑了三个CEDIT控件,通过设置焦点,setfocus,可以使其中一个控件在初始化时得到焦点,框里面有个光标在闪烁,但其它两个CEDIT控件怎么通过鼠标点击获得输入的焦点呢?我现在的情况是只能通过TAB键可以使其它两个CEDIT获得输入焦点。
...全文
320 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyps 2011-11-29
  • 打赏
  • 举报
回复
你再写一个同样的例子试试,花不了几分钟,我感觉也很奇怪,鼠标点击获得焦点可是系统默认的功能啊。
lrypower 2011-11-29
  • 打赏
  • 举报
回复
散分了,我已经找到问题的解决办法了,要么重载CDIALOG的消息分发函数,要么写一个类继续CEDIT就可以了
lrypower 2011-11-28
  • 打赏
  • 举报
回复
肯定不是这样的,可惜很少有人这样去试,我在网络上搜索不到答案了
[Quote=引用 23 楼 mi_123 的回复:]

好像是有个对应的获取焦点的消息,为这个消息添加响应函数就可以了,
Microsoft Visual Studio 2005中选中编辑框,右键属性,在控件事件中找到获取焦点的消息就可以了
[/Quote]
mi_123 2011-11-28
  • 打赏
  • 举报
回复
好像是有个对应的获取焦点的消息,为这个消息添加响应函数就可以了,
Microsoft Visual Studio 2005中选中编辑框,右键属性,在控件事件中找到获取焦点的消息就可以了
lrypower 2011-11-28
  • 打赏
  • 举报
回复
这个属性肯定不能去掉,我必须要的

[Quote=引用 20 楼 dahaii0 的回复:]

dialog frame把这个属性去掉
[/Quote]
dahaiI0 2011-11-28
  • 打赏
  • 举报
回复
如果你一定要有标题栏,边框的话可以用非模态模拟下(没试过,理论上应该可行)
dahaiI0 2011-11-28
  • 打赏
  • 举报
回复
dialog frame把这个属性去掉
lrypower 2011-11-28
  • 打赏
  • 举报
回复
在线等呀,各位大哥,有没有好点子啊?
lrypower 2011-11-28
  • 打赏
  • 举报
回复
看看我在#14楼说的,其实就是child和popup的问题,用popup就没有问题了,关键是我必须用child,对于child来说,SetWindowPos没有用的
lrypower 2011-11-28
  • 打赏
  • 举报
回复
大哥,我试了,不管用啊
[Quote=引用 16 楼 liujie250079934 的回复:]

mdialog->Create(IDD_DIALOG1);
mdialog->SetWindowPos(wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
mdialog->ShowWindow(SW_SHOW)
[/Quote]
liujie250079934 2011-11-28
  • 打赏
  • 举报
回复
mdialog->Create(IDD_DIALOG1);
mdialog->SetWindowPos(wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
mdialog->ShowWindow(SW_SHOW)
lrypower 2011-11-28
  • 打赏
  • 举报
回复
再贴出主框菜单的响应代码:
void CTestOpenDialogDlg::OnDialog()//菜单响应
{
// TODO: 在此添加命令处理程序代码
CTestChildDialog *mdialog=new CTestChildDialog();//创建子框
mdialog->Create(IDD_DIALOG1);
mdialog->ShowWindow(SW_SHOW)
}
lrypower 2011-11-28
  • 打赏
  • 举报
回复
刚才我再试了一下,我把子对话框的Style属性由Child改为Popup,鼠标就可以点,也有输入焦点,那么为什么变成Child的时候就没有呢,有没有了解的朋友,详细说一下应该如何才行?
lrypower 2011-11-28
  • 打赏
  • 举报
回复
求各位兄弟们再解释解释,到底会是什么原因啊
liujie250079934 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lrypower 的回复:]
不是模式对话框,子框是在主框里面移动的,不会跑到主框外面去,我也不用CREATE,我是基于对话框的程序,再添加一个DIALOG框,然后将这个DIALOG继承CDIALOG,将属性设为CHILD,这样设置好后,关联主框的菜单,直接SHOWWINDOW就可以看到了
[/Quote]
你这么整不对吧。。对话框只分为模式对话框和非模式对话框。。创建模式对话框用doModle(),创建非模式对话框用Create(),向您用的那种方法真没用过。。建议您用主流的方法吧。。用Create()创建成非模式对话框。。然后用我说的方法一步一步那么创建吧。。那样肯定没问题。。。。
lrypower 2011-11-28
  • 打赏
  • 举报
回复
不是模式对话框,子框是在主框里面移动的,不会跑到主框外面去,我也不用CREATE,我是基于对话框的程序,再添加一个DIALOG框,然后将这个DIALOG继承CDIALOG,将属性设为CHILD,这样设置好后,关联主框的菜单,直接SHOWWINDOW就可以看到了
liujie250079934 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lrypower 的回复:]
我在主框里建了一个菜单,显示就是通过菜单调用ShowWindow(SW_SHOW)
[/Quote]
不对吧。。你创建的是模式对话框么,如果不是模式对话框的话得 先CREATE然后用SetWindowPos设置下位置 最后才是ShowWindow(SW_SHOW)啊
lrypower 2011-11-28
  • 打赏
  • 举报
回复
我在主框里建了一个菜单,显示就是通过菜单调用ShowWindow(SW_SHOW)
liujie250079934 2011-11-28
  • 打赏
  • 举报
回复
你的子对话框是怎么显示的 使用SetWindowPos么 如是是的话改用
wndTop 将窗口放在Z轴次序的顶部。 试试。。
lrypower 2011-11-28
  • 打赏
  • 举报
回复
没有动态创建,我就在是DIALOG框里面画了三个CEDIT控件,然后关联了三个CEDIT类型的变量,都是用向导的,因为是子框,创建时没有OnInitDialog(),我重载了它,接着在里面初始化变量,部分代码如下 :
void CTestChildDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, number1);
DDX_Control(pDX, IDC_EDIT2, number2);
DDX_Control(pDX, IDC_EDIT3, sum);
}

BOOL CTestChildDialog::OnInitDialog()
{
CDialog::OnInitDialog();

CWnd *pCWnd=(CWnd*)GetDlgItem(IDC_EDIT1);
pCWnd->SetWindowText(_T("0"));

pCWnd=(CWnd*)GetDlgItem(IDC_EDIT2);
pCWnd->SetWindowText(_T("0"));

pCWnd=(CWnd*)GetDlgItem(IDC_EDIT3);
pCWnd->SetWindowText(_T("0"));
return TRUE;
}
加载更多回复(6)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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