Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /branches/ttcomtester/teraterm/teraterm/ftdlg_lite.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9230 - (hide annotations) (download) (as text)
Mon May 3 15:04:42 2021 UTC (2 years, 11 months ago) by zmatsuo
Original Path: trunk/teraterm/teraterm/ftdlg_lite.cpp
File MIME type: text/x-c++src
File size: 8807 byte(s)
_WIN32_WINNTをコンパイルオプションで指定

- Tera Term は _WIN32_WINNT >= 0x0501 でビルドすることが前提となっている
  - 0x0501=_WIN32_WINNT_WINXP
    - Windows XP
    - Windows Server 2003
  - Visual Studio 2005 のプロジェクトファイルに /D_WIN32_WINNT=0x0501 追加済み(r9191)
- teraterm_conf.h を削除
  - WIN32_WINNT をコンパイルオプションで指定するため r7554 で追加した
  - コマンドラインで明示的に指定するようになったた不要となった
    - SDK 7.0 では _WIN32_WINNT が自動で設定されない
    - SDK 7.0 より新しいSDKでは、特に指定されていない場合、自動で設定される
      - SDKのバージョンによって自動で設定される_WIN32_WINNT の値は異なっている
      - SDK 7.1 の場合 0x0601
      - SDK 10.0.18362.0 の場合 0x0A00
      - sdkddkver.h 内で設定される
        - MinGWの場合は _mingw.h
- Visual Studio 2005 では次のSDKでビルドできることを確認済み
  - SDK 7.0
  - SDK 7.1
- Tera Term は Visual Studio 2005 以上をサポート
  - MSC_VER >= 1400
