如何得到显示界面上所有的窗口?

easthg 2003-08-30 04:42:09
如何得到显示界面上所有的窗口?
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
easthg 2003-09-02
  • 打赏
  • 举报
回复
怎么解释由得到的窗口句柄调用 ::GetWindowRect(hwnd,&rect) 时坐标会出现负的情况?
bager 2003-09-02
  • 打赏
  • 举报
回复
1、声明保存窗体句柄、窗体标题的CList类型的变量

#include <afxtempl.h>
CList<HWND,HWND&> g_listWndHandle;
CList<CString ,CString&> g_strWndTitle;

2、调用EnumWindows函数
EnumWindows(EnumWindowsProc,NULL);

3、构造如下的回调函数

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
char buf[1024];
if(GetWindowText(hwnd,buf,sizeof(buf)))
{
if(::IsWindowVisible(hwnd))
{
g_strWndTitle.AddTail(CString(buf));
g_listWndHandle.AddTail(hwnd);
}
}
return TRUE;
}
vcforever 2003-08-31
  • 打赏
  • 举报
回复
EnumWindows()枚举所有窗口
EnumChildWindows()枚举所有子窗口!
IThurricane 2003-08-31
  • 打赏
  • 举报
回复
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);
然后写一个
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);
过程

例子,
EnumWindows(EnumWindowsProc,(LPARAM)&this->m_WndList);

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
DWORD pid=o;
CHAR *pctrl=(CListBox *)lParam;
if(GetWindowText(hwnd,buf,sizeof(buf)) //判断窗口是否可见
{
if(::IsWindowVisible(hwnd)
{
pctrl->InsertString(g_nEnum,buf); //向列表中添加一项
::g_hWnd[::g_nEnum] = hwnd; //保存
::g_nEnum++;
}
}
return true;
}
easthg 2003-08-31
  • 打赏
  • 举报
回复
具体点好吗?
我曾试着窗口矩形,可有很多left:0, top:0,right:0,bottom:0
这是怎么会事情?
warmchang 2003-08-31
  • 打赏
  • 举报
回复
EnumWindows()和EnumChildWindows()。
tongxilai 2003-08-30
  • 打赏
  • 举报
回复
EnumChildWindow
easthg 2003-08-30
  • 打赏
  • 举报
回复
up
bcpl 2003-08-30
  • 打赏
  • 举报
回复
EnumWindows

15,979

社区成员

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

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