dcdd144598 2011-02-23 kinaba: #include "stdafx.h" dcdd144598 2011-02-23 kinaba: #include "app.h" dcdd144598 2011-02-23 kinaba: #include "winutil.h" dcdd144598 2011-02-23 kinaba: using namespace ki; 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: Clipboard::Clipboard( HWND owner, bool read ) dcdd144598 2011-02-23 kinaba: : opened_( false ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: if( ::OpenClipboard(owner) ) dcdd144598 2011-02-23 kinaba: if( read || ::EmptyClipboard() ) dcdd144598 2011-02-23 kinaba: opened_ = true; dcdd144598 2011-02-23 kinaba: else dcdd144598 2011-02-23 kinaba: ::CloseClipboard(); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: Clipboard::~Clipboard() dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: if( opened_ ) dcdd144598 2011-02-23 kinaba: ::CloseClipboard(); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: Clipboard::Text Clipboard::GetUnicodeText() const dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: if( app().isNT() ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: // NTなら直接Unicodeでとれる dcdd144598 2011-02-23 kinaba: HANDLE h = GetData( CF_UNICODETEXT ); dcdd144598 2011-02-23 kinaba: if( h != NULL ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: unicode* ustr = static_cast<unicode*>( ::GlobalLock( h ) ); dcdd144598 2011-02-23 kinaba: return Text( ustr, Text::GALLOC ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: else dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: // 9xなら変換が必要 dcdd144598 2011-02-23 kinaba: HANDLE h = GetData( CF_TEXT ); dcdd144598 2011-02-23 kinaba: if( h != NULL ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: char* cstr = static_cast<char*>( ::GlobalLock( h ) ); dcdd144598 2011-02-23 kinaba: int Lu = ::lstrlenA( cstr ) * 3; dcdd144598 2011-02-23 kinaba: unicode* ustr = new unicode[Lu]; dcdd144598 2011-02-23 kinaba: ::MultiByteToWideChar( CP_ACP, 0, cstr, -1, ustr, Lu ); dcdd144598 2011-02-23 kinaba: ::GlobalUnlock( h ); dcdd144598 2011-02-23 kinaba: return Text( ustr, Text::NEW ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: return Text( NULL, Text::NEW ); dcdd144598 2011-02-23 kinaba: }