Hex Artifact Content

Not logged in

Artifact c65458ae7512b751a9d2f4794081b6fb9102805a:


0000: 23 69 6e 63 6c 75 64 65 20 22 73 74 64 61 66 78  #include "stdafx
0010: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 61  .h"..#include "a
0020: 70 70 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  pp.h"..#include 
0030: 22 77 69 6e 75 74 69 6c 2e 68 22 0d 0a 75 73 69  "winutil.h"..usi
0040: 6e 67 20 6e 61 6d 65 73 70 61 63 65 20 6b 69 3b  ng namespace ki;
0050: 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d  ........//======
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0090: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00a0: 3d 3d 3d 0d 0a 0d 0a 43 6c 69 70 62 6f 61 72 64  ===....Clipboard
00b0: 3a 3a 43 6c 69 70 62 6f 61 72 64 28 20 48 57 4e  ::Clipboard( HWN
00c0: 44 20 6f 77 6e 65 72 2c 20 62 6f 6f 6c 20 72 65  D owner, bool re
00d0: 61 64 20 29 0d 0a 09 3a 20 6f 70 65 6e 65 64 5f  ad )...: opened_
00e0: 28 20 66 61 6c 73 65 20 29 0d 0a 7b 0d 0a 09 69  ( false )..{...i
00f0: 66 28 20 3a 3a 4f 70 65 6e 43 6c 69 70 62 6f 61  f( ::OpenClipboa
0100: 72 64 28 6f 77 6e 65 72 29 20 29 0d 0a 09 09 69  rd(owner) )....i
0110: 66 28 20 72 65 61 64 20 7c 7c 20 3a 3a 45 6d 70  f( read || ::Emp
0120: 74 79 43 6c 69 70 62 6f 61 72 64 28 29 20 29 0d  tyClipboard() ).
0130: 0a 09 09 09 6f 70 65 6e 65 64 5f 20 3d 20 74 72  ....opened_ = tr
0140: 75 65 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09  ue;....else.....
0150: 3a 3a 43 6c 6f 73 65 43 6c 69 70 62 6f 61 72 64  ::CloseClipboard
0160: 28 29 3b 0d 0a 7d 0d 0a 0d 0a 43 6c 69 70 62 6f  ();..}....Clipbo
0170: 61 72 64 3a 3a 7e 43 6c 69 70 62 6f 61 72 64 28  ard::~Clipboard(
0180: 29 0d 0a 7b 0d 0a 09 69 66 28 20 6f 70 65 6e 65  )..{...if( opene
0190: 64 5f 20 29 0d 0a 09 09 3a 3a 43 6c 6f 73 65 43  d_ )....::CloseC
01a0: 6c 69 70 62 6f 61 72 64 28 29 3b 0d 0a 7d 0d 0a  lipboard();..}..
01b0: 0d 0a 43 6c 69 70 62 6f 61 72 64 3a 3a 54 65 78  ..Clipboard::Tex
01c0: 74 20 43 6c 69 70 62 6f 61 72 64 3a 3a 47 65 74  t Clipboard::Get
01d0: 55 6e 69 63 6f 64 65 54 65 78 74 28 29 20 63 6f  UnicodeText() co
01e0: 6e 73 74 0d 0a 7b 0d 0a 09 69 66 28 20 61 70 70  nst..{...if( app
01f0: 28 29 2e 69 73 4e 54 28 29 20 29 0d 0a 09 7b 0d  ().isNT() )...{.
0200: 0a 09 09 2f 2f 20 4e 54 82 c8 82 e7 92 bc 90 da  ...// NT........
0210: 55 6e 69 63 6f 64 65 82 c5 82 c6 82 ea 82 e9 0d  Unicode.........
0220: 0a 09 09 48 41 4e 44 4c 45 20 68 20 3d 20 47 65  ...HANDLE h = Ge
0230: 74 44 61 74 61 28 20 43 46 5f 55 4e 49 43 4f 44  tData( CF_UNICOD
0240: 45 54 45 58 54 20 29 3b 0d 0a 09 09 69 66 28 20  ETEXT );....if( 
0250: 68 20 21 3d 20 4e 55 4c 4c 20 29 0d 0a 09 09 7b  h != NULL )....{
0260: 0d 0a 09 09 09 75 6e 69 63 6f 64 65 2a 20 75 73  .....unicode* us
0270: 74 72 20 3d 20 73 74 61 74 69 63 5f 63 61 73 74  tr = static_cast
0280: 3c 75 6e 69 63 6f 64 65 2a 3e 28 20 3a 3a 47 6c  <unicode*>( ::Gl
0290: 6f 62 61 6c 4c 6f 63 6b 28 20 68 20 29 20 29 3b  obalLock( h ) );
02a0: 0d 0a 09 09 09 72 65 74 75 72 6e 20 54 65 78 74  .....return Text
02b0: 28 20 75 73 74 72 2c 20 54 65 78 74 3a 3a 47 41  ( ustr, Text::GA
02c0: 4c 4c 4f 43 20 29 3b 0d 0a 09 09 7d 0d 0a 09 7d  LLOC );....}...}
02d0: 0d 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 2f  ...else...{..../
02e0: 2f 20 39 78 82 c8 82 e7 95 cf 8a b7 82 aa 95 4b  / 9x...........K
02f0: 97 76 0d 0a 09 09 48 41 4e 44 4c 45 20 68 20 3d  .v....HANDLE h =
0300: 20 47 65 74 44 61 74 61 28 20 43 46 5f 54 45 58   GetData( CF_TEX
0310: 54 20 29 3b 0d 0a 09 09 69 66 28 20 68 20 21 3d  T );....if( h !=
0320: 20 4e 55 4c 4c 20 29 0d 0a 09 09 7b 0d 0a 09 09   NULL )....{....
0330: 09 63 68 61 72 2a 20 63 73 74 72 20 3d 20 73 74  .char* cstr = st
0340: 61 74 69 63 5f 63 61 73 74 3c 63 68 61 72 2a 3e  atic_cast<char*>
0350: 28 20 3a 3a 47 6c 6f 62 61 6c 4c 6f 63 6b 28 20  ( ::GlobalLock( 
0360: 68 20 29 20 29 3b 0d 0a 09 09 09 69 6e 74 20 4c  h ) );.....int L
0370: 75 20 3d 20 3a 3a 6c 73 74 72 6c 65 6e 41 28 20  u = ::lstrlenA( 
0380: 63 73 74 72 20 29 20 2a 20 33 3b 0d 0a 09 09 09  cstr ) * 3;.....
0390: 75 6e 69 63 6f 64 65 2a 20 75 73 74 72 20 3d 20  unicode* ustr = 
03a0: 6e 65 77 20 75 6e 69 63 6f 64 65 5b 4c 75 5d 3b  new unicode[Lu];
03b0: 0d 0a 09 09 09 3a 3a 4d 75 6c 74 69 42 79 74 65  .....::MultiByte
03c0: 54 6f 57 69 64 65 43 68 61 72 28 20 43 50 5f 41  ToWideChar( CP_A
03d0: 43 50 2c 20 30 2c 20 63 73 74 72 2c 20 2d 31 2c  CP, 0, cstr, -1,
03e0: 20 75 73 74 72 2c 20 4c 75 20 29 3b 0d 0a 09 09   ustr, Lu );....
03f0: 09 3a 3a 47 6c 6f 62 61 6c 55 6e 6c 6f 63 6b 28  .::GlobalUnlock(
0400: 20 68 20 29 3b 0d 0a 09 09 09 72 65 74 75 72 6e   h );.....return
0410: 20 54 65 78 74 28 20 75 73 74 72 2c 20 54 65 78   Text( ustr, Tex
0420: 74 3a 3a 4e 45 57 20 29 3b 0d 0a 09 09 7d 0d 0a  t::NEW );....}..
0430: 09 7d 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 54 65  .}.....return Te
0440: 78 74 28 20 4e 55 4c 4c 2c 20 54 65 78 74 3a 3a  xt( NULL, Text::
0450: 4e 45 57 20 29 3b 0d 0a 7d 0d 0a                 NEW );..}..