// w32dlib - Win32 Dialog Helpers // // Copyright (C) 2005 Ian Cowburn (ianc@noddybox.demon.co.uk) // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // ------------------------------------------------------------------------- // #include "w32dlib/dialog.h" #include "w32dlib/control.h" namespace W32DLib { // ------------------------------------------------------------ // Dialog::ProcSet Dialog::m_procset; // ------------------------------------------------------------ // Dialog::Dialog() { } // ------------------------------------------------------------ // Dialog::~Dialog() { } // ------------------------------------------------------------ // void Dialog::OnInit() { } // ------------------------------------------------------------ // void Dialog::OnClose() { } // ------------------------------------------------------------ // HWND Dialog::GetHWND() { return m_wnd; } // ------------------------------------------------------------ // INT_PTR Dialog::ShowModal(HINSTANCE inst, HWND parent) { return ::DialogBox(inst, MAKEINTRESOURCE(ResourceID()), NULL, &this->DialogProc); } // ------------------------------------------------------------ // void Dialog::Close(INT_PTR result) { EndDialog(m_wnd,result); } // ------------------------------------------------------------ // void Dialog::AddControl(Control *control) { m_cset.push_back(control); } // ------------------------------------------------------------ // BOOL Dialog::InstanceDialogProc(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { BOOL ret=FALSE; WORD lo=LOWORD(wp); switch(msg) { case WM_INITDIALOG: m_wnd=wnd; m_procset[wnd]=this; OnInit(); break; case WM_CLOSE: OnClose(); m_procset.erase(wnd); break; case WM_COMMAND: for(ControlSet::iterator i=m_cset.begin();i!=m_cset.end();++i) { if (lo==(*i)->ResourceID()) { ret=(*i)->ProcessMessage(msg,wp,lp); break; } } break; default: break; } return ret; } // ------------------------------------------------------------ // BOOL CALLBACK Dialog::DialogProc(HWND wnd, UINT msg, WPARAM wp, LPARAM lp) { if (m_procset.count(wnd)) { return m_procset[wnd]->InstanceDialogProc(wnd,msg,wp,lp); } else { return FALSE; } } }; // namespace w32dlib // END OF FILE