为什么CTreeCtrl DeleteItem会在没有错误的情况下失败?

时间:2014-06-05 19:44:35

标签: windows winapi mfc

Windows 7 VS 2012,C ++

我正在调试一个庞大的程序(因此无法跟踪所有可能的路径)。在战略位置放置一些断言后,我得到MFC DeleteItem()失败(返回0)但没有错误(GetLastError()== 0)。

这不是我正在调试的问题,但我希望从这个错误中获取线索,了解下一步的位置。没有任何错误,网络上没有任何内容(包括MSDN)唯一的线索(可能是错误的)是它传递了错误的HTREEITEM值,但为什么没有错误?

1 个答案:

答案 0 :(得分:2)

GetLastError()的返回值仅在文档告诉您它时才有意义,通常在"返回值"部分。

在这种情况下,它不适用。 CTreeCtrl::DeleteItem method如果失败则返回FALSE(0),如果成功则返回非零。它只是返回TVM_DELETEITEM message的结果,框架将代表您发送到TreeView控件。

您需要调试 删除项目失败的原因。就像你在问题中提到的那样,最可能的解释是指定的HTREEITEM句柄无效。调试这不应该是困难的。在调用DeleteItem时在代码中设置断点,然后运行程序并模拟错误。当执行到达DeleteItem的调用时,调试器将会中断并且您可以调查您要传入的HTREEITEM的值。您还可以将值更改为已知的值是有效的,比如NULL(删除TreeView中的所有项目),只是为了确保您正确地确定了罪魁祸首。