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