EnumChildWindows返回LParam的问题.

三断笛 2012-11-20 12:05:28
我用EnumChildWindows遍历一个窗口的句柄,并用用它最后一个参数LParam返回我想要的句柄.
我在EnumChildProc中,当取得我想要的窗口时,我将句柄赋值给它的Lparam参数,并且返回,中止遍历.

代码在Win7下运行正常,EnumChildWindows的Lparam返回了我想要的句柄,完全正常.

但是我切换到XP下测试,发现EnumChildWindows最后一个参数返回的总是0.
而我在EnumChildProc中输出了句柄,是正确的,但就是无法在EnumChildWindows中返回,很奇怪啊.
能帮忙解释一下是怎么回事么?
...全文
318 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2012-12-05
  • 打赏
  • 举报
回复
你用个全局的变量保存该HWND窗口句柄不行吗?
bsnry 2012-12-05
  • 打赏
  • 举报
回复
提供一个昨天用的例子: ::EnumWindows(&EnumWindowsProc, processInfo.dwThreadId); int CALLBACK EnumWindowsProc(HWND hwnd, LPARAM param) { DWORD pID; DWORD TpID = GetWindowThreadProcessId(hwnd, &pID); if (TpID == (DWORD)param) { apphwnd=hwnd; return false; } return true; } http://www.codeproject.com/Articles/18724/Hosting-exe-applications-into-a-dialog
gfm688 2012-12-05
  • 打赏
  • 举报
回复
引用 7 楼 xxyj6450 的回复:
兄弟,你在XP下运行能得到正确的结果吗?我在WIN7下这代码确实行,但到XP就不行了..
我就只在XP下运行过,结果是正确的
三断笛 2012-12-05
  • 打赏
  • 举报
回复
引用 8 楼 gfm688 的回复:
引用 7 楼 xxyj6450 的回复:兄弟,你在XP下运行能得到正确的结果吗?我在WIN7下这代码确实行,但到XP就不行了.. 我就只在XP下运行过,结果是正确的
难道是我的XP版本问题? 我再多测试测试.
三断笛 2012-12-05
  • 打赏
  • 举报
回复
引用 10 楼 VisualEleven 的回复:
你用个全局的变量保存该HWND窗口句柄不行吗?
可以啊,但不优雅
「已注销」 2012-12-04
  • 打赏
  • 举报
回复
给 lParam 传入一个 HWND 的指针吧
三断笛 2012-12-04
  • 打赏
  • 举报
回复
引用 6 楼 gfm688 的回复:
C/C++ code?1234567891011121314BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam){ if (取得你想要的窗口) { *(HWND *)lParam = hwnd; return FALSE; } return TRUE;} HWND hWnd;EnumChi……
兄弟,你在XP下运行能得到正确的结果吗?我在WIN7下这代码确实行,但到XP就不行了..
gfm688 2012-12-04
  • 打赏
  • 举报
回复
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
  if (取得你想要的窗口)
  {
	  *(HWND *)lParam = hwnd;
	  return FALSE;
  }
  return TRUE;
}


HWND hWnd;
EnumChildWindows(hWndParent, EnumChildProc, (LPARAM)&hWnd);
//此时hWnd就是你想要的窗口的句柄
三断笛 2012-11-20
  • 打赏
  • 举报
回复
引用 3 楼 tiger9991 的回复:
Lparam是回调函数EnumChildProc的入参,MSDN写的很清楚了。楼主用法不正确 Parameters hWndParent [in] Handle to the parent window whose child windows are to be enumerated. If this parameter is NULL, this fu……
我在WIN7下运行正常...只是XP不正常哎.
傻X 2012-11-20
  • 打赏
  • 举报
回复
Lparam是回调函数EnumChildProc的入参,MSDN写的很清楚了。楼主用法不正确 Parameters hWndParent [in] Handle to the parent window whose child windows are to be enumerated. If this parameter is NULL, this function is equivalent to EnumWindows. Windows 95/98/Me: hWndParent cannot be NULL. lpEnumFunc [in] Pointer to an application-defined callback function. For more information, see EnumChildProc. lParam [in] Specifies an application-defined value to be passed to the callback function. Return Value
三断笛 2012-11-20
  • 打赏
  • 举报
回复
引用 1 楼 fenshucangku 的回复:
你这个用法有问题 LPARAM是让你用来传入的参数,是[in] 而你把他当成了传出的参数,成了[out]
可是我在win7下运行正常呢 我猜想是user32.dll版本的问题,所以把win7的user32.dll复制到我程序目录下,但仍然没有效果.
fenshucangku 2012-11-20
  • 打赏
  • 举报
回复
你这个用法有问题 LPARAM是让你用来传入的参数,是[in] 而你把他当成了传出的参数,成了[out]

15,979

社区成员

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

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