1 doda 8445 /*
2 nmaya 9048 * (C) 2019- TeraTerm Project
3 doda 8445 * All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without
6     * modification, are permitted provided that the following conditions
7     * are met:
8     *
9     * 1. Redistributions of source code must retain the above copyright
10     * notice, this list of conditions and the following disclaimer.
11     * 2. Redistributions in binary form must reproduce the above copyright
12     * notice, this list of conditions and the following disclaimer in the
13     * documentation and/or other materials provided with the distribution.
14     * 3. The name of the author may not be used to endorse or promote products
15     * derived from this software without specific prior written permission.
16     *
17     * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
18     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27     */
28    
29     /* TERATERM.EXE, file transfer dialog box lite */
30    
31     #include <stdio.h>
32     #include <windows.h>
33     #include <commctrl.h>
34     #define _CRTDBG_MAP_ALLOC
35     #include <crtdbg.h>
36    
37     #include "teraterm.h"
38     #include "tttypes.h"
39     #include "ttlib.h"
40     #include "dlglib.h"
41     #include "tt_res.h"
42     #include "teraterml.h"
43    
44     #include "ftdlg_lite.h"
45    
46     // ���� �\�����e
47     // 0-2sec �����v�J�[�\��
48     // 2sec �i��50%���������_�C�A���O���o��/�����������������v������
49    
50     #include "tmfc.h"
51    
52     class PrivateData : public TTCDialog
53     {
54     public:
55     PrivateData() {
56     SmallIcon = NULL;
57     BigIcon = NULL;
58     check_2sec = NULL;
59     show = FALSE;
60     UILanguageFile_ = NULL;
61     Pause = FALSE;
62     observer_ = NULL;
63     }
64    
65     BOOL Create(HINSTANCE hInstance, HWND hParent) {
66     return TTCDialog::Create(hInstance, hParent, IDD_FILETRANSDLG);
67     }
68     void SetUILanguageFile(const char *UILanguageFile) {
69     static const DlgTextInfo TextInfos[] = {
70     { IDC_TRANS_FILENAME, "DLG_FILETRANS_FILENAME" },
71     { IDC_FULLPATH_LABEL, "DLG_FILETRANS_FULLPATH" },
72     { IDC_TRANS_TRANS, "DLG_FILETRANS_TRNAS" },
73     { IDC_TRANS_ELAPSED, "DLG_FILETRANS_ELAPSED" },
74     { IDCANCEL, "DLG_FILETRANS_CLOSE" },
75     { IDC_TRANSPAUSESTART, "DLG_FILETRANS_PAUSE" },
76     { IDC_TRANSHELP, "BTN_HELP" },
77     };
78     UILanguageFile_ = UILanguageFile;
79     SetDlgTexts(m_hWnd, TextInfos, _countof(TextInfos), UILanguageFile_);
80     }
81    
82     void ChangeButton(BOOL PauseFlag)
83     {
84     wchar_t UIMsg[MAX_UIMSG];
85     Pause = PauseFlag;
86     if (Pause) {
87     get_lang_msgW("DLG_FILETRANS_START", UIMsg, _countof(UIMsg), L"&Start", UILanguageFile_);
88     }
89     else {
90     get_lang_msgW("DLG_FILETRANS_PAUSE", UIMsg, _countof(UIMsg), L"Pau&se", UILanguageFile_);
91    
92     }
93     SetDlgItemTextW(IDC_TRANSPAUSESTART, UIMsg);
94     if (observer_ != NULL) {
95     observer_->OnPause(PauseFlag);
96     }
97     }
98    
99     private:
100     virtual BOOL OnInitDialog() {
101     int fuLoad = LR_DEFAULTCOLOR;
102    
103     if (HideDialog) {
104     // Visible = False �����t�H�A�O���E���h�����������������A������������
105     // �������g���X�^�C�� WS_EX_NOACTIVATE ���w�������B
106     // (Windows 2000 �������L��)
107     // WS_EX_NOACTIVATE ���w���������\�����������������^�X�N�o�[����������
108     // ���� WS_EX_APPWINDOW ���w�������B
109     ModifyStyleEx(0, WS_EX_NOACTIVATE | WS_EX_APPWINDOW);
110     }
111    
112     if (IsWindowsNT4()) {
113     fuLoad = LR_VGACOLOR;
114     }
115     SmallIcon = LoadImage(m_hInst,
116     MAKEINTRESOURCE(IDI_TTERM),
117     IMAGE_ICON, 16, 16, fuLoad);
118     ::PostMessage(m_hWnd, WM_SETICON, ICON_SMALL,
119     (LPARAM)SmallIcon);
120    
121     BigIcon = LoadImage(m_hInst,
122     MAKEINTRESOURCE(IDI_TTERM),
123     IMAGE_ICON, 0, 0, fuLoad);
124     ::PostMessage(m_hWnd, WM_SETICON, ICON_BIG,
125     (LPARAM)BigIcon);
126    
127     AddModelessHandle(m_hWnd);
128    
129     if (observer_ == NULL){
130     EnableDlgItem(IDCANCEL, FALSE);
131     EnableDlgItem(IDC_TRANSPAUSESTART, FALSE);
132     EnableDlgItem(IDC_TRANSHELP, FALSE);
133     }
134     return TRUE;
135     }
136    
137     virtual BOOL OnClose()
138     {
139     if (observer_ != NULL) {
140     observer_->OnClose();
141     }
142     return TRUE;
143     }
144    
145     virtual BOOL OnCancel()
146     {
147     return OnClose();
148     }
149    
150     virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
151     {
152     switch (LOWORD(wParam)) {
153     case IDC_TRANSPAUSESTART:
154     ChangeButton(!Pause);
155     return TRUE;
156     case IDC_TRANSHELP:
157     observer_->OnHelp();
158     return TRUE;
159     default:
160     return (TTCDialog::OnCommand(wParam, lParam));
161     }
162     }
163    
164     virtual BOOL PostNcDestroy() {
165     if (SmallIcon) {
166     DestroyIcon((HICON)SmallIcon);
167     SmallIcon = NULL;
168     }
169    
170     if (BigIcon) {
171     DestroyIcon((HICON)BigIcon);
172     BigIcon = NULL;
173     }
174    
175     RemoveModelessHandle(m_hWnd);
176    
177     delete this;
178     return TRUE;
179     }
180    
181     private:
182     HANDLE SmallIcon;
183     HANDLE BigIcon;
184     const char *UILanguageFile_;
185    
186     public:
187     BOOL Pause;
188     BOOL check_2sec;
189     BOOL show;
190     DWORD prev_elapsed;
191     DWORD StartTime;
192     BOOL HideDialog;
193    
194     CFileTransLiteDlg::Observer *observer_;
195     };
196    
197     CFileTransLiteDlg::CFileTransLiteDlg()
198     {
199     pData = NULL;
200     }
201    
202     CFileTransLiteDlg::~CFileTransLiteDlg()
203     {
204     if (pData == NULL) {
205     return;
206     }
207    
208     Destroy();
209     }
210    
211     BOOL CFileTransLiteDlg::Create(HINSTANCE hInstance, HWND hParent, const char *UILanguageFile)
212     {
213     pData = new PrivateData();
214     pData->check_2sec = FALSE;
215     pData->show = FALSE;
216     pData->Pause = FALSE;
217     pData->HideDialog = FALSE;
218    
219     BOOL Ok = pData->Create(hInstance, hParent);
220     pData->SetUILanguageFile(UILanguageFile);
221    
222     HWND hWnd = ::GetDlgItem(pData->m_hWnd, IDC_TRANSPROGRESS);
223     ::SendMessage(hWnd, PBM_SETRANGE, (WPARAM)0, MAKELPARAM(0, 100));
224     ::SendMessage(hWnd, PBM_SETSTEP, (WPARAM)1, 0);
225     ::SendMessage(hWnd, PBM_SETPOS, (WPARAM)0, 0);
226     ::ShowWindow(hWnd, SW_SHOW);
227    
228     pData->SetDlgItemTextA(IDC_TRANS_ETIME, "0:00");
229     pData->StartTime = GetTickCount();
230     pData->prev_elapsed = 0;
231    
232     return Ok;
233     }
234    
235     void CFileTransLiteDlg::ChangeButton(BOOL PauseFlag)
236     {
237     pData->ChangeButton(PauseFlag);
238     }
239    
240     void CFileTransLiteDlg::RefreshNum(size_t ByteCount, size_t FileSize)
241     {
242     const DWORD now = GetTickCount();
243    
244     if (!pData->check_2sec) {
245     DWORD elapsed_ms = now - pData->StartTime;
246     if (elapsed_ms > 2 * 1000) {
247     // 2sec�o��
248     pData->check_2sec = TRUE;
249     if ((100.0 * (double)ByteCount / (double)FileSize) < 50) {
250     // 50%����������
251     pData->ShowWindow(SW_SHOWNORMAL);
252     }
253     }
254     }
255    
256     char NumStr[24];
257     DWORD elapsed = (now - pData->StartTime) / 1000;
258     if (elapsed != pData->prev_elapsed && elapsed != 0) {
259     char elapsed_str[24];
260     _snprintf_s(elapsed_str, sizeof(elapsed_str), _TRUNCATE, "%ld:%02ld",
261     elapsed / 60, elapsed % 60);
262    
263     char speed_str[24];
264     size_t rate2 = ByteCount / elapsed;
265     if (rate2 < 1200) {
266     _snprintf_s(speed_str, sizeof(speed_str), _TRUNCATE, "%lldBytes/s", (unsigned long long)rate2);
267     }
268     else if (rate2 < 1200000) {
269     _snprintf_s(speed_str, sizeof(speed_str), _TRUNCATE, "%lld.%02lldKB/s",
270     (unsigned long long)(rate2 / 1000), (unsigned long long)(rate2 / 10 % 100));
271     }
272     else {
273     _snprintf_s(speed_str, sizeof(speed_str), _TRUNCATE, "%lld.%02lldMB/s",
274     (unsigned long long)(rate2 / (1000*1000)), (unsigned long long)(rate2 / 10000 % 100));
275     }
276     _snprintf_s(NumStr, sizeof(NumStr), _TRUNCATE, "%s (%s)", elapsed_str, speed_str);
277     pData->SetDlgItemTextA(IDC_TRANS_ETIME, NumStr);
278     pData->prev_elapsed = elapsed;
279     }
280    
281     if (FileSize > 0) {
282     double rate = 100.0 * (double)ByteCount / (double)FileSize;
283     pData->SendDlgItemMessage(IDC_TRANSPROGRESS, PBM_SETPOS, (WPARAM)rate, 0);
284     _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u (%3.1f%%)", (int)ByteCount, rate);
285     }
286     else {
287     _snprintf_s(NumStr,sizeof(NumStr),_TRUNCATE,"%u", (int)ByteCount);
288     }
289     pData->SetDlgItemTextA(IDC_TRANSBYTES, NumStr);
290     }
291    
292     void CFileTransLiteDlg::SetCaption(const wchar_t *caption)
293     {
294     pData->SetWindowTextW(caption);
295     }
296    
297     void CFileTransLiteDlg::SetFilename(const wchar_t *filename)
298     {
299     pData->SetDlgItemTextW(IDC_TRANSFNAME, filename);
300     pData->SetDlgItemTextW(IDC_EDIT_FULLPATH, filename);
301     }
302    
303     void CFileTransLiteDlg::SetObserver(CFileTransLiteDlg::Observer *observer)
304     {
305     pData->observer_ = observer;
306     BOOL enable = observer != NULL;
307     pData->EnableDlgItem(IDCANCEL, enable);
308     pData->EnableDlgItem(IDC_TRANSPAUSESTART, enable);
309     pData->EnableDlgItem(IDC_TRANSHELP, enable);
310     }
311    
312     void CFileTransLiteDlg::Destroy()
313     {
314     pData->EndDialog(IDOK);
315     pData = NULL;
316     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26