OSDN Git Service

Modify documents.
[ffftp/ffftp.git] / statuswin.c
1 /*=============================================================================\r
2 *\r
3 *                                                       ステータスウインドウ\r
4 *\r
5 ===============================================================================\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.\r
7 /\r
8 / Redistribution and use in source and binary forms, with or without \r
9 / modification, are permitted provided that the following conditions \r
10 / are met:\r
11 /\r
12 /  1. Redistributions of source code must retain the above copyright \r
13 /     notice, this list of conditions and the following disclaimer.\r
14 /  2. Redistributions in binary form must reproduce the above copyright \r
15 /     notice, this list of conditions and the following disclaimer in the \r
16 /     documentation and/or other materials provided with the distribution.\r
17 /\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR \r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES \r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. \r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, \r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF \r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF \r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
28 /============================================================================*/\r
29 \r
30 #define  STRICT\r
31 // IPv6対応\r
32 #include <winsock2.h>\r
33 #include <windows.h>\r
34 #include <stdio.h>\r
35 #include <stdlib.h>\r
36 #include <string.h>\r
37 #include <mbstring.h>\r
38 #include <malloc.h>\r
39 #include <windowsx.h>\r
40 #include <commctrl.h>\r
41 #include <stdarg.h>\r
42 // IPv6対応\r
43 //#include <winsock.h>\r
44 \r
45 #include "common.h"\r
46 #include "resource.h"\r
47 \r
48 \r
49 /*===== ローカルなワーク =====*/\r
50 \r
51 static HWND hWndSbar = NULL;\r
52 static int SbarColWidth[5] = { 70, 230, 410, 570, -1 };\r
53 \r
54 \r
55 \r
56 /*----- ステータスウインドウを作成する ----------------------------------------\r
57 *\r
58 *       Parameter\r
59 *               HWND hWnd : 親ウインドウのウインドウハンドル\r
60 *               HINSTANCE hInst : インスタンスハンドル\r
61 *\r
62 *       Return Value\r
63 *               int ステータス\r
64 *                       FFFTP_SUCCESS/FFFTP_FAIL\r
65 *----------------------------------------------------------------------------*/\r
66 \r
67 int MakeStatusBarWindow(HWND hWnd, HINSTANCE hInst)\r
68 {\r
69         int Sts;\r
70         // 高DPI対応\r
71         int i;\r
72 \r
73         Sts = FFFTP_FAIL;\r
74         hWndSbar = CreateWindowEx(0,\r
75                         STATUSCLASSNAME, NULL,\r
76                         WS_CHILD | SBS_SIZEGRIP | WS_CLIPSIBLINGS | SBT_NOBORDERS,\r
77                         0, 0, 0, 0,\r
78                         hWnd, (HMENU)1500, hInst, NULL);\r
79 \r
80         if(hWndSbar != NULL)\r
81         {\r
82                 // 高DPI対応\r
83                 for(i = 0; i < sizeof(SbarColWidth) / sizeof(int) - 1; i++)\r
84                         SbarColWidth[i] = CalcPixelX(SbarColWidth[i]);\r
85                 SendMessage(hWndSbar, SB_SETPARTS, sizeof(SbarColWidth)/sizeof(int), (LPARAM)SbarColWidth);\r
86                 ShowWindow(hWndSbar, SW_SHOW);\r
87                 Sts = FFFTP_SUCCESS;\r
88         }\r
89         return(Sts);\r
90 }\r
91 \r
92 \r
93 /*----- ステータスウインドウを削除 --------------------------------------------\r
94 *\r
95 *       Parameter\r
96 *               なし\r
97 *\r
98 *       Return Value\r
99 *               なし\r
100 *----------------------------------------------------------------------------*/\r
101 \r
102 void DeleteStatusBarWindow(void)\r
103 {\r
104         if(hWndSbar != NULL)\r
105                 DestroyWindow(hWndSbar);\r
106         return;\r
107 }\r
108 \r
109 \r
110 /*----- ステータスウインドウのウインドウハンドルを返す ------------------------\r
111 *\r
112 *       Parameter\r
113 *               なし\r
114 *\r
115 *       Return Value\r
116 *               HWND ウインドウハンドル\r
117 *----------------------------------------------------------------------------*/\r
118 \r
119 HWND GetSbarWnd(void)\r
120 {\r
121         return(hWndSbar);\r
122 }\r
123 \r
124 \r
125 /*----- カレントウインドウを表示 ----------------------------------------------\r
126 *\r
127 *       Parameter\r
128 *               int Win : ウインドウ番号 (WIN_xxx : -1=なし)\r
129 *\r
130 *       Return Value\r
131 *               なし\r
132 *----------------------------------------------------------------------------*/\r
133 \r
134 void DispCurrentWindow(int Win)\r
135 {\r
136         if(Win == WIN_LOCAL)\r
137                 SendMessage(GetSbarWnd(), SB_SETTEXT, 0 | 0, (LPARAM)MSGJPN245);\r
138         else if(Win == WIN_REMOTE)\r
139                 SendMessage(GetSbarWnd(), SB_SETTEXT, 0 | 0, (LPARAM)MSGJPN246);\r
140         else\r
141                 SendMessage(GetSbarWnd(), SB_SETTEXT, 0 | 0, (LPARAM)"");\r
142         return;\r
143 }\r
144 \r
145 \r
146 /*----- 選択されているファイル数とサイズを表示 --------------------------------\r
147 *\r
148 *       Parameter\r
149 *               なし\r
150 *\r
151 *       Return Value\r
152 *               なし\r
153 *----------------------------------------------------------------------------*/\r
154 \r
155 void DispSelectedSpace(void)\r
156 {\r
157         char Buf1[50];\r
158         char Buf2[50];\r
159         int Win;\r
160 \r
161         Win = WIN_LOCAL;\r
162         if(GetFocus() == GetRemoteHwnd())\r
163                 Win = WIN_REMOTE;\r
164 \r
165         MakeSizeString(GetSelectedTotalSize(Win), Buf1);\r
166         sprintf(Buf2, MSGJPN247, GetSelectedCount(Win), Buf1);\r
167         SendMessage(GetSbarWnd(), SB_SETTEXT, 1 | 0, (LPARAM)Buf2);\r
168         return;\r
169 }\r
170 \r
171 \r
172 /*----- ローカル側の空き容量を表示 --------------------------------------------\r
173 *\r
174 *       Parameter\r
175 *               char *Path : パス名\r
176 *\r
177 *       Return Value\r
178 *               なし\r
179 *----------------------------------------------------------------------------*/\r
180 \r
181 void DispLocalFreeSpace(char *Path)\r
182 {\r
183         char Buf[40];\r
184 \r
185         sprintf(Buf, MSGJPN248, AskLocalFreeSpace(Path));\r
186         SendMessage(GetSbarWnd(), SB_SETTEXT, 2 | 0, (LPARAM)Buf);\r
187         return;\r
188 }\r
189 \r
190 \r
191 /*----- 転送するファイルの数を表示 --------------------------------------------\r
192 *\r
193 *       Parameter\r
194 *               なし\r
195 *\r
196 *       Return Value\r
197 *               なし\r
198 *----------------------------------------------------------------------------*/\r
199 \r
200 void DispTransferFiles(void)\r
201 {\r
202         char Buf[50];\r
203 \r
204         sprintf(Buf, MSGJPN249, AskTransferFileNum());\r
205         SendMessage(GetSbarWnd(), SB_SETTEXT, 3 | 0, (LPARAM)Buf);\r
206         return;\r
207 }\r
208 \r
209 \r
210 /*----- 受信中のバイト数を表示 ------------------------------------------------\r
211 *\r
212 *       Parameter\r
213 *               LONGLONG Size : バイト数 (-1=表示を消す)\r
214 *\r
215 *       Return Value\r
216 *               なし\r
217 *----------------------------------------------------------------------------*/\r
218 \r
219 void DispDownloadSize(LONGLONG Size)\r
220 {\r
221         char Buf[50];\r
222         char Tmp[50];\r
223 \r
224         strcpy(Buf, "");\r
225         if(Size >= 0)\r
226         {\r
227                 MakeSizeString((double)Size, Tmp);\r
228                 sprintf(Buf, MSGJPN250, Tmp);\r
229         }\r
230         SendMessage(GetSbarWnd(), SB_SETTEXT, 4 | 0, (LPARAM)Buf);\r
231         return;\r
232 }\r
233 \r
234 \r