如何继承 Windows 公共控件?

How to subclass Windows Common Controls?

我有问题。 我像这样子类化我的 TreeView:

SetWindowSubclass(hTV, SubClassProc, 0, 0);

其中 hTv - CreateWindowEx 生成的 WC_TREEVIEW window 句柄。 这是我的 SubClassProc:

LRESULT CALLBACK    SubClassProc(HWND hWnd, UINT uMsg, WPARAM wParam,
                                 LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData)
{
    switch (uMsg)
    {
    case TVM_EXPAND:
        // This line of code is never executed
        MessageBox(NULL, _T("I'm expanded"), _T("TreeView"), MB_ICONINFORMATION);
        break;
    case WM_NCDESTROY:
        RemoveWindowSubclass(hWnd, SubClassProc, uIdSubclass);
        break;
    }

    return DefSubclassProc(hWnd, uMsg, wParam, lParam);
}

为什么我无法处理 TVM_EXPAND 消息?我的代码有什么问题?

我上传了我的项目here

这在 window 主程序中处理。在这种情况下不需要子类。

检查 TVN_ITEMEXPANDED,这是展开项目时收到的通知。如果您想扩展该项目,请发送 TVM_EXPAND 消息。

另请参阅:
- TreeView send Messages(示例:TVM_EXPAND
- TreeView receive Notifications(示例:TVN_ITEMEXPANDED

BOOL CALLBACK mainProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lParam)
{
    switch (msg)
    {

    case WM_NOTIFY:
    {
        LPNMHDR hdr = (LPNMHDR)lParam;
        if (hdr->hwndFrom == hWndTree && hdr->code == TVN_ITEMEXPANDED)
        {
            MessageBox(hwnd, _T("I'm expanded"), _T("TreeView"), MB_ICONINFORMATION);
            break;
        }
        break;
    }
    ...    
}