__V>ListView расположен на диалоговом окне, перехват нажатия конопок типа SPACE и т.п. — нормально... но вот как перехватить нажатие Ентера??
Я делаю это так.
LRESULT CALLBACK MyControlProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
WNDPROC oldwndproc=(WNDPROC)GetProp(hWnd,TEXT("NATIVEPROC"));
if(msg==WM_NCDESTROY) RemoveProp(hWnd,TEXT("NATIVEPROC"));
LRESULT res=CallWindowProc(oldwndproc,hWnd, msg,wParam,lParam);
if(msg==WM_GETDLGCODE)
{
if(lParam&&(((LPMSG)lParam)->message==WM_KEYDOWN)&&(((LPMSG)lParam)->wParam == VK_RETURN)) res|=DLGC_WANTMESSAGE;
}
return res;
}
void SubclassControlForReturnProcessing(HWND hWnd)
{
WNDPROC nativeproc=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC,(LONG)MyControlProc);
SetProp(hWnd,TEXT("NATIVEPROC"),(HANDLE)nativeproc); // Save original window procedure
}
Это надо вызывать например при обработке WM_INITDIALOG
SubclassControlForReturnProcessing(GetDlgItem(hWnd,IDC_LIST));