dcdd144598 2011-02-23 kinaba: #ifndef _KILIB_WINUTIL_H_ dcdd144598 2011-02-23 kinaba: #define _KILIB_WINUTIL_H_ dcdd144598 2011-02-23 kinaba: #include "types.h" dcdd144598 2011-02-23 kinaba: #include "memory.h" dcdd144598 2011-02-23 kinaba: #include "ktlaptr.h" dcdd144598 2011-02-23 kinaba: #ifndef __ccdoc__ dcdd144598 2011-02-23 kinaba: namespace ki { dcdd144598 2011-02-23 kinaba: #endif dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ @pkg ki.WinUtil //@} dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // クリップボード管理 dcdd144598 2011-02-23 kinaba: // dcdd144598 2011-02-23 kinaba: // OpenClipboard や CloseClipboard 辺りの呼び出しを適当に自動化します。 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: class Clipboard : public Object dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: public: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 開く //@} dcdd144598 2011-02-23 kinaba: Clipboard( HWND owner, bool read=true ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 閉じる //@} dcdd144598 2011-02-23 kinaba: ~Clipboard(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ データ読み込み //@} dcdd144598 2011-02-23 kinaba: HANDLE GetData( UINT uFormat ) const; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 指定フォーマットのデータがクリップボード上にあるか? //@} dcdd144598 2011-02-23 kinaba: bool IsAvail( UINT uFormat ) const; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 指定フォーマットのデータがクリップボード上にあるか?(複数) //@} dcdd144598 2011-02-23 kinaba: bool IsAvail( UINT uFormats[], int num ) const; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ テキスト情報保持クラス //@} dcdd144598 2011-02-23 kinaba: class Text { dcdd144598 2011-02-23 kinaba: friend class Clipboard; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: mutable unicode* str_; dcdd144598 2011-02-23 kinaba: enum Tp { NEW, GALLOC } mem_; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: Text( unicode* s, Tp m ) : str_(s), mem_(m) {} dcdd144598 2011-02-23 kinaba: void operator=( const Text& ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: public: dcdd144598 2011-02-23 kinaba: Text( const Text& t ) dcdd144598 2011-02-23 kinaba: : str_(t.str_), mem_(t.mem_) { t.str_=NULL; } dcdd144598 2011-02-23 kinaba: ~Text() dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: if( str_ != NULL ) dcdd144598 2011-02-23 kinaba: if( mem_==NEW ) delete [] str_; dcdd144598 2011-02-23 kinaba: else GlobalUnlock( str_ ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: const unicode* data() const { return str_; } dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ テキスト読み込み //@} dcdd144598 2011-02-23 kinaba: Text GetUnicodeText() const; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ データ書き込み //@} dcdd144598 2011-02-23 kinaba: bool SetData( UINT uFormat, HANDLE hData ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 独自フォーマットの登録 //@} dcdd144598 2011-02-23 kinaba: static UINT RegisterFormat( const TCHAR* name ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: public: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 正常に開かれているかチェック //@} dcdd144598 2011-02-23 kinaba: bool isOpened() const; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: bool opened_; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: NOCOPY(Clipboard); dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //------------------------------------------------------------------------- dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline bool Clipboard::isOpened() const dcdd144598 2011-02-23 kinaba: { return opened_; } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline HANDLE Clipboard::GetData( UINT uFormat ) const dcdd144598 2011-02-23 kinaba: { return ::GetClipboardData( uFormat ); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline bool Clipboard::SetData( UINT uFormat, HANDLE hData ) dcdd144598 2011-02-23 kinaba: { return NULL != ::SetClipboardData( uFormat, hData ); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline bool Clipboard::IsAvail( UINT uFormat ) const dcdd144598 2011-02-23 kinaba: { return false!=::IsClipboardFormatAvailable(uFormat); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline bool Clipboard::IsAvail( UINT uFormats[], int num ) const dcdd144598 2011-02-23 kinaba: { return -1!=::GetPriorityClipboardFormat(uFormats,num); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline UINT Clipboard::RegisterFormat( const TCHAR* name ) dcdd144598 2011-02-23 kinaba: { return ::RegisterClipboardFormat(name); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 排他制御 dcdd144598 2011-02-23 kinaba: // dcdd144598 2011-02-23 kinaba: // 名前付きMutexを扱います dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: class Mutex : public Object dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: public: dcdd144598 2011-02-23 kinaba: Mutex( const TCHAR* name ); dcdd144598 2011-02-23 kinaba: ~Mutex(); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: const HANDLE mtx_; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: private: dcdd144598 2011-02-23 kinaba: NOCOPY(Mutex); dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //------------------------------------------------------------------------- dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline Mutex::Mutex( const TCHAR* name ) dcdd144598 2011-02-23 kinaba: : mtx_( ::CreateMutex( NULL, TRUE, name ) ) {} dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline Mutex::~Mutex() dcdd144598 2011-02-23 kinaba: { if( mtx_ != NULL ) ::ReleaseMutex( mtx_ ), ::CloseHandle( mtx_ ); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: } // namespace ki dcdd144598 2011-02-23 kinaba: #endif // _KILIB_WINUTIL_H_