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