File Annotation

Not logged in
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_