вторник, 29 декабря 2009 г.

Уберите этот чёртов default!

Очень часто switch для отлова сообщений в процедуре окна оформляют так, как описано в MSDN, или в проекте VS по-умолчанию, и не всегда впоследствии понимают, откуда берутся ошибки.

Часто ли у вас бывало так, что вы не видите реакции на обработку сообщения, или реакция не та, что вы ожидали? Посмотрите на свою процедуру окна, она выглядит так?
LRESULT WINAPI StdWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){
 switch( uMsg ){
  case WM_CREATE:
   ...
   break;
  case WM_DESTROY:
   ...
   break;
  ...
  default:
   return ::DefWindowProc( ... );
 }
 return 0;
}
тогда задайте себе вопрос: как часто вам требуется вернуть результат обработки сообщения минуя DefWindowProc, т.е. кардинально вот так сказать, мол не хочу, чтобы вот на это сообщение кто-то что-то еще делал? Нечасто? Тогда измените свою процедуру окна в соответствии с вашими потребностями:
LRESULT WINAPI StdWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){
 switch( uMsg ){
  case WM_CREATE:
   ...
   break;
  case WM_DESTROY:
   ...
   break;
  ...
 }
 return ::DefWindowProc( ... );
}

Комментариев нет:

Отправить комментарий