如何获得对话框子窗口的句柄??用AfxGetMainWnd可以获得主窗口的句柄。
void ASEnumWnd::OnBUTTONEnumWnd()
{
m_WndListBox.ResetContent(); //一次清空
if (!::EnumWindows((WNDENUMPROC)enumProc, 0))
AfxMessageBox("Error");
Invalidate(true);
}
//枚举当前所有窗口并显示在ListBox中.
BOOL CALLBACK enumProc(HWND hwnd, LPARAM lParam)
{
if (hwnd == NULL)
return FALSE;
if (::IsWindow(hwnd) && ::IsWindowVisible(hwnd) )
{
TCHAR szCap[255] = {0};
::GetWindowText(hwnd, szCap, 255);
ASEnumWnd *pDlg = (ASEnumWnd*)::FindWindow(NULL, "程序列表");
//?????
pDlg->m_WndListBox.AddString(szCap);
}
return TRUE;
}
我本想通过这句获得该窗口的句柄,但是程序运行总是报错,直接就终止了。
ASEnumWnd *pDlg = (ASEnumWnd*)::FindWindow(NULL, "程序列表");
是否FindWindow这样转换后丢失了一些信息?
原来是用AfxGetMainWnd实现的,现在这个对话框是通过主窗口调用显示的,所以不能再用它了。
应该换成什么呢??
问题点数:50、回复次数:4Top
1 楼legendhui(秋天的叶子)回复于 2005-04-05 16:35:28 得分 40
FindWindow返回的是窗口句柄,你强制转换成指针了,应该
HWND hwnd;
hwnd = ::FindWindow(NULL, "程序列表");
CWnd *wnd = FromHandle(hwnd);
Top
2 楼psprite(小皮)回复于 2005-04-05 16:37:09 得分 10
不能直接用GetDlgItem吗?如果如果是捕捉当前工作区的窗口可以直接用GetDlgItem取得指定控件ID的窗口指针.
如果要根据条件捕获其他进程的窗口可以做以下操作
HWND g_hParantWnd = ::FindWindow(NULL, "程序列表");
HWND hWnd = ::FindWindowEx(g_hParantWnd, NULL, "AfxWnd42", NULL);
HWND hChild = ::GetDlgItem(hWnd,ID);//ID为窗口中指定控件ID,可以通过Spy++查找
CListBox x;
x.Attach(hChild);Top
3 楼angelcool(快乐需要创造)回复于 2005-04-05 16:47:03 得分 0
to legendhui(何离心之可同兮,吾将远逝以自疏)
抛错:
error C2065: 'FromHandle' : undeclared identifierTop
4 楼legendhui(秋天的叶子)回复于 2005-04-05 17:01:59 得分 0
使用全局函数试试::FromHandleTop




