ファイルを開くダイアログ用のファイル名フィルタ作成を共通関数に置き換え
- GetOpenFileName(), GetSaveFileName() 用
- GetCommonDialogFilterW()
- ANSI版 GetCommonDialogFilterA() 追加
- ttfile.c optw = 0 を追加
@@ -101,6 +101,8 @@ | ||
101 | 101 | wchar_t *AllocControlTextW(HWND hWnd); |
102 | 102 | char *AllocControlTextA(HWND hWnd); |
103 | 103 | void ExpandCBWidth(HWND dlg, int ID); |
104 | +wchar_t *GetCommonDialogFilterW(const char *user_filter_mask, const char *UILanguageFile); | |
105 | +char *GetCommonDialogFilterA(const char *user_filter_mask, const char *UILanguageFile); | |
104 | 106 | |
105 | 107 | #ifdef __cplusplus |
106 | 108 | } |
@@ -34,10 +34,12 @@ | ||
34 | 34 | #endif |
35 | 35 | #include <stdlib.h> |
36 | 36 | #include <crtdbg.h> |
37 | +#include <wchar.h> | |
37 | 38 | |
38 | 39 | #include "dlglib.h" |
39 | 40 | #include "ttlib.h" |
40 | 41 | #include "layer_for_unicode.h" |
42 | +#include "codeconv.h" | |
41 | 43 | |
42 | 44 | /** |
43 | 45 | * EndDialog() 互換関数 |
@@ -212,3 +214,110 @@ | ||
212 | 214 | SelectObject(TmpDC, hFont); |
213 | 215 | ReleaseDC(hCtrlWnd, TmpDC); |
214 | 216 | } |
217 | + | |
218 | +/** | |
219 | + * GetOpenFileName(), GetSaveFileName() 用フィルタ文字列取得 | |
220 | + * | |
221 | + * @param[in] user_filter_mask ユーザーフィルタ文字列 | |
222 | + * "*.txt", "*.txt;*.log" など | |
223 | + * NULLのとき使用しない | |
224 | + * @param[in] UILanguageFile | |
225 | + * @param[out] len 生成した文字列長(wchar_t単位) | |
226 | + * NULLのときは返さない | |
227 | + * @retval "User define(*.txt)\0*.txt\0All(*.*)\0*.*\0" など | |
228 | + * 終端は "\0\0" となる | |
229 | + */ | |
230 | +wchar_t *GetCommonDialogFilterW(const char *user_filter_mask, const char *UILanguageFile, size_t *len) | |
231 | +{ | |
232 | + // "ユーザ定義(*.txt)\0*.txt" | |
233 | + wchar_t *user_filter_str = NULL; | |
234 | + size_t user_filter_len = 0; | |
235 | + if (user_filter_mask != NULL && user_filter_mask[0] != 0) { | |
236 | + wchar_t user_filter_name[MAX_UIMSG]; | |
237 | + GetI18nStrW("Tera Term", "FILEDLG_USER_FILTER_NAME", user_filter_name, sizeof(user_filter_name), L"User define", | |
238 | + UILanguageFile); | |
239 | + size_t user_filter_name_len = wcslen(user_filter_name); | |
240 | + wchar_t *user_filter_maskW = ToWcharA(user_filter_mask); | |
241 | + size_t user_filter_mask_len = wcslen(user_filter_maskW); | |
242 | + user_filter_len = user_filter_name_len + 1 + user_filter_mask_len + 1 + 1 + user_filter_mask_len + 1; | |
243 | + user_filter_str = (wchar_t *)malloc(user_filter_len * sizeof(wchar_t)); | |
244 | + wchar_t *p = user_filter_str; | |
245 | + wmemcpy(p, user_filter_name, user_filter_name_len); | |
246 | + p += user_filter_name_len; | |
247 | + *p++ = '('; | |
248 | + wmemcpy(p, user_filter_maskW, user_filter_mask_len); | |
249 | + p += user_filter_mask_len; | |
250 | + *p++ = ')'; | |
251 | + *p++ = '\0'; | |
252 | + wmemcpy(p, user_filter_maskW, user_filter_mask_len); | |
253 | + p += user_filter_mask_len; | |
254 | + *p++ = '\0'; | |
255 | + free(user_filter_maskW); | |
256 | + } | |
257 | + | |
258 | + // "すべてのファイル(*.*)\0*.*" | |
259 | + wchar_t all_filter_str[MAX_UIMSG]; | |
260 | + GetI18nStrW("Tera Term", "FILEDLG_ALL_FILTER", all_filter_str, _countof(all_filter_str), L"All(*.*)\\0*.*", UILanguageFile); | |
261 | + size_t all_filter_len; | |
262 | + { | |
263 | + size_t all_filter_title_len = wcsnlen(all_filter_str, _countof(all_filter_str)); | |
264 | + if (all_filter_title_len == 0 || all_filter_title_len == _countof(all_filter_str)) { | |
265 | + all_filter_str[0] = 0; | |
266 | + all_filter_len = 0; | |
267 | + } else { | |
268 | + size_t all_filter_mask_max = _countof(all_filter_str) - all_filter_title_len - 1; | |
269 | + size_t all_filter_mask_len = wcsnlen(all_filter_str + all_filter_title_len + 1, all_filter_mask_max); | |
270 | + if (all_filter_mask_len == 0 || all_filter_mask_len == _countof(all_filter_str)) { | |
271 | + all_filter_str[0] = 0; | |
272 | + all_filter_len = 0; | |
273 | + } else { | |
274 | + all_filter_len = all_filter_title_len + 1 + all_filter_mask_len + 1; | |
275 | + } | |
276 | + } | |
277 | + } | |
278 | + | |
279 | + // フィルタ文字列を作る | |
280 | + size_t filter_len = user_filter_len + all_filter_len; | |
281 | + wchar_t* filter_str; | |
282 | + if (filter_len != 0) { | |
283 | + filter_len++; | |
284 | + filter_str = (wchar_t*)malloc(filter_len * sizeof(wchar_t)); | |
285 | + wchar_t *p = filter_str; | |
286 | + if (user_filter_len != 0) { | |
287 | + wmemcpy(p, user_filter_str, user_filter_len); | |
288 | + p += user_filter_len; | |
289 | + } | |
290 | + wmemcpy(p, all_filter_str, all_filter_len); | |
291 | + p += all_filter_len; | |
292 | + *p = '\0'; | |
293 | + } else { | |
294 | + filter_len = 2; | |
295 | + filter_str = (wchar_t*)malloc(filter_len * sizeof(wchar_t)); | |
296 | + filter_str[0] = 0; | |
297 | + filter_str[1] = 0; | |
298 | + } | |
299 | + | |
300 | + if (user_filter_len != 0) { | |
301 | + free(user_filter_str); | |
302 | + } | |
303 | + | |
304 | + if (len != NULL) { | |
305 | + *len = filter_len; | |
306 | + } | |
307 | + | |
308 | + return filter_str; | |
309 | +} | |
310 | + | |
311 | +wchar_t *GetCommonDialogFilterW(const char *user_filter_mask, const char *UILanguageFile) | |
312 | +{ | |
313 | + return GetCommonDialogFilterW(user_filter_mask, UILanguageFile, NULL); | |
314 | +} | |
315 | + | |
316 | +char *GetCommonDialogFilterA(const char *user_filter_mask, const char *UILanguageFile) | |
317 | +{ | |
318 | + size_t filterW_len; | |
319 | + wchar_t *filterW_ptr = GetCommonDialogFilterW(user_filter_mask, UILanguageFile, &filterW_len); | |
320 | + char *filterA_ptr = _WideCharToMultiByte(filterW_ptr, filterW_len, CP_ACP, NULL); | |
321 | + free(filterW_ptr); | |
322 | + return filterA_ptr; | |
323 | +} |
@@ -585,8 +585,7 @@ | ||
585 | 585 | wchar_t fname[MAX_PATH]; |
586 | 586 | GetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, fname, _countof(fname)); |
587 | 587 | |
588 | - wchar_t FNFilter[128*3]; | |
589 | - get_lang_msgW("FILEDLG_ALL_FILTER", FNFilter, sizeof(FNFilter), L"All(*.*)\\0*.*\\0\\0", UILanguageFile); | |
588 | + wchar_t *FNFilter = GetCommonDialogFilterW(NULL, UILanguageFile); | |
590 | 589 | |
591 | 590 | wchar_t caption[MAX_PATH]; |
592 | 591 | wchar_t uimsg[MAX_UIMSG]; |
@@ -608,6 +607,7 @@ | ||
608 | 607 | ofn.nMaxFile = _countof(fname); |
609 | 608 | ofn.lpstrTitle = caption; |
610 | 609 | BOOL Ok = GetSaveFileNameW(&ofn); |
610 | + free(FNFilter); | |
611 | 611 | if (Ok) { |
612 | 612 | SetDlgItemTextW(Dialog, IDC_FOPT_FILENAME_EDIT, fname); |
613 | 613 | } |
@@ -48,98 +48,6 @@ | ||
48 | 48 | |
49 | 49 | #define TitSendFileW L"Send file" // TODO ttftype.h内にANSI版がある |
50 | 50 | |
51 | -/** | |
52 | - * GetOpenFileName(), GetSaveFileName() 用フィルタ文字列取得 | |
53 | - * | |
54 | - * @param[in] user_filter_mask ユーザーフィルタ文字列 | |
55 | - * "*.txt", "*.txt;*.log" など | |
56 | - * NULLのとき使用しない | |
57 | - * @param[in] UILanguageFile | |
58 | - * @param[out] len 生成した文字列長(wchar_t単位) | |
59 | - * NULLのときは返さない | |
60 | - * @retval "User define(*.txt)\0*.txt\0All(*.*)\0*.*\0" など | |
61 | - * 終端は "\0\0" となる | |
62 | - */ | |
63 | -static wchar_t *GetCommonDialogFilterW(const char *user_filter_mask, const char *UILanguageFile, size_t *len) | |
64 | -{ | |
65 | - // "ユーザ定義(*.txt)\0*.txt" | |
66 | - wchar_t *user_filter_str = NULL; | |
67 | - size_t user_filter_len = 0; | |
68 | - if (user_filter_mask != NULL && user_filter_mask[0] != 0) { | |
69 | - wchar_t user_filter_name[MAX_UIMSG]; | |
70 | - get_lang_msgW("FILEDLG_USER_FILTER_NAME", user_filter_name, sizeof(user_filter_name), L"User define", | |
71 | - UILanguageFile); | |
72 | - size_t user_filter_name_len = wcslen(user_filter_name); | |
73 | - wchar_t *user_filter_maskW = ToWcharA(user_filter_mask); | |
74 | - size_t user_filter_mask_len = wcslen(user_filter_maskW); | |
75 | - user_filter_len = user_filter_name_len + 1 + user_filter_mask_len + 1 + 1 + user_filter_mask_len + 1; | |
76 | - user_filter_str = (wchar_t *)malloc(user_filter_len * sizeof(wchar_t)); | |
77 | - wchar_t *p = user_filter_str; | |
78 | - wmemcpy(p, user_filter_name, user_filter_name_len); | |
79 | - p += user_filter_name_len; | |
80 | - *p++ = '('; | |
81 | - wmemcpy(p, user_filter_maskW, user_filter_mask_len); | |
82 | - p += user_filter_mask_len; | |
83 | - *p++ = ')'; | |
84 | - *p++ = '\0'; | |
85 | - wmemcpy(p, user_filter_maskW, user_filter_mask_len); | |
86 | - p += user_filter_mask_len; | |
87 | - *p++ = '\0'; | |
88 | - free(user_filter_maskW); | |
89 | - } | |
90 | - | |
91 | - // "すべてのファイル(*.*)\0*.*" | |
92 | - wchar_t all_filter_str[MAX_UIMSG]; | |
93 | - get_lang_msgW("FILEDLG_ALL_FILTER", all_filter_str, _countof(all_filter_str), L"All(*.*)\\0*.*", UILanguageFile); | |
94 | - size_t all_filter_len; | |
95 | - { | |
96 | - size_t all_filter_title_len = wcsnlen(all_filter_str, _countof(all_filter_str)); | |
97 | - if (all_filter_title_len == 0 || all_filter_title_len == _countof(all_filter_str)) { | |
98 | - all_filter_str[0] = 0; | |
99 | - all_filter_len = 0; | |
100 | - } else { | |
101 | - size_t all_filter_mask_max = _countof(all_filter_str) - all_filter_title_len - 1; | |
102 | - size_t all_filter_mask_len = wcsnlen(all_filter_str + all_filter_title_len + 1, all_filter_mask_max); | |
103 | - if (all_filter_mask_len == 0 || all_filter_mask_len == _countof(all_filter_str)) { | |
104 | - all_filter_str[0] = 0; | |
105 | - all_filter_len = 0; | |
106 | - } else { | |
107 | - all_filter_len = all_filter_title_len + 1 + all_filter_mask_len + 1; | |
108 | - } | |
109 | - } | |
110 | - } | |
111 | - | |
112 | - // フィルタ文字列を作る | |
113 | - size_t filter_len = user_filter_len + all_filter_len; | |
114 | - wchar_t* filter_str; | |
115 | - if (filter_len != 0) { | |
116 | - filter_len++; | |
117 | - filter_str = (wchar_t*)malloc(filter_len * sizeof(wchar_t)); | |
118 | - wchar_t *p = filter_str; | |
119 | - if (user_filter_len != 0) { | |
120 | - wmemcpy(p, user_filter_str, user_filter_len); | |
121 | - p += user_filter_len; | |
122 | - } | |
123 | - wmemcpy(p, all_filter_str, all_filter_len); | |
124 | - p += all_filter_len; | |
125 | - *p = '\0'; | |
126 | - } else { | |
127 | - filter_len = 2; | |
128 | - filter_str = (wchar_t*)malloc(filter_len * sizeof(wchar_t)); | |
129 | - filter_str[0] = 0; | |
130 | - filter_str[1] = 0; | |
131 | - } | |
132 | - | |
133 | - if (user_filter_len != 0) { | |
134 | - free(user_filter_str); | |
135 | - } | |
136 | - | |
137 | - if (len != NULL) { | |
138 | - *len = filter_len; | |
139 | - } | |
140 | - return filter_str; | |
141 | -} | |
142 | - | |
143 | 51 | static INT_PTR CALLBACK SendFileDlgProc(HWND hDlgWnd, UINT msg, WPARAM wp, LPARAM lp) |
144 | 52 | { |
145 | 53 | static const DlgTextInfo TextInfos[] = { |
@@ -241,9 +149,7 @@ | ||
241 | 149 | free(uimsg); |
242 | 150 | uimsg = NULL; |
243 | 151 | |
244 | - size_t filter_len; | |
245 | - wchar_t *filterW = GetCommonDialogFilterW(data->filesend_filter, data->UILanguageFile, &filter_len); | |
246 | - | |
152 | + wchar_t *filterW = GetCommonDialogFilterW(data->filesend_filter, data->UILanguageFile); | |
247 | 153 | wchar_t filename[MAX_PATH]; |
248 | 154 | filename[0] = 0; |
249 | 155 | OPENFILENAMEW ofn = {}; |
@@ -39,4 +39,3 @@ | ||
39 | 39 | void FTLog1Byte(PFileVar fv, BYTE b); |
40 | 40 | void FTSetTimeOut(PFileVar fv, int T); |
41 | 41 | BOOL FTCreateFile(PFileVar fv); |
42 | -void GetFileSendFilter(PCHAR dest, PCHAR src, int size); |
@@ -193,9 +193,9 @@ | ||
193 | 193 | BOOL WINAPI GetTransFname(PFileVar fv, PCHAR CurDir, WORD FuncId, LPLONG Option) |
194 | 194 | { |
195 | 195 | char uimsg[MAX_UIMSG]; |
196 | - char FNFilter[sizeof(FileSendFilter)*3], *pf; | |
196 | + char *FNFilter; | |
197 | 197 | OPENFILENAME ofn; |
198 | - WORD optw; | |
198 | + WORD optw = 0; | |
199 | 199 | char TempDir[MAXPATHLEN]; |
200 | 200 | BOOL Ok; |
201 | 201 | char FileName[MAX_PATH]; |
@@ -203,40 +203,23 @@ | ||
203 | 203 | /* save current dir */ |
204 | 204 | _getcwd(TempDir,sizeof(TempDir)); |
205 | 205 | |
206 | - memset(FNFilter, 0, sizeof(FNFilter)); /* Set up for double null at end */ | |
207 | 206 | memset(&ofn, 0, sizeof(OPENFILENAME)); |
208 | 207 | |
209 | 208 | strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); |
210 | - pf = FNFilter; | |
211 | 209 | switch (FuncId) { |
212 | 210 | case GTF_SEND: |
213 | 211 | get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", uimsg, sizeof(uimsg), TitSendFile, UILanguageFile); |
214 | 212 | strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); |
215 | - if (strlen(FileSendFilter) > 0) { | |
216 | - get_lang_msg("FILEDLG_USER_FILTER_NAME", uimsg, sizeof(uimsg), "User define", UILanguageFile); | |
217 | - _snprintf_s(FNFilter, sizeof(FNFilter), _TRUNCATE, "%s(%s)", uimsg, FileSendFilter); | |
218 | - pf = pf + strlen(FNFilter) + 1; | |
219 | - strncpy_s(pf, sizeof(FNFilter)-(pf - FNFilter) ,FileSendFilter, _TRUNCATE); | |
220 | - pf = pf + strlen(pf) + 1; | |
221 | - } | |
222 | 213 | break; |
223 | 214 | case GTF_BP: |
224 | 215 | get_lang_msg("FILEDLG_TRANS_TITLE_BPSEND", uimsg, sizeof(uimsg), TitBPSend, UILanguageFile); |
225 | 216 | strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); |
226 | - if (strlen(FileSendFilter) > 0) { | |
227 | - get_lang_msg("FILEDLG_USER_FILTER_NAME", uimsg, sizeof(uimsg), "User define", UILanguageFile); | |
228 | - _snprintf_s(FNFilter, sizeof(FNFilter), _TRUNCATE, "%s(%s)", uimsg, FileSendFilter); | |
229 | - pf = pf + strlen(FNFilter) + 1; | |
230 | - strncpy_s(pf, sizeof(FNFilter)-(pf - FNFilter) ,FileSendFilter, _TRUNCATE); | |
231 | - pf = pf + strlen(pf) + 1; | |
232 | - } | |
233 | 217 | break; |
234 | - default: return FALSE; | |
218 | + default: | |
219 | + return FALSE; | |
235 | 220 | } |
236 | 221 | |
237 | - get_lang_msg("FILEDLG_ALL_FILTER", uimsg, sizeof(uimsg), "All(*.*)\\0*.*\\0\\0", UILanguageFile); | |
238 | - // \0\0 で終わる必要があるので 2 バイト | |
239 | - memcpy(pf, uimsg, sizeof(FNFilter) - (pf - FNFilter + 2)); | |
222 | + FNFilter = GetCommonDialogFilterA(FileSendFilter, UILanguageFile); | |
240 | 223 | |
241 | 224 | ExtractFileName(fv->FullName, FileName ,sizeof(FileName)); |
242 | 225 | strncpy_s(fv->FullName, sizeof(fv->FullName), FileName, _TRUNCATE); |
@@ -270,6 +253,7 @@ | ||
270 | 253 | ofn.hInstance = hInst; |
271 | 254 | |
272 | 255 | Ok = GetOpenFileName(&ofn); |
256 | + free(FNFilter); | |
273 | 257 | |
274 | 258 | if (Ok) { |
275 | 259 | *Option = (long)optw; |
@@ -362,14 +346,12 @@ | ||
362 | 346 | { |
363 | 347 | int i, len; |
364 | 348 | char uimsg[MAX_UIMSG]; |
365 | - char FNFilter[sizeof(FileSendFilter)*2+128], *pf; | |
349 | + char *FNFilter; | |
366 | 350 | OPENFILENAME ofn; |
367 | 351 | char TempDir[MAXPATHLEN]; |
368 | 352 | BOOL Ok; |
369 | 353 | char defaultFName[MAX_PATH]; |
370 | 354 | |
371 | - memset(FNFilter, 0, sizeof(FNFilter)); /* Set up for double null at end */ | |
372 | - | |
373 | 355 | /* save current dir */ |
374 | 356 | _getcwd(TempDir,sizeof(TempDir)); |
375 | 357 |
@@ -376,7 +358,6 @@ | ||
376 | 358 | fv->NumFname = 0; |
377 | 359 | |
378 | 360 | strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); |
379 | - pf = FNFilter; | |
380 | 361 | switch (FuncId) { |
381 | 362 | case GMF_KERMIT: |
382 | 363 | get_lang_msg("FILEDLG_TRANS_TITLE_KMTSEND", uimsg, sizeof(uimsg), TitKmtSend, UILanguageFile); |
@@ -397,13 +378,6 @@ | ||
397 | 378 | default: |
398 | 379 | return FALSE; |
399 | 380 | } |
400 | - if (strlen(FileSendFilter) > 0) { | |
401 | - get_lang_msg("FILEDLG_USER_FILTER_NAME", uimsg, sizeof(uimsg), "User define", UILanguageFile); | |
402 | - _snprintf_s(FNFilter, sizeof(FNFilter), _TRUNCATE, "%s(%s)", uimsg, FileSendFilter); | |
403 | - pf = pf + strlen(FNFilter) + 1; | |
404 | - strncpy_s(pf, sizeof(FNFilter)-(pf - FNFilter) ,FileSendFilter, _TRUNCATE); | |
405 | - pf = pf + strlen(pf) + 1; | |
406 | - } | |
407 | 381 | |
408 | 382 | /* moemory should be zero-initialized */ |
409 | 383 | fv->FnStrMemHandle = GlobalAlloc(GHND, FnStrMemSize); |
@@ -421,9 +395,7 @@ | ||
421 | 395 | } |
422 | 396 | } |
423 | 397 | |
424 | - get_lang_msg("FILEDLG_ALL_FILTER", uimsg, sizeof(uimsg), "All(*.*)\\0*.*\\0\\0", UILanguageFile); | |
425 | - // \0\0 で終わる必要があるので 2 バイト | |
426 | - memcpy(pf, uimsg, sizeof(FNFilter) - (pf - FNFilter + 2)); | |
398 | + FNFilter = GetCommonDialogFilterA(FileSendFilter, UILanguageFile); | |
427 | 399 | |
428 | 400 | memset(&ofn, 0, sizeof(OPENFILENAME)); |
429 | 401 | ofn.lStructSize = get_OPENFILENAME_SIZE(); |
@@ -464,6 +436,8 @@ | ||
464 | 436 | } |
465 | 437 | |
466 | 438 | Ok = GetOpenFileName(&ofn); |
439 | + free(FNFilter); | |
440 | + | |
467 | 441 | if (Ok) { |
468 | 442 | /* count number of file names */ |
469 | 443 | len = strlen(fv->FnStrMem); |
@@ -798,23 +772,19 @@ | ||
798 | 772 | BOOL WINAPI GetXFname(HWND HWin, BOOL Receive, LPLONG Option, PFileVar fv, PCHAR CurDir) |
799 | 773 | { |
800 | 774 | char uimsg[MAX_UIMSG]; |
801 | - char FNFilter[sizeof(FileSendFilter)*2+128], *pf; | |
775 | + char *FNFilter; | |
802 | 776 | OPENFILENAME ofn; |
803 | 777 | LONG opt; |
804 | 778 | char TempDir[MAXPATHLEN]; |
805 | 779 | BOOL Ok; |
806 | 780 | |
807 | - memset(FNFilter, 0, sizeof(FNFilter)); /* Set up for double null at end */ | |
808 | - | |
809 | 781 | /* save current dir */ |
810 | 782 | _getcwd(TempDir,sizeof(TempDir)); |
811 | 783 | |
812 | 784 | fv->FullName[0] = 0; |
813 | - memset(FNFilter, 0, sizeof(FNFilter)); /* Set up for double null at end */ | |
814 | 785 | memset(&ofn, 0, sizeof(OPENFILENAME)); |
815 | 786 | |
816 | 787 | strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE); |
817 | - pf = FNFilter; | |
818 | 788 | if (Receive) { |
819 | 789 | get_lang_msg("FILEDLG_TRANS_TITLE_XRCV", uimsg, sizeof(uimsg), TitXRcv, UILanguageFile); |
820 | 790 | strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); |
@@ -822,15 +792,12 @@ | ||
822 | 792 | else { |
823 | 793 | get_lang_msg("FILEDLG_TRANS_TITLE_XSEND", uimsg, sizeof(uimsg), TitXSend, UILanguageFile); |
824 | 794 | strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE); |
795 | + } | |
796 | + | |
797 | + // フィルタがワイルドカードではなく、そのファイルが存在する場合 | |
798 | + // あらかじめデフォルトのファイル名を入れておく (2008.5.18 maya) | |
799 | + if (!Receive) { | |
825 | 800 | if (strlen(FileSendFilter) > 0) { |
826 | - get_lang_msg("FILEDLG_USER_FILTER_NAME", uimsg, sizeof(uimsg), "User define", UILanguageFile); | |
827 | - _snprintf_s(FNFilter, sizeof(FNFilter), _TRUNCATE, "%s(%s)", uimsg, FileSendFilter); | |
828 | - pf = pf + strlen(FNFilter) + 1; | |
829 | - strncpy_s(pf, sizeof(FNFilter)-(pf - FNFilter) ,FileSendFilter, _TRUNCATE); | |
830 | - pf = pf + strlen(pf) + 1; | |
831 | - | |
832 | - // フィルタがワイルドカードではなく、そのファイルが存在する場合 | |
833 | - // あらかじめデフォルトのファイル名を入れておく (2008.5.18 maya) | |
834 | 801 | if (!isInvalidFileNameChar(FileSendFilter)) { |
835 | 802 | char file[MAX_PATH]; |
836 | 803 | strncpy_s(file, sizeof(file), CurDir, _TRUNCATE); |
@@ -843,9 +810,7 @@ | ||
843 | 810 | } |
844 | 811 | } |
845 | 812 | |
846 | - get_lang_msg("FILEDLG_ALL_FILTER", uimsg, sizeof(uimsg), "All(*.*)\\0*.*\\0\\0", UILanguageFile); | |
847 | - // \0\0 で終わる必要があるので 2 バイト | |
848 | - memcpy(pf, uimsg, sizeof(FNFilter) - (pf - FNFilter + 2)); | |
813 | + FNFilter = GetCommonDialogFilterA(Receive == TRUE ? NULL : FileSendFilter, UILanguageFile); | |
849 | 814 | |
850 | 815 | ofn.lStructSize = get_OPENFILENAME_SIZE(); |
851 | 816 | ofn.hwndOwner = HWin; |
@@ -878,6 +843,7 @@ | ||
878 | 843 | else { |
879 | 844 | Ok = GetSaveFileName(&ofn); |
880 | 845 | } |
846 | + free(FNFilter); | |
881 | 847 | |
882 | 848 | if (Ok) { |
883 | 849 | fv->DirLen = ofn.nFileOffset; |
@@ -48,6 +48,7 @@ | ||
48 | 48 | #include "codeconv.h" |
49 | 49 | #include "layer_for_unicode.h" |
50 | 50 | #include "ttlib.h" |
51 | +#include "dlglib.h" | |
51 | 52 | |
52 | 53 | // add 'clipb2var' (2006.9.17 maya) |
53 | 54 | WORD TTLClipb2Var() |
@@ -157,7 +158,8 @@ | ||
157 | 158 | |
158 | 159 | SetInputStr(""); |
159 | 160 | if (CheckVar("inputstr", &ValType, &VarId) && (ValType==TypString)) { |
160 | - wchar_t uimsg[MAX_UIMSG]; | |
161 | + wchar_t *FNFilter = GetCommonDialogFilterW(NULL, UILanguageFile); | |
162 | + | |
161 | 163 | OPENFILENAMEW ofn = {}; |
162 | 164 | wchar_t filename[MAX_PATH]; |
163 | 165 | filename[0] = 0; |
@@ -166,8 +168,7 @@ | ||
166 | 168 | ofn.lpstrTitle = Str1T; |
167 | 169 | ofn.lpstrFile = filename; |
168 | 170 | ofn.nMaxFile = _countof(filename); |
169 | - get_lang_msgW("FILEDLG_ALL_FILTER", uimsg, _countof(uimsg), L"All(*.*)\\0*.*\\0\\0", UILanguageFile); | |
170 | - ofn.lpstrFilter = uimsg; | |
171 | + ofn.lpstrFilter = FNFilter; | |
171 | 172 | ofn.lpstrInitialDir = NULL; |
172 | 173 | if (strlen(InitDir) > 0) { |
173 | 174 | ofn.lpstrInitialDir = InitDirT; |
@@ -182,7 +183,7 @@ | ||
182 | 183 | ofn.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT; |
183 | 184 | ret = _GetOpenFileNameW(&ofn); |
184 | 185 | } |
185 | - | |
186 | + free(FNFilter); | |
186 | 187 | char *filenameU8 = ToU8W(filename); |
187 | 188 | SetStrVal(VarId, filenameU8); |
188 | 189 | free(filenameU8); |