请教大家这一段C++代码是什么意思?(看好久没看懂)
本帖最后由 wsfxzxb 于 2013-11-26 21:40:40 编辑
// 获得指定窗口的类名和标题
void CalcWndText(HWND hwnd, PTSTR szBuf, int nLen)
{
TCHAR szClass[50], szCaption[50], szBufT[150];
if (hwnd == (HWND) NULL)
{
_tcscpy(szBuf, TEXT("(无窗口)"));
return;
}
/* 确定给定的窗口句柄是否标识一个已存在的窗口
BOOL IsWindow( HWND hWnd); */
if (!IsWindow(hwnd))
{
_tcscpy(szBuf, TEXT("(无效窗口)"));
return;
}
// 获得窗口类名和标题
GetClassName(hwnd, szClass, _countof(szClass));
GetWindowText(hwnd, szCaption, _countof(szCaption));
wsprintf(szBufT, TEXT("[%s] %s"), (PTSTR) szClass,
(*szCaption == 0) ? (PTSTR) TEXT("(无标题)") : (PTSTR) szCaption);
/* #define _tcsncpy 宏此处定义为 wcsncpy(仅 C++)
wchar_t *wcsncpy( wchar_t (&strDest)[size], strDest 为目标字符串
const wchar_t* strSource, strSource 为源字符串
size_t count ); count 为要复制的字符数
返回值:返回 strDest,否则显示一个错误 */
_tcsncpy(szBuf, szBufT, nLen - 1);
szBuf[nLen - 1] = 0; // 以 0 终止的字符串
}
///////////////////////////////////////////////////////////////////////////////
// 为了最小化堆栈使用,创建了一个 WALKWINDOWTREEDATA 对象,它用来作为
// WalkWindowTree() 中的局部变量和传递给 WalkWindowTreeRecurse 的指针
// WalkWindowTreeRecurse 使用的数据
typedef struct
{
HWND hwndLB; // 输出列表框的句柄
HWND hwndParent; // 父窗口句柄
int nLevel; // 嵌套深度(树形结构最大层次)
int nIndex; // 列表框项目索引
TCHAR szBuf[100]; // 输出缓冲区
int iBuf; // szBuf 字符缓冲区内的索引
} WALKWINDOWTREEDATA, *PWALKWINDOWTREEDATA;
// 递归遍历窗口树状结构(没看懂)
void WalkWindowTreeRecurse(PWALKWINDOWTREEDATA pWWT)
{
if (!IsWindow(pWWT->hwndParent))
return;
// 每递归一次,增加 2 个字符缓冲区空间
pWWT->nLevel++;
const int nIndexAmount = 2;
// 清空指定长度的缓冲区
for (pWWT->iBuf = 0; pWWT->iBuf < pWWT->nLevel * nIndexAmount; pWWT->iBuf++)
pWWT->szBuf[pWWT->iBuf] = TEXT(' ');
/* 参数二:清空的数组
这个参数看不懂,应该用清空数组长度 iBuf 吧
参数三:剩余缓冲区长度 = 总szBuf长度 - 清空(数组)长度 */
CalcWndText(pWWT->hwndParent, &pWWT->szBuf[pWWT->iBuf],
_countof(pWWT->szBuf) - pWWT->iBuf);
pWWT->nIndex = ListBox_AddString(pWWT->hwndLB, pWWT->szBuf);
ListBox_SetItemData(pWWT->hwndLB, pWWT->nIndex, pWWT->hwndParent);
HWND hwndChild = GetFirstChild(pWWT->hwndParent);
while (hwndChild != NULL)
{
pWWT->hwndParent = hwndChild;
WalkWindowTreeRecurse(pWWT);
hwndChild = GetNextSibling(hwndChild);
}
pWWT->nLevel--;
}
看了几遍,有个地方(已经在代码中指出)着实没看懂,请大神指教。
[解决办法]
输出结果的效果如下:
第三个参数仅仅是计算出除去前缀空格之后的缓存剩余空间的大小.
A1
B2
C2
D3
E3
D2
A2
E2
[解决办法]
考试题吗?
请输入一个长度至少为6的字符串