1

さて、私は ListView を持っていて、Callback プロシージャを手動で設定する方法を考え出しました:

// Sets the list view procedure
listproc = (D_ListView *) LocalAlloc(LMEM_FIXED, sizeof(D_ListView));
               listproc->oldproc = (WNDPROC)SetWindowLongPtr(g_hList, GWL_WNDPROC, (LONG)&ListViewProc);
               SetWindowLongPtr(g_hList, GWL_USERDATA, (LONG)&listproc);

私が見つけたコード例を使用しました -と呼ばれる変数を持つD_ListViewだけです。structWNDPROColdproc

とにかく、アイテムを追加するために ListView にメッセージを送信しています。しかし、私は ADD メッセージを手動で処理したくありません。それらを ListView のデフォルト プロシージャに渡し、機能をオーバーライドする必要があるメッセージのみを処理したいと考えています。

LRESULT CALLBACK ListViewProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        // Just a test - we're getting this message so it worked
        case LVM_INSERTCOLUMN:
        {
            cout << "CREATED" << endl;

        }    
    }
    WNDPROC* wp;
    wp = (WNDPROC*)(::GetWindowLongPtr(hwnd, GWL_WNDPROC));
    return ::CallWindowProc(*wp, hwnd, msg, wParam, lParam);   
}

上記では、LVM_INSERTCOLUMN を処理したくありません。ただ渡したいだけです。

誰でも助けることができますか?

ありがとう、ロブ

4

1 に答える 1

0

getWindowLongPtr (...GWL_USERDATA)インスタンスへのポインタを取得し、D_ListView不要なメッセージをに転送するために使用しますoldproc

::CallWindowProc(*listproc->oldproc, hwnd, msg, wParam, lParam);

于 2012-11-26T10:59:36.767 に答える