作者:迷人的哈喽柯柯_458 | 来源:互联网 | 2023-05-19 06:51
我在用VB写一个东西,有几个问题,一起说了吧,各位VC大虾请不吝赐教:1.现在获得了某个窗口的Hwnd,试图通过GetNextDlgTabItem获得所有子窗口控件,但发现如static等co
我在用VB写一个东西,有几个问题,一起说了吧,各位VC大虾请不吝赐教:
1.现在获得了某个窗口的Hwnd,试图通过GetNextDlgTabItem获得所有子窗口控件,但发现如static等control的内容不能获得。
2.如何获得某个子窗口的class名称。
3.到底有什么方法能够实现把所有某窗口的子窗口全部列出来的?
希望您告诉我win32api函数,而不是mfc的函数。
5 个解决方案
1.用Win32 API函数h=GetWindow(Hwnd,GW_CHILD)
结合GetNextWindow(A,GW_HWNDNEXT) //A位GetWindow()函数的返回值
2.不是所有的Window都有句柄(Handle)的.
具体语法请看WIN32联机帮助。
sorry,写错了,我是说不是所有的控件都有窗口句柄的
1.static control没有窗口句柄,应该是通过vb的方法吧?不太清楚
2.getclassname可以获得窗口的类名
3.findwindowex边历后可以获得所有的子窗口
都是win32api
HWND GetDlgItem(
HWND hDlg, // handle of dialog box
int nIDDlgItem // identifier of control
);
用下面的函数创建枚举某一窗口子窗口听回调:
BOOL EnumChildWindows(
HWND hWndParent, // handle to parent window
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);
可以在VB中写好函数后,用ADDRESSOF把这个函数指针传给ENUMCHILDWINDOWS中的LPENUMFUNC来实现。当然获得窗口的句柄后,再对这个窗口如何操作,就看需要了。
比如:
int GetClassName(
HWND hWnd, // handle of window
LPTSTR lpClassName, // address of buffer for class name
int nMaxCount // size of buffer, in characters
);
DWORD SetClassLong(
HWND hWnd, // handle of window
int nIndex, // index of value to change
LONG dwNewLong // new value
);等等。