如何获取对话框中第二个edit框???

forever_zjr 2008-07-31 03:41:26
先用vc生成一Dlg对话框,在上边添加3个edit控件。

再起一个程序,添加一按钮,按钮事件中通过FindWindow与FindWindowEx函数获取到窗口句柄,并且可以通过SendMessage向第一个Edit控件内发送一字符串,现在我想问下,如何向第二个Edit控件内发信息?

能给举例说明吗?

问题二,spy++是否有枚举功能?如果有,如何设置?
...全文
129 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rollrock1987 2008-08-01
  • 打赏
  • 举报
回复
这样你看行不行:
用findwindow 不是可以找到父对话框吗?? 再用FindWindowEx找到第二个edit啊 你找到的第一个edit的句柄作为FindWindowEx 的参数 这样不就可以了吗??
forever_zjr 2008-08-01
  • 打赏
  • 举报
回复
按照你的例子,稍微修改了下,确实可以向控件内写数据了,多谢各位的帮助,散分结帖
tuye14 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tuye14 的回复:]
补充一下,通过方法
GetNextWindow(hwndChild,GW_HWNDNEXT)

何以获得下一个控件,你通过SPY++是可以看到先一个下一个控件属性的
[/Quote]

不是控件属性,是控件句柄
tuye14 2008-08-01
  • 打赏
  • 举报
回复
补充一下,通过方法
GetNextWindow(hwndChild,GW_HWNDNEXT)

何以获得下一个控件,你通过SPY++是可以看到先一个下一个控件属性的
tuye14 2008-08-01
  • 打赏
  • 举报
回复
嘻嘻~前些日子刚刚研究过,跟你分享一下

//首先写一个回调,用于获得窗体中的控件
BOOL CALLBACK EnumChildProc(HWND hwndChild,LPARAM lParam)
{
TCHAR szClassName[1024]; //ClassName 用于通过句柄获得类名称
GetClassName(hwndChild,szClassName,1024); //GetClassName方法,用于通过句柄获得ClassName
CString str = CString(szClassName); //这个不用说了,就是把TCHART转化成CString,我不知道怎么比较TCHAR,有点笨,所以干脆转化成CString

if (str == "Edit") //找到Edit控件,可能在其他程序中应用的话,不是Edit,这个类名称可以在spy++中查到(还真是不错的工具)
{
//由于需要查找的窗体上有两个Edit,为了区分,我写了这个判断,正好我需要填写的那个Edit是没有下一个空间的向,所以我就直接判断下一个控件为空,如果在其他地方应用,还要灵活处理。
if (GetNextWindow(hwndChild,GW_HWNDNEXT) == NULL)
{
//发送WM_SETTEXT消息,将值填入Edit
SendMessage(hwndChild,WM_SETTEXT, 0,(LPARAM)("user"));
}

}

return TRUE;
}

//这个是我写的一个窗体的按钮事件函数
void COpeaWindowDlg::OnGetWindow()
{
//首先使用FindWindow方法获得窗体,前面说过了,A是类名称,B是title
CWnd* STWnd =FindWindow(A,B);
HWND hStWnd = STWnd->m_hWnd;

//枚举获得子控件,hStWnd是上面获得窗体,EnumChildProc是定义的回调函数(貌似这里很类似函数指针,我是这么理解的),第三个参数我也不知道是什么,就随便写了个NULL
EnumChildWindows(hStWnd,EnumChildProc,NULL);
UpdateData(TRUE);//更新资源,嘻嘻
}


我这个做的是想对话通过句柄想对话框中的Edit填值,希望对你有帮助
用户 昵称 2008-08-01
  • 打赏
  • 举报
回复
EnumChildWindows
forever_zjr 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rollrock1987 的回复:]
这样你看行不行:
用findwindow 不是可以找到父对话框吗?? 再用FindWindowEx找到第二个edit啊 你找到的第一个edit的句柄作为FindWindowEx 的参数 这样不就可以了吗??
[/Quote]

感谢你们的回复

我试过,当findwindowex(hwnd,hedit,“edit”,null)时,返回是0,并未返回窗口句柄

还有个比较奇怪的问题,有的时候用vc直接创建出来的摸态对话框,不能直接找到里边的edit控件
forever_zjr 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 nowitzki520 的回复:]
引用 3 楼 Sandrer 的回复:
既然对话框是你自己做的
那么你应该知道它们的ID
直接用GetDlgItem()来获得不就行了

同意
[/Quote]

昨天这条信息怎么也回不了。今天来回

我是先创建了个对话框,然后在上边添加了几个edit控件后运行

再创建个对话框程序,添加一个按钮并触发事件,想象指定的程序内控件发信息。getdlgitem函数需要控件的id号

但是编辑过的程序,id号就变了

所以无法通过getdlgitem来准确的指定那个控件啊
cxf7394373 2008-07-31
  • 打赏
  • 举报
回复
GetDlgItem()
nowitzki520 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Sandrer 的回复:]
既然对话框是你自己做的
那么你应该知道它们的ID
直接用GetDlgItem()来获得不就行了
[/Quote]
同意
forever_zjr 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 stivenjia 的回复:]
既然你想枚举窗体当然是EnumWindows
[/Quote]

这个函数在MFC中还不是太会用,可以给个简单的例子吗?
forever_zjr 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
有EnumChildWindows 这个
可以枚举出来。
[/Quote]

可以给出个简单的例子吗?
forever_zjr 2008-07-31
  • 打赏
  • 举报
回复
可以给个简单的例子吗?
Sandrer 2008-07-31
  • 打赏
  • 举报
回复
既然对话框是你自己做的
那么你应该知道它们的ID
直接用GetDlgItem()来获得不就行了
stivenjia 2008-07-31
  • 打赏
  • 举报
回复
既然你想枚举窗体当然是EnumWindows
  • 打赏
  • 举报
回复
有EnumChildWindows 这个
可以枚举出来。

16,472

社区成员

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

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

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