- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 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;}
};
someone 10.05.2012 11:00 # 0
bormand 10.05.2012 11:20 # 0
3.14159265 10.05.2012 14:27 # 0
>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 нигде не объявлен.
Либо код нерабочий, либо слишком порезан, в любом случае телепаты не читают раздел С++.
bormand 10.05.2012 15:22 # +3
eth0 10.05.2012 18:51 # 0
TarasB 10.05.2012 19:28 # −1
TarasB 10.05.2012 19:27 # +1
Lure Of Chaos 10.05.2012 13:07 # +4
TarasB 10.05.2012 19:30 # 0
Уже в этом месте становится забавно. Кто писал свои обёртки над ВинАПИ - поймёт.
Кстати, как выгоднее хранить доп.указатель и получать его по дескриптору - через карту, или через специальное поле, предоставляемое ОС?