Go to the documentation of this file.00001 #include "../pch.h"
00002
00003 NAMESPACE_START
00004
00005 bool Window::activateInput(::DEVICE type){
00006 return inputWindow.activateInput(type);
00007 }
00008
00009 void Window::deactivateInput(::DEVICE type){
00010 inputWindow.deactivateInput(type);
00011 }
00012
00013 uint Window::getDevices(::DeviceInfo* array, uint size){
00014 return inputWindow.getDevices(array, size);
00015 }
00016
00017 ::pDevice Window::activateDevice(::DEVICE type, int ID){
00018 return inputWindow.activateDevice(type, ID);
00019 }
00020
00021 void Window::deactivateDevice(::pDevice device){
00022 inputWindow.deactivateDevice(device);
00023 }
00024
00025 void Window::loop(void){
00026 MSG msg;
00027 if(m_hWnd == 0) return;
00028 memset(&msg,0,sizeof(MSG));
00029
00030 while(msg.message != WM_QUIT && IsOpen){
00031 for(uint i=0, size = windowList.size(); i<size; i++){
00032 m_curWindow = windowList.get(i);
00033 if(PeekMessage(&msg, m_curWindow->m_hWnd, 0, 0, PM_REMOVE)){
00034 if(msg.message == WM_MOUSEMOVE){
00035 m_curWindow->m_mouseX = LOWORD(msg.lParam);
00036 m_curWindow->m_mouseY = HIWORD(msg.lParam);
00037 }else{
00038 TranslateMessage(&msg);
00039 DispatchMessage(&msg);
00040 }
00041 if(size != windowList.size()){
00042 size = windowList.size();
00043 i = 0;
00044 }
00045 }else{
00046 for(uint i=0; i<m_curWindow->renderListeners.size(); i++)
00047 m_curWindow->renderListeners.get(i)->eventRender();
00048 ::wait(1);
00049 }
00050 }
00051 }
00052 }
00053
00054 LRESULT CALLBACK Window::MessageHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
00055
00056 #define CALL(__class)\
00057 for(uint i=0; i<__class.size(); i++)\
00058 __class.get(i)()
00059
00060 POINT point;
00061 RECT rc;
00062
00063 switch(msg){
00064
00065 case WM_PAINT:
00066 if(m_curWindow){
00067 for(uint i=0; i<m_curWindow->renderListeners.size(); i++)
00068 m_curWindow->renderListeners.get(i)->eventPaint();
00069 }
00070 break;
00071
00072
00073 case WM_SIZE:
00074 if(m_curWindow){
00075 GetCursorPos(&point);
00076 m_curWindow->m_mouseX = point.x;
00077 m_curWindow->m_mouseY = point.y;
00078 GetWindowRect(hWnd, &rc);
00079 m_curWindow->m_mouseX -= rc.left;
00080 m_curWindow->m_mouseY -= rc.top;
00081 ::WindowSize wndSize = m_curWindow->getSize();
00082 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00083 m_curWindow->windowListeners.get(i)->eventWindowResize(wndSize.x, wndSize.y, wndSize.width, wndSize.height);
00084 }
00085 break;
00086
00087
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 case WM_CLOSE:
00105 if(m_curWindow){
00106 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00107 m_curWindow->windowListeners.get(i)->eventWindowClose();
00108 if((HWND)m_curWindow->getWindow() == hWnd)
00109 m_curWindow->uninit();
00110 }
00111 return 0;
00112
00113
00114 case WM_DESTROY:
00115 for(uint i=0; i<windowList.size(); i++){
00116 if((HWND)windowList.get(i)->getWindow() == hWnd){
00117 windowList.get(i)->IsOpen = false;
00118 windowList.removeIndex(i);
00119 break;
00120 }
00121 }
00122 if(windowList.size() == 0){
00123 windowList.clear();
00124 PostQuitMessage(0);
00125 UnregisterClass(windowClassName, m_hInstance);
00126 m_wndClassCreated = false;
00127 }
00128 return 0;
00129
00130
00131 case WM_SYSCOMMAND:
00132 if(m_curWindow){
00133 switch(wParam){
00134 case SC_MINIMIZE:
00135 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00136 m_curWindow->windowListeners.get(i)->eventWindowMinimize();
00137 break;
00138 case SC_RESTORE:
00139 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00140 m_curWindow->windowListeners.get(i)->eventWindowUnminimize();
00141 break;
00142 case SC_MAXIMIZE:
00143 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00144 m_curWindow->windowListeners.get(i)->eventWindowMaximize();
00145 break;
00146 case SC_MOVE:
00147 {
00148 ::WindowSize wndSize = m_curWindow->getSize();
00149 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00150 m_curWindow->windowListeners.get(i)->eventWindowResize(wndSize.x, wndSize.y, wndSize.width, wndSize.height);
00151 }
00152 break;
00153 default: break;
00154 }
00155 }
00156 break;
00157
00158
00159
00160 case WM_ACTIVATE:
00161 if(m_curWindow){
00162 switch(wParam){
00163 case WA_ACTIVE:
00164 case WA_CLICKACTIVE:
00165 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00166 m_curWindow->windowListeners.get(i)->eventWindowFocus();
00167 case WA_INACTIVE:
00168 for(uint i=0; i<m_curWindow->windowListeners.size(); i++)
00169 m_curWindow->windowListeners.get(i)->eventWindowLostFocus();
00170 default: break;
00171 }
00172 }
00173 break;
00174
00175 default: break;
00176 }
00177 return DefWindowProc(hWnd, msg, wParam, lParam);
00178 #undef CALL
00179 }
00180
00181 NAMESPACE_END