CBSetTextW() を teraterm/common へ移動
- clipboar.c から ttlib_static_cpp.cpp へ
@@ -161,6 +161,7 @@ | ||
161 | 161 | wchar_t *TTGetLangStrW(const char *section, const char *key, const wchar_t *def, const char *UILanguageFile); |
162 | 162 | wchar_t *GetClipboardTextW(HWND hWnd, BOOL empty); |
163 | 163 | char *GetClipboardTextA(HWND hWnd, BOOL empty); |
164 | +BOOL CBSetTextW(HWND hWnd, const wchar_t *str_w, size_t str_len); | |
164 | 165 | |
165 | 166 | #ifdef __cplusplus |
166 | 167 | } |
@@ -209,4 +209,60 @@ | ||
209 | 209 | return pool; |
210 | 210 | } |
211 | 211 | |
212 | +/** | |
213 | + * クリップボードにテキストをセットする | |
214 | + * str_w クリップボードにセットする文字列へのポインタ | |
215 | + * NULLのときクリップボードを空にする(str_lenは参照されない) | |
216 | + * str_len 文字列長 | |
217 | + * 0のとき文字列長が自動で算出される | |
218 | + */ | |
219 | +BOOL CBSetTextW(HWND hWnd, const wchar_t *str_w, size_t str_len) | |
220 | +{ | |
221 | + HGLOBAL CBCopyWideHandle; | |
212 | 222 | |
223 | + if (str_w == NULL) { | |
224 | + str_len = 0; | |
225 | + } else { | |
226 | + if (str_len == 0) | |
227 | + str_len = wcslen(str_w); | |
228 | + } | |
229 | + | |
230 | + if (!OpenClipboard(hWnd)) { | |
231 | + return FALSE; | |
232 | + } | |
233 | + | |
234 | + EmptyClipboard(); | |
235 | + if (str_len == 0) { | |
236 | + CloseClipboard(); | |
237 | + return TRUE; | |
238 | + } | |
239 | + | |
240 | + { | |
241 | + // 文字列をコピー、最後のL'\0'も含める | |
242 | + wchar_t *CBCopyWidePtr; | |
243 | + const size_t alloc_bytes = (str_len + 1) * sizeof(wchar_t); | |
244 | + CBCopyWideHandle = GlobalAlloc(GMEM_MOVEABLE, alloc_bytes); | |
245 | + if (CBCopyWideHandle == NULL) { | |
246 | + CloseClipboard(); | |
247 | + return FALSE; | |
248 | + } | |
249 | + CBCopyWidePtr = (wchar_t *)GlobalLock(CBCopyWideHandle); | |
250 | + if (CBCopyWidePtr == NULL) { | |
251 | + CloseClipboard(); | |
252 | + return FALSE; | |
253 | + } | |
254 | + memcpy(CBCopyWidePtr, str_w, alloc_bytes - sizeof(wchar_t)); | |
255 | + CBCopyWidePtr[str_len] = L'\0'; | |
256 | + GlobalUnlock(CBCopyWideHandle); | |
257 | + } | |
258 | + | |
259 | + SetClipboardData(CF_UNICODETEXT, CBCopyWideHandle); | |
260 | + | |
261 | + // TODO 9x系では自動でCF_TEXTにセットされないらしい? | |
262 | + // ttl_gui.c の TTLVar2Clipb() ではつぎの2つが行われていた | |
263 | + // SetClipboardData(CF_TEXT, hText); | |
264 | + // SetClipboardData(CF_UNICODETEXT, wide_hText); | |
265 | + CloseClipboard(); | |
266 | + | |
267 | + return TRUE; | |
268 | +} |
@@ -1200,61 +1200,6 @@ | ||
1200 | 1200 | _CrtCheckMemory(); |
1201 | 1201 | } |
1202 | 1202 | |
1203 | -/** | |
1204 | - * クリップボードにテキストをセットする | |
1205 | - * str_w クリップボードにセットする文字列へのポインタ | |
1206 | - * NULLのときクリップボードを空にする(str_lenは参照されない) | |
1207 | - * str_len 文字列長 | |
1208 | - * 0のとき文字列長が自動で算出される | |
1209 | - */ | |
1210 | -BOOL CBSetTextW(HWND hWnd, const wchar_t *str_w, size_t str_len) | |
1211 | -{ | |
1212 | - HGLOBAL CBCopyWideHandle; | |
1213 | - | |
1214 | - if (str_w == NULL) { | |
1215 | - str_len = 0; | |
1216 | - } else { | |
1217 | - if (str_len == 0) | |
1218 | - str_len = wcslen(str_w); | |
1219 | - } | |
1220 | - | |
1221 | - if (!OpenClipboard(hWnd)) { | |
1222 | - return FALSE; | |
1223 | - } | |
1224 | - | |
1225 | - EmptyClipboard(); | |
1226 | - if (str_len == 0) { | |
1227 | - CloseClipboard(); | |
1228 | - return TRUE; | |
1229 | - } | |
1230 | - | |
1231 | - { | |
1232 | - // 文字列をコピー、最後のL'\0'も含める | |
1233 | - wchar_t *CBCopyWidePtr; | |
1234 | - const size_t alloc_bytes = (str_len + 1) * sizeof(wchar_t); | |
1235 | - CBCopyWideHandle = GlobalAlloc(GMEM_MOVEABLE, alloc_bytes); | |
1236 | - if (CBCopyWideHandle == NULL) { | |
1237 | - CloseClipboard(); | |
1238 | - return FALSE; | |
1239 | - } | |
1240 | - CBCopyWidePtr = (wchar_t *)GlobalLock(CBCopyWideHandle); | |
1241 | - if (CBCopyWidePtr == NULL) { | |
1242 | - CloseClipboard(); | |
1243 | - return FALSE; | |
1244 | - } | |
1245 | - memcpy(CBCopyWidePtr, str_w, alloc_bytes - sizeof(wchar_t)); | |
1246 | - CBCopyWidePtr[str_len] = L'\0'; | |
1247 | - GlobalUnlock(CBCopyWideHandle); | |
1248 | - } | |
1249 | - | |
1250 | - SetClipboardData(CF_UNICODETEXT, CBCopyWideHandle); | |
1251 | - | |
1252 | - // TODO 9x系では自動でCF_TEXTにセットされないらしい? | |
1253 | - CloseClipboard(); | |
1254 | - | |
1255 | - return TRUE; | |
1256 | -} | |
1257 | - | |
1258 | 1203 | #if 0 |
1259 | 1204 | BOOL CBSetClipboard(HWND owner, HGLOBAL hMem) |
1260 | 1205 | { |
@@ -41,7 +41,6 @@ | ||
41 | 41 | PCHAR CBOpen(LONG MemSize); |
42 | 42 | void CBClose(void); |
43 | 43 | #endif |
44 | -BOOL CBSetTextW(HWND hWnd, const wchar_t *str_w, size_t str_len); | |
45 | 44 | |
46 | 45 | void CBStartSend(PCHAR DataPtr, int DataSize, BOOL EchoOnly); |
47 | 46 | void CBStartPaste(HWND HWin, BOOL AddCR, BOOL Bracketed); |