Re: Как поймать NM_RETURN в ListView'шнике
От: tdv  
Дата: 24.12.04 05:56
Оценка:
__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));
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.