FindWindow( NULL, sTitle ) 的问题 ?

clwk 2008-06-04 05:24:24
我写了一个dlgA,然后setwindowtext(sTitle );
通过另外一个程序B来运行这个dlg,在B之中用FindWindow( NULL, sTitle )来找到dlgA,但是却找不到,
hWnd = ::FindWindow( NULL, sTitle );
hWnd为空,很奇怪;
如果我在dlgA 之中setwindowtext(sTitle );之后添加一个messagebox("");
B就可以找到,hWnd就不为空;

请教一下,高人给指点指点!
...全文
225 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jose2gether4ever 2008-06-05
  • 打赏
  • 举报
回复
CWaveDlg *wDlg=(CWaveDlg *)FindWindow(NULL,"实时波形");

CWaveDlg是我的一个对话框类,如此得到它的指针,便可找到此对话框。

其中这个对话框一定不是child dialog,FindWindow中的两个参数,前面那个表示类的名称的总是不能用,只能用后面的那个对话框名称的参数。
clwk 2008-06-05
  • 打赏
  • 举报
回复
hWnd = ::FindWindowEx( NULL, NULL, NULL, sTitle );
用这个也找不到,太奇怪了。
clwk 2008-06-05
  • 打赏
  • 举报
回复
我在lgA里面,setwindowtext(sTitle )后已经添加了SetWindowPos( &wndTopMost, x, y, cx, cy, SWP_SHOWWINDOW );但是,还是不行,我的应用程序仍然找不到他。
雪影 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 clwk 的回复:]
hWnd = ::FindWindowEx( NULL, NULL, NULL, sTitle );
用这个也找不到,太奇怪了。
[/Quote]
第一个参数为空的话,那么只能查找桌面的窗口,
这个参数应该设置为对话框的父窗口句柄
clwk2000 2008-06-05
  • 打赏
  • 举报
回复
可以通过记录下出口句柄的方式,在主程序之中读取句柄值,然后通过发消息关掉对应句柄就可以了。
这样就可以回避这个问题,又能实现此功能了。
clwk 2008-06-05
  • 打赏
  • 举报
回复
无人回复,准备结贴
clwk 2008-06-05
  • 打赏
  • 举报
回复
你这个和我的问题是两回事。
season030441 2008-06-04
  • 打赏
  • 举报
回复
非模式对话框是能够找到的!模式的没试过。
雪影 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tttyd 的回复:]
The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.

FindWindow函数只能查找顶层(top-level)的窗口,不包含子窗口
添加messagebox(""); 后dlgA就在顶层了,所以能查找到。

可以在setwindowtext(sTitle )后使用SetWindowPo…
[/Quote]
另外查找非顶层的窗口或子窗口可以使用函数FindWindowEx
雪影 2008-06-04
  • 打赏
  • 举报
回复
The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.

FindWindow函数只能查找顶层(top-level)的窗口,不包含子窗口
添加messagebox(""); 后dlgA就在顶层了,所以能查找到。

可以在setwindowtext(sTitle )后使用SetWindowPos等相关函数将其设置为顶层就可以使用FindWindow 了。
cnzdgs 2008-06-04
  • 打赏
  • 举报
回复
dlgA在SetWindowText之后执行什么?
凤矶 2008-06-04
  • 打赏
  • 举报
回复
UpdateWindow() 试下
clwk2000 2008-06-04
  • 打赏
  • 举报
回复
...
clwk 2008-06-04
  • 打赏
  • 举报
回复
很急。
clwk 2008-06-04
  • 打赏
  • 举报
回复
因为我需要找到dlgA ,并在某时关闭它。所以一定要找到。
而且,我有时需要同时运行几个dlgA.

15,979

社区成员

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

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