OSDN Git Service

Windows APIを実装部に隠蔽してみた。まだ不完全だが。
[wintimer/wintimer.git] / wintimer / taskbar.cpp
1 #include "StdAfx.h"
2 #include "sf_windows.h"
3 #include "taskbar.h"
4
5
6 namespace sf {
7
8 const int taskbar::none = TBPF_NOPROGRESS;
9 const int taskbar::indeterminate = TBPF_INDETERMINATE;
10 const int taskbar::normal = TBPF_NORMAL;
11 const int taskbar::error = TBPF_ERROR;
12 const int taskbar::paused = TBPF_PAUSED;
13
14 struct taskbar::impl
15 {
16   typedef throw_if_err<sf::taskbar::exception> throw_if_err_;
17
18   impl(){}
19   ~impl()
20   {
21     discard();
22   }
23
24   void create() {
25     throw_if_err_()(taskbar_.CreateInstance(CLSID_TaskbarList));
26   }
27
28   void discard()
29   {
30     safe_release(taskbar_);
31   }
32     
33   void overlay_icon(sf::base_window& w,HICON icon,std::wstring& description)
34   {
35     throw_if_err_()(taskbar_->SetOverlayIcon(reinterpret_cast<HWND>(w.raw_handle()),icon,description.c_str()));
36   }
37
38   void progress_state(sf::base_window& w,TBPFLAG state)
39   {
40     throw_if_err_()(taskbar_->SetProgressState(reinterpret_cast<HWND>(w.raw_handle()),state));
41   }
42
43   void progress_value(sf::base_window& w,boost::uint64_t completed, boost::uint64_t total)
44   {
45     throw_if_err_()(taskbar_->SetProgressValue(reinterpret_cast<HWND>(w.raw_handle()),completed,total));
46   }
47    
48 private:
49   _COM_SMARTPTR_TYPEDEF(ITaskbarList4,__uuidof(ITaskbarList4));
50   ITaskbarList4Ptr taskbar_;
51 };
52
53    
54 taskbar::taskbar() : impl_(new sf::taskbar::impl()) {}
55 taskbar::~taskbar() { discard();};
56
57 void taskbar::create(){impl_->create();};
58 void taskbar::discard(){impl_->discard();};
59 void taskbar::overlay_icon(sf::base_window& w,HICON icon,std::wstring& description){impl_->overlay_icon(w,icon,description);};
60 void taskbar::progress_state(sf::base_window& w,int state){impl_->progress_state(w,(TBPFLAG)state);};
61 void taskbar::progress_value(sf::base_window& w,boost::uint64_t completed, boost::uint64_t total){impl_->progress_value(w,completed,total);};
62
63 }