Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef toolx_Windows_session 4 #ifndef toolx_Windows_session 5 #define toolx_Windows_session 5 #define toolx_Windows_session 6 6 7 #include <windows.h> 7 #include <windows.h> 8 #include <windowsx.h> 8 #include <windowsx.h> 9 9 10 #include <ostream> 10 #include <ostream> 11 #include <cstdlib> << 12 11 13 namespace toolx { 12 namespace toolx { 14 namespace Windows { 13 namespace Windows { 15 14 16 class session { 15 class session { 17 public: 16 public: 18 session(std::ostream& a_out):m_out(a_out){} 17 session(std::ostream& a_out):m_out(a_out){} 19 virtual ~session() {} 18 virtual ~session() {} 20 protected: 19 protected: 21 session(const session& a_from):m_out(a_from. 20 session(const session& a_from):m_out(a_from.m_out){} 22 session& operator=(const session&){return *t 21 session& operator=(const session&){return *this;} 23 public: 22 public: 24 std::ostream& out() const {return m_out;} 23 std::ostream& out() const {return m_out;} 25 24 26 bool is_valid() const {return true;} 25 bool is_valid() const {return true;} 27 26 28 bool steer() { 27 bool steer() { 29 while(true) { 28 while(true) { 30 MSG event; 29 MSG event; 31 BOOL status = ::GetMessage(&event,NULL,0 30 BOOL status = ::GetMessage(&event,NULL,0,0); 32 if(status == -1) { // This may happen (d 31 if(status == -1) { // This may happen (dixit Microsoft doc). 33 break; 32 break; 34 } else if(status == 0) { //WM_QUIT 33 } else if(status == 0) { //WM_QUIT 35 break; 34 break; 36 } else { 35 } else { 37 ::TranslateMessage(&event); 36 ::TranslateMessage(&event); 38 ::DispatchMessage (&event); 37 ::DispatchMessage (&event); 39 } 38 } 40 } 39 } 41 return true; 40 return true; 42 } 41 } 43 42 44 bool sync() { 43 bool sync() { 45 MSG event; 44 MSG event; 46 while(::PeekMessage(&event,NULL,0,0,PM_REM 45 while(::PeekMessage(&event,NULL,0,0,PM_REMOVE)) { 47 if(event.message==WM_QUIT) return false; 46 if(event.message==WM_QUIT) return false; 48 ::TranslateMessage(&event); 47 ::TranslateMessage(&event); 49 ::DispatchMessage(&event); 48 ::DispatchMessage(&event); 50 } 49 } 51 return true; 50 return true; 52 } 51 } 53 52 54 void show_window(HWND a_hwnd){ 53 void show_window(HWND a_hwnd){ 55 ::SetForegroundWindow(a_hwnd); 54 ::SetForegroundWindow(a_hwnd); 56 ::ShowWindow(a_hwnd,SW_SHOWDEFAULT); 55 ::ShowWindow(a_hwnd,SW_SHOWDEFAULT); 57 ::UpdateWindow(a_hwnd); 56 ::UpdateWindow(a_hwnd); 58 ::DrawMenuBar(a_hwnd); 57 ::DrawMenuBar(a_hwnd); 59 } 58 } 60 59 61 void set_size(HWND a_hwnd,unsigned int a_wid 60 void set_size(HWND a_hwnd,unsigned int a_width,unsigned int a_height) { 62 ::MoveWindow(a_hwnd,0,0,a_width,a_height,T 61 ::MoveWindow(a_hwnd,0,0,a_width,a_height,TRUE); 63 } 62 } 64 63 65 //void post(HWND a_hwnd,LPARAM a_msg){ 64 //void post(HWND a_hwnd,LPARAM a_msg){ 66 // ::PostMessage(a_hwnd,WM_USER,(WPARAM)0,a 65 // ::PostMessage(a_hwnd,WM_USER,(WPARAM)0,a_msg); 67 //} 66 //} 68 public: << 69 bool tmp_dir(std::string& a_dir) { << 70 char* env = ::getenv("TEMP"); << 71 if(!env) {a_dir.clear();return false;} << 72 a_dir = env; << 73 return true; << 74 } << 75 protected: 67 protected: 76 std::ostream& m_out; 68 std::ostream& m_out; 77 }; 69 }; 78 70 79 }} 71 }} 80 << 81 72 82 #endif 73 #endif