1. C++ / Говнокод #10228

    −24

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    map<HANDLE,VRwnd*> windows;
    LRESULT WndProc(HANDLE h,UINT ui,WPARAM w,LPARAM m)try{
             return windows.at(h)->Process(ui,w,l);
    }catch(...){ return 0;}
    class VRwnd{
        HANDLE h;
    protected:
        map<UINT,function<LPRESULT(WPARAM,LPARAM)> handlers;// заполняется в конструкторе
        map<int,VRwnd*> idChilds;
        map<HANDLE,VRwnd*> Childs;
    public:
    
         virtual ~VRwnd();
         LRESULT Process(UINT ui,WPARAM w,LPARAM m)try{
                    PreProcess(w,l);// сами решайте, давать фильтру на что-то влиять, или нет.
                    if(ui==WM_NOTIFY) return WmNotify(w,m) ;
                    if(ui==WM_NOTIFY) return WmCommand(w,m) ;
                   return handlers.at(ui).second(w,l);
         }
          catch(...){return 0;}
          LPRESULT WmNotify(WPARAM w,LPARAM m){...}
          LPRESULT WmCommand(WPARAM w,LPARAM m){...}
          virtual LPRESULT PreProcess(WPARAM w,LPARAM m){return 0;}
    };

    Запостил: HaskellGovno, 09 Мая 2012

    Комментарии (9) RSS

    • А что не так?
      Ответить
      • Форматирование. Из-за него не хочется разбираться, что оно делает.
        Ответить
        • Да вполне читабельное форматирование.

          >if(ui==WM_NOTIFY) return WmNotify(w,m) ;
          >if(ui==WM_NOTIFY) return WmCommand(w,m) ;
          Вот этого я не понял.

          >WPARAM w,LPARAM m
          >PreProcess(w,l); //по идее l - LPARAM
          но l нигде не объявлен.
          Либо код нерабочий, либо слишком порезан, в любом случае телепаты не читают раздел С++.
          Ответить
          • Кстати не знал, что можно опускать фигурные скобки у функции, если она состоит только из try..catch.
            Ответить
            • Серьёзное хакерство. Это же сколько можно скобочек сэкономить в масштабах страны.. [Задумывается]
              Ответить
            • А в Аде даже первый try не нужен. Если в конце блока есть catch (в Аде - слово exception), то автоматом подразумевается, что в начале идёт try.
              Ответить
        • Что с форматированием не так?
          Ответить
    • жду пополнение в семью говн WinAPIGovno
      Ответить
    • > map<HANDLE,VRwnd*> windows;

      Уже в этом месте становится забавно. Кто писал свои обёртки над ВинАПИ - поймёт.
      Кстати, как выгоднее хранить доп.указатель и получать его по дескриптору - через карту, или через специальное поле, предоставляемое ОС?
      Ответить

    Добавить комментарий