さて、私は 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
だけです。struct
WNDPROC
oldproc
とにかく、アイテムを追加するために 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 を処理したくありません。ただ渡したいだけです。
誰でも助けることができますか?
ありがとう、ロブ