1 |
maya |
3227 |
/* Tera Term |
2 |
|
|
Copyright(C) 1994-1998 T. Teranishi |
3 |
|
|
All rights reserved. */ |
4 |
|
|
/* IPv6 modification is Copyright(C) 2000 Jun-ya Kato <kato@win6.jp> */ |
5 |
|
|
|
6 |
|
|
/* TERATERM.EXE, VT window */ |
7 |
|
|
|
8 |
|
|
#include "stdafx.h" |
9 |
|
|
#include "teraterm.h" |
10 |
|
|
#include "tttypes.h" |
11 |
|
|
|
12 |
|
|
#include "ttcommon.h" |
13 |
|
|
#include "ttwinman.h" |
14 |
|
|
#include "ttsetup.h" |
15 |
|
|
#include "keyboard.h" |
16 |
|
|
#include "buffer.h" |
17 |
|
|
#include "vtterm.h" |
18 |
|
|
#include "vtdisp.h" |
19 |
|
|
#include "ttdialog.h" |
20 |
|
|
#include "ttime.h" |
21 |
|
|
#include "commlib.h" |
22 |
|
|
#include "clipboar.h" |
23 |
|
|
#include "ttftypes.h" |
24 |
|
|
#include "filesys.h" |
25 |
|
|
#include "telnet.h" |
26 |
|
|
#include "tektypes.h" |
27 |
|
|
#include "tekwin.h" |
28 |
|
|
#include "ttdde.h" |
29 |
|
|
#include "ttlib.h" |
30 |
|
|
#include "helpid.h" |
31 |
|
|
#include "teraprn.h" |
32 |
|
|
#ifndef NO_INET6 |
33 |
|
|
#include <winsock2.h> |
34 |
|
|
#include <ws2tcpip.h> |
35 |
|
|
#else |
36 |
|
|
#include <winsock.h> |
37 |
|
|
#endif /* NO_INET6 */ |
38 |
|
|
#include "ttplug.h" /* TTPLUG */ |
39 |
|
|
|
40 |
|
|
#include <stdio.h> |
41 |
|
|
#include <stdlib.h> |
42 |
|
|
#include <string.h> |
43 |
|
|
#include <locale.h> |
44 |
|
|
|
45 |
|
|
#include <shlobj.h> |
46 |
|
|
#include <io.h> |
47 |
|
|
#include <errno.h> |
48 |
|
|
#include <imagehlp.h> |
49 |
|
|
|
50 |
|
|
#include <windowsx.h> |
51 |
|
|
|
52 |
|
|
#include "tt_res.h" |
53 |
|
|
#include "vtwin.h" |
54 |
|
|
#include "addsetting.h" |
55 |
|
|
|
56 |
|
|
#define VTClassName "VTWin32" |
57 |
|
|
|
58 |
|
|
/* mouse buttons */ |
59 |
|
|
#define IdLeftButton 0 |
60 |
|
|
#define IdMiddleButton 1 |
61 |
|
|
#define IdRightButton 2 |
62 |
|
|
|
63 |
|
|
#ifdef _DEBUG |
64 |
|
|
#define new DEBUG_NEW |
65 |
|
|
#undef THIS_FILE |
66 |
|
|
static char THIS_FILE[] = __FILE__; |
67 |
|
|
#endif |
68 |
|
|
|
69 |
|
|
// �E�B���h�E�������{�^�����L�������� (2005.1.15 yutaka) |
70 |
|
|
#define WINDOW_MAXMIMUM_ENABLED 1 |
71 |
|
|
|
72 |
|
|
// WM_COPYDATA�������v���Z�X�����M������ (2005.1.22 yutaka) |
73 |
|
|
#define IPC_BROADCAST_COMMAND 1 // �S�[�������M |
74 |
|
|
#define IPC_MULTICAST_COMMAND 2 // �C�����[���Q�����M |
75 |
|
|
|
76 |
|
|
#define BROADCAST_LOGFILE "broadcast.log" |
77 |
|
|
|
78 |
|
|
static HFONT DlgBroadcastFont; |
79 |
|
|
static HFONT DlgCommentFont; |
80 |
|
|
|
81 |
|
|
// �{���� addsetting.cpp |
82 |
|
|
extern mouse_cursor_t MouseCursor[]; |
83 |
|
|
|
84 |
|
|
///////////////////////////////////////////////////////////////////////////// |
85 |
|
|
// CVTWindow |
86 |
|
|
|
87 |
|
|
BEGIN_MESSAGE_MAP(CVTWindow, CFrameWnd) |
88 |
|
|
//{{AFX_MSG_MAP(CVTWindow) |
89 |
|
|
ON_WM_ACTIVATE() |
90 |
|
|
ON_WM_CHAR() |
91 |
|
|
ON_WM_CLOSE() |
92 |
|
|
ON_WM_DESTROY() |
93 |
|
|
ON_WM_DROPFILES() |
94 |
|
|
ON_WM_GETMINMAXINFO() |
95 |
|
|
ON_WM_HSCROLL() |
96 |
|
|
ON_WM_INITMENUPOPUP() |
97 |
|
|
ON_WM_KEYDOWN() |
98 |
|
|
ON_WM_KEYUP() |
99 |
|
|
ON_WM_KILLFOCUS() |
100 |
|
|
ON_WM_LBUTTONDBLCLK() |
101 |
|
|
ON_WM_LBUTTONDOWN() |
102 |
|
|
ON_WM_LBUTTONUP() |
103 |
|
|
ON_WM_MBUTTONDOWN() |
104 |
|
|
ON_WM_MBUTTONUP() |
105 |
|
|
ON_WM_MOUSEACTIVATE() |
106 |
|
|
ON_WM_MOUSEMOVE() |
107 |
|
|
ON_WM_MOUSEWHEEL() |
108 |
|
|
ON_WM_MOVE() |
109 |
|
|
ON_WM_NCLBUTTONDBLCLK() |
110 |
|
|
ON_WM_NCRBUTTONDOWN() |
111 |
|
|
ON_WM_PAINT() |
112 |
|
|
ON_WM_RBUTTONDOWN() |
113 |
|
|
ON_WM_RBUTTONUP() |
114 |
|
|
ON_WM_SETFOCUS() |
115 |
|
|
ON_WM_SIZE() |
116 |
|
|
ON_WM_SIZING() |
117 |
|
|
ON_WM_SYSCHAR() |
118 |
|
|
ON_WM_SYSCOLORCHANGE() |
119 |
|
|
ON_WM_SYSCOMMAND() |
120 |
|
|
ON_WM_SYSKEYDOWN() |
121 |
|
|
ON_WM_SYSKEYUP() |
122 |
|
|
ON_WM_TIMER() |
123 |
|
|
ON_WM_VSCROLL() |
124 |
|
|
ON_MESSAGE(WM_IME_COMPOSITION,OnIMEComposition) |
125 |
|
|
//<!--by AKASI |
126 |
|
|
ON_MESSAGE(WM_WINDOWPOSCHANGING,OnWindowPosChanging) |
127 |
|
|
ON_MESSAGE(WM_SETTINGCHANGE,OnSettingChange) |
128 |
|
|
ON_MESSAGE(WM_ENTERSIZEMOVE,OnEnterSizeMove) |
129 |
|
|
ON_MESSAGE(WM_EXITSIZEMOVE ,OnExitSizeMove) |
130 |
|
|
//--> |
131 |
|
|
ON_MESSAGE(WM_USER_ACCELCOMMAND, OnAccelCommand) |
132 |
|
|
ON_MESSAGE(WM_USER_CHANGEMENU,OnChangeMenu) |
133 |
|
|
ON_MESSAGE(WM_USER_CHANGETBAR,OnChangeTBar) |
134 |
|
|
ON_MESSAGE(WM_USER_COMMNOTIFY,OnCommNotify) |
135 |
|
|
ON_MESSAGE(WM_USER_COMMOPEN,OnCommOpen) |
136 |
|
|
ON_MESSAGE(WM_USER_COMMSTART,OnCommStart) |
137 |
|
|
ON_MESSAGE(WM_USER_DDEEND,OnDdeEnd) |
138 |
|
|
ON_MESSAGE(WM_USER_DLGHELP2,OnDlgHelp) |
139 |
|
|
ON_MESSAGE(WM_USER_FTCANCEL,OnFileTransEnd) |
140 |
|
|
ON_MESSAGE(WM_USER_GETSERIALNO,OnGetSerialNo) |
141 |
|
|
ON_MESSAGE(WM_USER_KEYCODE,OnKeyCode) |
142 |
|
|
ON_MESSAGE(WM_USER_PROTOCANCEL,OnProtoEnd) |
143 |
|
|
ON_MESSAGE(WM_USER_CHANGETITLE,OnChangeTitle) |
144 |
|
|
ON_MESSAGE(WM_COPYDATA,OnReceiveIpcMessage) |
145 |
|
|
ON_COMMAND(ID_FILE_NEWCONNECTION, OnFileNewConnection) |
146 |
|
|
ON_COMMAND(ID_FILE_DUPLICATESESSION, OnDuplicateSession) |
147 |
|
|
ON_COMMAND(ID_FILE_CYGWINCONNECTION, OnCygwinConnection) |
148 |
|
|
ON_COMMAND(ID_FILE_TERATERMMENU, OnTTMenuLaunch) |
149 |
|
|
ON_COMMAND(ID_FILE_LOGMEIN, OnLogMeInLaunch) |
150 |
|
|
ON_COMMAND(ID_FILE_LOG, OnFileLog) |
151 |
|
|
ON_COMMAND(ID_FILE_COMMENTTOLOG, OnCommentToLog) |
152 |
|
|
ON_COMMAND(ID_FILE_VIEWLOG, OnViewLog) |
153 |
|
|
ON_COMMAND(ID_FILE_SHOWLOGDIALOG, OnShowLogDialog) |
154 |
|
|
ON_COMMAND(ID_FILE_REPLAYLOG, OnReplayLog) |
155 |
|
|
ON_COMMAND(ID_FILE_SENDFILE, OnFileSend) |
156 |
|
|
ON_COMMAND(ID_FILE_KERMITRCV, OnFileKermitRcv) |
157 |
|
|
ON_COMMAND(ID_FILE_KERMITGET, OnFileKermitGet) |
158 |
|
|
ON_COMMAND(ID_FILE_KERMITSEND, OnFileKermitSend) |
159 |
|
|
ON_COMMAND(ID_FILE_KERMITFINISH, OnFileKermitFinish) |
160 |
|
|
ON_COMMAND(ID_FILE_XRCV, OnFileXRcv) |
161 |
|
|
ON_COMMAND(ID_FILE_XSEND, OnFileXSend) |
162 |
|
|
ON_COMMAND(ID_FILE_YRCV, OnFileYRcv) |
163 |
|
|
ON_COMMAND(ID_FILE_YSEND, OnFileYSend) |
164 |
|
|
ON_COMMAND(ID_FILE_ZRCV, OnFileZRcv) |
165 |
|
|
ON_COMMAND(ID_FILE_ZSEND, OnFileZSend) |
166 |
|
|
ON_COMMAND(ID_FILE_BPRCV, OnFileBPRcv) |
167 |
|
|
ON_COMMAND(ID_FILE_BPSEND, OnFileBPSend) |
168 |
|
|
ON_COMMAND(ID_FILE_QVRCV, OnFileQVRcv) |
169 |
|
|
ON_COMMAND(ID_FILE_QVSEND, OnFileQVSend) |
170 |
|
|
ON_COMMAND(ID_FILE_CHANGEDIR, OnFileChangeDir) |
171 |
|
|
ON_COMMAND(ID_FILE_PRINT2, OnFilePrint) |
172 |
|
|
ON_COMMAND(ID_FILE_DISCONNECT, OnFileDisconnect) |
173 |
|
|
ON_COMMAND(ID_FILE_EXIT, OnFileExit) |
174 |
|
|
ON_COMMAND(ID_EDIT_COPY2, OnEditCopy) |
175 |
|
|
ON_COMMAND(ID_EDIT_COPYTABLE, OnEditCopyTable) |
176 |
|
|
ON_COMMAND(ID_EDIT_PASTE2, OnEditPaste) |
177 |
|
|
ON_COMMAND(ID_EDIT_PASTECR, OnEditPasteCR) |
178 |
|
|
ON_COMMAND(ID_EDIT_CLEARSCREEN, OnEditClearScreen) |
179 |
|
|
ON_COMMAND(ID_EDIT_CLEARBUFFER, OnEditClearBuffer) |
180 |
|
|
ON_COMMAND(ID_EDIT_CANCELSELECT, OnEditCancelSelection) |
181 |
|
|
ON_COMMAND(ID_EDIT_SELECTALL, OnEditSelectAllBuffer) |
182 |
|
|
ON_COMMAND(ID_EDIT_SELECTSCREEN, OnEditSelectScreenBuffer) |
183 |
|
|
ON_COMMAND(ID_SETUP_ADDITIONALSETTINGS, OnExternalSetup) |
184 |
|
|
ON_COMMAND(ID_SETUP_TERMINAL, OnSetupTerminal) |
185 |
|
|
ON_COMMAND(ID_SETUP_WINDOW, OnSetupWindow) |
186 |
|
|
ON_COMMAND(ID_SETUP_FONT, OnSetupFont) |
187 |
|
|
ON_COMMAND(ID_SETUP_KEYBOARD, OnSetupKeyboard) |
188 |
|
|
ON_COMMAND(ID_SETUP_SERIALPORT, OnSetupSerialPort) |
189 |
|
|
ON_COMMAND(ID_SETUP_TCPIP, OnSetupTCPIP) |
190 |
|
|
ON_COMMAND(ID_SETUP_GENERAL, OnSetupGeneral) |
191 |
|
|
ON_COMMAND(ID_SETUP_SAVE, OnSetupSave) |
192 |
|
|
ON_COMMAND(ID_SETUP_RESTORE, OnSetupRestore) |
193 |
|
|
ON_COMMAND(ID_SETUP_LOADKEYMAP, OnSetupLoadKeyMap) |
194 |
|
|
ON_COMMAND(ID_CONTROL_RESETTERMINAL, OnControlResetTerminal) |
195 |
|
|
ON_COMMAND(ID_CONTROL_RESETREMOTETITLE, OnControlResetRemoteTitle) |
196 |
|
|
ON_COMMAND(ID_CONTROL_AREYOUTHERE, OnControlAreYouThere) |
197 |
|
|
ON_COMMAND(ID_CONTROL_SENDBREAK, OnControlSendBreak) |
198 |
|
|
ON_COMMAND(ID_CONTROL_RESETPORT, OnControlResetPort) |
199 |
|
|
ON_COMMAND(ID_CONTROL_BROADCASTCOMMAND, OnControlBroadcastCommand) |
200 |
|
|
ON_COMMAND(ID_CONTROL_OPENTEK, OnControlOpenTEK) |
201 |
|
|
ON_COMMAND(ID_CONTROL_CLOSETEK, OnControlCloseTEK) |
202 |
|
|
ON_COMMAND(ID_CONTROL_MACRO, OnControlMacro) |
203 |
|
|
ON_COMMAND(ID_WINDOW_WINDOW, OnWindowWindow) |
204 |
|
|
ON_COMMAND(ID_HELP_INDEX2, OnHelpIndex) |
205 |
|
|
ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout) |
206 |
|
|
//}}AFX_MSG_MAP |
207 |
|
|
END_MESSAGE_MAP() |
208 |
|
|
|
209 |
|
|
///////////////////////////////////////////////////////////////////////////// |
210 |
|
|
// CVTWindow constructor |
211 |
|
|
|
212 |
|
|
|
213 |
|
|
static BOOL MySetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags) |
214 |
|
|
{ |
215 |
|
|
typedef BOOL (WINAPI *func)(HWND,COLORREF,BYTE,DWORD); |
216 |
|
|
static HMODULE g_hmodUser32 = NULL; |
217 |
|
|
static func g_pSetLayeredWindowAttributes = NULL; |
218 |
|
|
|
219 |
|
|
if (g_hmodUser32 == NULL) { |
220 |
|
|
g_hmodUser32 = LoadLibrary("user32.dll"); |
221 |
|
|
if (g_hmodUser32 == NULL) |
222 |
|
|
return FALSE; |
223 |
|
|
|
224 |
|
|
g_pSetLayeredWindowAttributes = |
225 |
|
|
(func)GetProcAddress(g_hmodUser32, "SetLayeredWindowAttributes"); |
226 |
|
|
} |
227 |
|
|
|
228 |
|
|
if (g_pSetLayeredWindowAttributes == NULL) |
229 |
|
|
return FALSE; |
230 |
|
|
|
231 |
|
|
return g_pSetLayeredWindowAttributes(hwnd, crKey, |
232 |
|
|
bAlpha, dwFlags); |
233 |
|
|
} |
234 |
|
|
|
235 |
|
|
|
236 |
|
|
// Tera Term�N������URL������mouse over������������ (2005.4.2 yutaka) |
237 |
|
|
extern "C" void SetMouseCursor(char *cursor) |
238 |
|
|
{ |
239 |
|
|
HCURSOR hc; |
240 |
|
|
LPCTSTR name = NULL; |
241 |
|
|
int i; |
242 |
|
|
|
243 |
|
|
for (i = 0 ; MouseCursor[i].name ; i++) { |
244 |
|
|
if (_stricmp(cursor, MouseCursor[i].name) == 0) { |
245 |
|
|
name = MouseCursor[i].id; |
246 |
|
|
break; |
247 |
|
|
} |
248 |
|
|
} |
249 |
|
|
if (name == NULL) |
250 |
|
|
return; |
251 |
|
|
|
252 |
|
|
|
253 |
|
|
hc = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(name), IMAGE_CURSOR, |
254 |
|
|
0, 0, LR_DEFAULTSIZE | LR_SHARED); |
255 |
|
|
|
256 |
|
|
if (hc != NULL) { |
257 |
|
|
SetClassLongPtr(HVTWin, GCLP_HCURSOR, (LONG_PTR)hc); |
258 |
|
|
} |
259 |
|
|
} |
260 |
|
|
|
261 |
|
|
|
262 |
|
|
void SetWindowStyle(TTTSet *ts) |
263 |
|
|
{ |
264 |
|
|
LONG_PTR lp; |
265 |
|
|
|
266 |
|
|
SetMouseCursor(ts->MouseCursorName); |
267 |
|
|
|
268 |
|
|
// 2006/03/16 by 337: BGUseAlphaBlendAPI��On������Layered���������� |
269 |
|
|
//if (ts->EtermLookfeel.BGUseAlphaBlendAPI) { |
270 |
|
|
// �A���t�@�l��255�������A�����������������}�����������������������������B(2006.4.1 yutaka) |
271 |
|
|
// �����o�������A�l�����X�����������������������f�����B(2007.10.19 maya) |
272 |
|
|
if (ts->AlphaBlend < 255) { |
273 |
|
|
lp = GetWindowLongPtr(HVTWin, GWL_EXSTYLE); |
274 |
|
|
if (lp != 0) { |
275 |
|
|
SetWindowLongPtr(HVTWin, GWL_EXSTYLE, lp | WS_EX_LAYERED); |
276 |
|
|
MySetLayeredWindowAttributes(HVTWin, 0, ts->AlphaBlend, LWA_ALPHA); |
277 |
|
|
} |
278 |
|
|
} |
279 |
|
|
// �A���t�@�l�� 255 �������A�����������������������`�������B(2007.10.22 maya) |
280 |
|
|
else { |
281 |
|
|
lp = GetWindowLongPtr(HVTWin, GWL_EXSTYLE); |
282 |
|
|
if (lp != 0) { |
283 |
|
|
SetWindowLongPtr(HVTWin, GWL_EXSTYLE, lp & ~WS_EX_LAYERED); |
284 |
|
|
RedrawWindow(HVTWin, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME); |
285 |
|
|
} |
286 |
|
|
} |
287 |
|
|
} |
288 |
|
|
|
289 |
|
|
|
290 |
|
|
// |
291 |
|
|
// ���O�n���h�����t�b�N�i�X�^�b�N�g���[�X���_���v�j |
292 |
|
|
// |
293 |
|
|
// cf. http://svn.collab.net/repos/svn/trunk/subversion/libsvn_subr/win32_crashrpt.c |
294 |
|
|
// (2007.9.30 yutaka) |
295 |
|
|
// |
296 |
|
|
// ���O�R�[�h������������������ |
297 |
|
|
static char *GetExceptionString(int exception) |
298 |
|
|
{ |
299 |
|
|
#define EXCEPTION(x) case EXCEPTION_##x: return (#x); |
300 |
|
|
static char buf[16]; |
301 |
|
|
|
302 |
|
|
switch (exception) |
303 |
|
|
{ |
304 |
|
|
EXCEPTION(ACCESS_VIOLATION) |
305 |
|
|
EXCEPTION(DATATYPE_MISALIGNMENT) |
306 |
|
|
EXCEPTION(BREAKPOINT) |
307 |
|
|
EXCEPTION(SINGLE_STEP) |
308 |
|
|
EXCEPTION(ARRAY_BOUNDS_EXCEEDED) |
309 |
|
|
EXCEPTION(FLT_DENORMAL_OPERAND) |
310 |
|
|
EXCEPTION(FLT_DIVIDE_BY_ZERO) |
311 |
|
|
EXCEPTION(FLT_INEXACT_RESULT) |
312 |
|
|
EXCEPTION(FLT_INVALID_OPERATION) |
313 |
|
|
EXCEPTION(FLT_OVERFLOW) |
314 |
|
|
EXCEPTION(FLT_STACK_CHECK) |
315 |
|
|
EXCEPTION(FLT_UNDERFLOW) |
316 |
|
|
EXCEPTION(INT_DIVIDE_BY_ZERO) |
317 |
|
|
EXCEPTION(INT_OVERFLOW) |
318 |
|
|
EXCEPTION(PRIV_INSTRUCTION) |
319 |
|
|
EXCEPTION(IN_PAGE_ERROR) |
320 |
|
|
EXCEPTION(ILLEGAL_INSTRUCTION) |
321 |
|
|
EXCEPTION(NONCONTINUABLE_EXCEPTION) |
322 |
|
|
EXCEPTION(STACK_OVERFLOW) |
323 |
|
|
EXCEPTION(INVALID_DISPOSITION) |
324 |
|
|
EXCEPTION(GUARD_PAGE) |
325 |
|
|
EXCEPTION(INVALID_HANDLE) |
326 |
|
|
|
327 |
|
|
default: |
328 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "0x%x", exception); |
329 |
|
|
return buf; |
330 |
|
|
//return "UNKNOWN_ERROR"; |
331 |
|
|
} |
332 |
|
|
#undef EXCEPTION |
333 |
|
|
} |
334 |
|
|
|
335 |
|
|
/* ���O�������������������o���������\�������A���O�t�B���^���� */ |
336 |
|
|
static LONG CALLBACK ApplicationFaultHandler(EXCEPTION_POINTERS *ExInfo) |
337 |
|
|
{ |
338 |
|
|
HGLOBAL gptr; |
339 |
|
|
STACKFRAME sf; |
340 |
|
|
BOOL bResult; |
341 |
|
|
PIMAGEHLP_SYMBOL pSym; |
342 |
|
|
DWORD Disp; |
343 |
|
|
HANDLE hProcess = GetCurrentProcess(); |
344 |
|
|
HANDLE hThread = GetCurrentThread(); |
345 |
|
|
IMAGEHLP_MODULE ih_module; |
346 |
|
|
IMAGEHLP_LINE ih_line; |
347 |
|
|
int frame; |
348 |
|
|
char msg[3072], buf[256]; |
349 |
|
|
HMODULE h, h2; |
350 |
|
|
|
351 |
|
|
// Windows98/Me/NT4�����������������X�L�b�v�����B(2007.10.9 yutaka) |
352 |
|
|
h2 = LoadLibrary("imagehlp.dll"); |
353 |
|
|
if (((h = GetModuleHandle("imagehlp.dll")) == NULL) || |
354 |
|
|
(GetProcAddress(h, "SymGetLineFromAddr") == NULL)) { |
355 |
|
|
FreeLibrary(h2); |
356 |
|
|
goto error; |
357 |
|
|
} |
358 |
|
|
FreeLibrary(h2); |
359 |
|
|
|
360 |
|
|
/* �V���{�������i�[�p�o�b�t�@�������� */ |
361 |
|
|
gptr = GlobalAlloc(GMEM_FIXED, 10000); |
362 |
|
|
if (gptr == NULL) |
363 |
|
|
goto error; |
364 |
|
|
pSym = (PIMAGEHLP_SYMBOL)GlobalLock(gptr); |
365 |
|
|
ZeroMemory(pSym, sizeof(IMAGEHLP_SYMBOL)); |
366 |
|
|
pSym->SizeOfStruct = 10000; |
367 |
|
|
pSym->MaxNameLength = 10000 - sizeof(IMAGEHLP_SYMBOL); |
368 |
|
|
|
369 |
|
|
/* �X�^�b�N�t���[���������� */ |
370 |
|
|
ZeroMemory(&sf, sizeof(sf)); |
371 |
|
|
sf.AddrPC.Offset = ExInfo->ContextRecord->Eip; |
372 |
|
|
sf.AddrStack.Offset = ExInfo->ContextRecord->Esp; |
373 |
|
|
sf.AddrFrame.Offset = ExInfo->ContextRecord->Ebp; |
374 |
|
|
sf.AddrPC.Mode = AddrModeFlat; |
375 |
|
|
sf.AddrStack.Mode = AddrModeFlat; |
376 |
|
|
sf.AddrFrame.Mode = AddrModeFlat; |
377 |
|
|
|
378 |
|
|
/* �V���{���n���h���������� */ |
379 |
|
|
SymInitialize(hProcess, NULL, TRUE); |
380 |
|
|
|
381 |
|
|
// ���W�X�^�_���v |
382 |
|
|
msg[0] = '\0'; |
383 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "eax=%08X ebx=%08X ecx=%08X edx=%08X esi=%08X edi=%08X\r\n" |
384 |
|
|
"ebp=%08X esp=%08X eip=%08X efl=%08X\r\n" |
385 |
|
|
"cs=%04X ss=%04X ds=%04X es=%04X fs=%04X gs=%04X\r\n", |
386 |
|
|
ExInfo->ContextRecord->Eax, |
387 |
|
|
ExInfo->ContextRecord->Ebx, |
388 |
|
|
ExInfo->ContextRecord->Ecx, |
389 |
|
|
ExInfo->ContextRecord->Edx, |
390 |
|
|
ExInfo->ContextRecord->Esi, |
391 |
|
|
ExInfo->ContextRecord->Edi, |
392 |
|
|
ExInfo->ContextRecord->Ebp, |
393 |
|
|
ExInfo->ContextRecord->Esp, |
394 |
|
|
ExInfo->ContextRecord->Eip, |
395 |
|
|
ExInfo->ContextRecord->EFlags, |
396 |
|
|
ExInfo->ContextRecord->SegCs, |
397 |
|
|
ExInfo->ContextRecord->SegSs, |
398 |
|
|
ExInfo->ContextRecord->SegDs, |
399 |
|
|
ExInfo->ContextRecord->SegEs, |
400 |
|
|
ExInfo->ContextRecord->SegFs, |
401 |
|
|
ExInfo->ContextRecord->SegGs |
402 |
|
|
); |
403 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
404 |
|
|
|
405 |
|
|
if (ExInfo->ExceptionRecord != NULL) { |
406 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "Exception: %s\r\n", GetExceptionString(ExInfo->ExceptionRecord->ExceptionCode)); |
407 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
408 |
|
|
} |
409 |
|
|
|
410 |
|
|
/* �X�^�b�N�t���[���������\���������� */ |
411 |
|
|
frame = 0; |
412 |
|
|
for (;;) { |
413 |
|
|
/* �����X�^�b�N�t���[�������� */ |
414 |
|
|
bResult = StackWalk( |
415 |
|
|
IMAGE_FILE_MACHINE_I386, |
416 |
|
|
hProcess, |
417 |
|
|
hThread, |
418 |
|
|
&sf, |
419 |
|
|
NULL, |
420 |
|
|
NULL, |
421 |
|
|
SymFunctionTableAccess, |
422 |
|
|
SymGetModuleBase, |
423 |
|
|
NULL); |
424 |
|
|
|
425 |
|
|
/* ���s�������A���[�v�������� */ |
426 |
|
|
if (!bResult || sf.AddrFrame.Offset == 0) |
427 |
|
|
break; |
428 |
|
|
|
429 |
|
|
frame++; |
430 |
|
|
|
431 |
|
|
/* �v���O�����J�E���^�i���z�A�h���X�j�������������I�t�Z�b�g������ */ |
432 |
|
|
bResult = SymGetSymFromAddr(hProcess, sf.AddrPC.Offset, &Disp, pSym); |
433 |
|
|
|
434 |
|
|
/* �����������\�� */ |
435 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "#%d 0x%08x in ", frame, sf.AddrPC.Offset); |
436 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
437 |
|
|
if (bResult) { |
438 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s() + 0x%x ", pSym->Name, Disp); |
439 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
440 |
|
|
} else { |
441 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, " --- "); |
442 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
443 |
|
|
} |
444 |
|
|
|
445 |
|
|
// ���s�t�@�C���������� |
446 |
|
|
ZeroMemory( &(ih_module), sizeof(ih_module) ); |
447 |
|
|
ih_module.SizeOfStruct = sizeof(ih_module); |
448 |
|
|
bResult = SymGetModuleInfo( hProcess, sf.AddrPC.Offset, &(ih_module) ); |
449 |
|
|
strncat_s(msg, sizeof(msg), "at ", _TRUNCATE); |
450 |
|
|
if (bResult) { |
451 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s ", ih_module.ImageName ); |
452 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
453 |
|
|
} else { |
454 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s ", "<Unknown Module>" ); |
455 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
456 |
|
|
} |
457 |
|
|
|
458 |
|
|
// �t�@�C�������s���������� |
459 |
|
|
ZeroMemory( &(ih_line), sizeof(ih_line) ); |
460 |
|
|
ih_line.SizeOfStruct = sizeof(ih_line); |
461 |
|
|
bResult = SymGetLineFromAddr( hProcess, sf.AddrPC.Offset, &Disp, &ih_line ); |
462 |
|
|
if (bResult) |
463 |
|
|
{ |
464 |
|
|
_snprintf_s(buf, sizeof(buf), _TRUNCATE, "%s:%lu", ih_line.FileName, ih_line.LineNumber ); |
465 |
|
|
strncat_s(msg, sizeof(msg), buf, _TRUNCATE); |
466 |
|
|
} |
467 |
|
|
|
468 |
|
|
strncat_s(msg, sizeof(msg), "\r\n", _TRUNCATE); |
469 |
|
|
} |
470 |
|
|
|
471 |
|
|
/* ������ */ |
472 |
|
|
SymCleanup(hProcess); |
473 |
|
|
GlobalUnlock(pSym); |
474 |
|
|
GlobalFree(pSym); |
475 |
|
|
|
476 |
|
|
MessageBox(NULL, msg, "Tera Term: Application fault", MB_OK | MB_ICONEXCLAMATION); |
477 |
|
|
|
478 |
|
|
error: |
479 |
|
|
// return (EXCEPTION_EXECUTE_HANDLER); /* ���������v���Z�X���I�������� */ |
480 |
|
|
return (EXCEPTION_CONTINUE_SEARCH); /* ���������m�A�v���P�[�V�����G���[�n�|�b�v�A�b�v���b�Z�[�W�{�b�N�X�������o�� */ |
481 |
|
|
} |
482 |
|
|
|
483 |
|
|
|
484 |
|
|
CVTWindow::CVTWindow() |
485 |
|
|
{ |
486 |
|
|
WNDCLASS wc; |
487 |
|
|
RECT rect; |
488 |
|
|
DWORD Style; |
489 |
|
|
#ifdef ALPHABLEND_TYPE2 |
490 |
|
|
DWORD ExStyle; |
491 |
|
|
#endif |
492 |
|
|
char Temp[MAXPATHLEN]; |
493 |
|
|
char *Param; |
494 |
|
|
int CmdShow; |
495 |
|
|
PKeyMap tempkm; |
496 |
|
|
int fuLoad = LR_DEFAULTCOLOR; |
497 |
|
|
|
498 |
|
|
#ifdef _DEBUG |
499 |
|
|
::_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); |
500 |
|
|
#endif |
501 |
|
|
|
502 |
|
|
// ���O�n���h�����t�b�N (2007.9.30 yutaka) |
503 |
|
|
SetUnhandledExceptionFilter(ApplicationFaultHandler); |
504 |
|
|
|
505 |
|
|
TTXInit(&ts, &cv); /* TTPLUG */ |
506 |
|
|
|
507 |
|
|
CommInit(&cv); |
508 |
|
|
|
509 |
|
|
MsgDlgHelp = RegisterWindowMessage(HELPMSGSTRING); |
510 |
|
|
|
511 |
|
|
if (StartTeraTerm(&ts)) { |
512 |
|
|
/* first instance */ |
513 |
|
|
if (LoadTTSET()) { |
514 |
|
|
/* read setup info from "teraterm.ini" */ |
515 |
|
|
(*ReadIniFile)(ts.SetupFName, &ts); |
516 |
|
|
/* read keycode map from "keyboard.cnf" */ |
517 |
|
|
tempkm = (PKeyMap)malloc(sizeof(TKeyMap)); |
518 |
|
|
if (tempkm!=NULL) { |
519 |
|
|
strncpy_s(Temp, sizeof(Temp), ts.HomeDir, _TRUNCATE); |
520 |
|
|
AppendSlash(Temp,sizeof(Temp)); |
521 |
|
|
strncat_s(Temp,sizeof(Temp),"KEYBOARD.CNF",_TRUNCATE); |
522 |
|
|
(*ReadKeyboardCnf)(Temp,tempkm,TRUE); |
523 |
|
|
} |
524 |
|
|
FreeTTSET(); |
525 |
|
|
/* store default sets in TTCMN */ |
526 |
|
|
#if 0 |
527 |
|
|
ChangeDefaultSet(&ts,tempkm); |
528 |
|
|
#else |
529 |
|
|
ChangeDefaultSet(NULL,tempkm); |
530 |
|
|
#endif |
531 |
|
|
if (tempkm!=NULL) free(tempkm); |
532 |
|
|
} |
533 |
|
|
|
534 |
|
|
} else { |
535 |
|
|
// 2�������~���v���Z�X�����������A�f�B�X�N���� TERATERM.INI �������B(2004.11.4 yutaka) |
536 |
|
|
if (LoadTTSET()) { |
537 |
|
|
/* read setup info from "teraterm.ini" */ |
538 |
|
|
(*ReadIniFile)(ts.SetupFName, &ts); |
539 |
|
|
/* read keycode map from "keyboard.cnf" */ |
540 |
|
|
tempkm = (PKeyMap)malloc(sizeof(TKeyMap)); |
541 |
|
|
if (tempkm!=NULL) { |
542 |
|
|
strncpy_s(Temp, sizeof(Temp, ts.HomeDir), ts.HomeDir, _TRUNCATE); |
543 |
|
|
AppendSlash(Temp,sizeof(Temp)); |
544 |
|
|
strncat_s(Temp,sizeof(Temp),"KEYBOARD.CNF",_TRUNCATE); |
545 |
|
|
(*ReadKeyboardCnf)(Temp,tempkm,TRUE); |
546 |
|
|
} |
547 |
|
|
FreeTTSET(); |
548 |
|
|
/* store default sets in TTCMN */ |
549 |
|
|
if (tempkm!=NULL) free(tempkm); |
550 |
|
|
} |
551 |
|
|
|
552 |
|
|
} |
553 |
|
|
|
554 |
|
|
/* Parse command line parameters*/ |
555 |
|
|
// 256�o�C�g�������R�}���h���C���p�����[�^�w�����������ABOF(Buffer Over Flow)�� |
556 |
|
|
// �������o�O���C���B(2007.6.12 maya) |
557 |
|
|
Param = GetCommandLine(); |
558 |
|
|
if (LoadTTSET()) |
559 |
|
|
(*ParseParam)(Param, &ts, &(TopicName[0])); |
560 |
|
|
FreeTTSET(); |
561 |
|
|
|
562 |
|
|
// duplicate session���w�������������A���L�����������R�s�[���� (2004.12.7 yutaka) |
563 |
|
|
if (ts.DuplicateSession == 1) { |
564 |
|
|
CopyShmemToTTSet(&ts); |
565 |
|
|
} |
566 |
|
|
|
567 |
|
|
InitKeyboard(); |
568 |
|
|
SetKeyMap(); |
569 |
|
|
|
570 |
|
|
// �R�}���h���C�����������t�@�C���������X���������������������� (2008.1.25 maya) |
571 |
|
|
cv.isSSH = 0; |
572 |
|
|
cv.TitleRemote[0] = '\0'; |
573 |
|
|
|
574 |
|
|
/* window status */ |
575 |
|
|
AdjustSize = TRUE; |
576 |
|
|
Minimized = FALSE; |
577 |
|
|
LButton = FALSE; |
578 |
|
|
MButton = FALSE; |
579 |
|
|
RButton = FALSE; |
580 |
|
|
DblClk = FALSE; |
581 |
|
|
AfterDblClk = FALSE; |
582 |
|
|
TplClk = FALSE; |
583 |
|
|
Hold = FALSE; |
584 |
|
|
FirstPaint = TRUE; |
585 |
|
|
ScrollLock = FALSE; // �����l������ (2006.11.14 yutaka) |
586 |
|
|
|
587 |
|
|
/* Initialize scroll buffer */ |
588 |
|
|
InitBuffer(); |
589 |
|
|
|
590 |
|
|
InitDisp(); |
591 |
|
|
|
592 |
|
|
if (ts.HideTitle>0) { |
593 |
|
|
Style = WS_VSCROLL | WS_HSCROLL | |
594 |
|
|
WS_BORDER | WS_THICKFRAME | WS_POPUP; |
595 |
|
|
|
596 |
|
|
#ifdef ALPHABLEND_TYPE2 |
597 |
|
|
if(BGNoFrame) |
598 |
|
|
Style &= ~(WS_BORDER | WS_THICKFRAME); |
599 |
|
|
#endif |
600 |
|
|
} |
601 |
|
|
else |
602 |
|
|
#ifdef WINDOW_MAXMIMUM_ENABLED |
603 |
|
|
Style = WS_VSCROLL | WS_HSCROLL | |
604 |
|
|
WS_BORDER | WS_THICKFRAME | |
605 |
|
|
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; |
606 |
|
|
#else |
607 |
|
|
Style = WS_VSCROLL | WS_HSCROLL | |
608 |
|
|
WS_BORDER | WS_THICKFRAME | |
609 |
|
|
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; |
610 |
|
|
#endif |
611 |
|
|
|
612 |
|
|
wc.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; |
613 |
|
|
wc.lpfnWndProc = AfxWndProc; |
614 |
|
|
wc.cbClsExtra = 0; |
615 |
|
|
wc.cbWndExtra = 0; |
616 |
|
|
wc.hInstance = AfxGetInstanceHandle(); |
617 |
|
|
if (is_NT4()) { |
618 |
|
|
fuLoad = LR_VGACOLOR; |
619 |
|
|
} |
620 |
|
|
wc.hIcon = NULL; |
621 |
|
|
//wc.hCursor = LoadCursor(NULL,IDC_IBEAM); |
622 |
|
|
wc.hCursor = NULL; // �}�E�X�J�[�\�������I�����X���� (2005.4.2 yutaka) |
623 |
|
|
wc.hbrBackground = NULL; |
624 |
|
|
wc.lpszMenuName = NULL; |
625 |
|
|
wc.lpszClassName = VTClassName; |
626 |
|
|
|
627 |
|
|
RegisterClass(&wc); |
628 |
|
|
LoadAccelTable(MAKEINTRESOURCE(IDR_ACC)); |
629 |
|
|
|
630 |
|
|
if (ts.VTPos.x==CW_USEDEFAULT) |
631 |
|
|
rect = rectDefault; |
632 |
|
|
else { |
633 |
|
|
rect.left = ts.VTPos.x; |
634 |
|
|
rect.top = ts.VTPos.y; |
635 |
|
|
rect.right = rect.left + 100; |
636 |
|
|
rect.bottom = rect.top + 100; |
637 |
|
|
} |
638 |
|
|
Create(VTClassName, "Tera Term", Style, rect, NULL, NULL); |
639 |
|
|
|
640 |
|
|
/*--------- Init2 -----------------*/ |
641 |
|
|
HVTWin = GetSafeHwnd(); |
642 |
|
|
if (HVTWin == NULL) return; |
643 |
|
|
// register this window to the window list |
644 |
|
|
SerialNo = RegWin(HVTWin,NULL); |
645 |
|
|
|
646 |
|
|
logfile_lock_initialize(); |
647 |
|
|
SetWindowStyle(&ts); |
648 |
|
|
// ���P�[�������� |
649 |
|
|
// wctomb ������ |
650 |
|
|
setlocale(LC_ALL, ts.Locale); |
651 |
|
|
|
652 |
|
|
#ifdef ALPHABLEND_TYPE2 |
653 |
|
|
//<!--by AKASI |
654 |
|
|
if(BGNoFrame && ts.HideTitle > 0) { |
655 |
|
|
ExStyle = GetWindowLong(HVTWin,GWL_EXSTYLE); |
656 |
|
|
ExStyle &= ~WS_EX_CLIENTEDGE; |
657 |
|
|
SetWindowLong(HVTWin,GWL_EXSTYLE,ExStyle); |
658 |
|
|
} |
659 |
|
|
//--> |
660 |
|
|
#endif |
661 |
|
|
|
662 |
|
|
if (is_NT4()) { |
663 |
|
|
fuLoad = LR_VGACOLOR; |
664 |
|
|
} |
665 |
|
|
::PostMessage(HVTWin,WM_SETICON,ICON_SMALL, |
666 |
|
|
(LPARAM)LoadImage(AfxGetInstanceHandle(), |
667 |
|
|
MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT), |
668 |
|
|
IMAGE_ICON,16,16,fuLoad)); |
669 |
|
|
// Vista �� Aero �������� Alt+Tab �����������\���������A�C�R���� |
670 |
|
|
// 16x16 �A�C�R�����g���������������������A�������A�C�R���� |
671 |
|
|
// �Z�b�g���� (2008.9.3 maya) |
672 |
|
|
::PostMessage(HVTWin,WM_SETICON,ICON_BIG, |
673 |
|
|
(LPARAM)LoadImage(AfxGetInstanceHandle(), |
674 |
|
|
MAKEINTRESOURCE((ts.VTIcon!=IdIconDefault)?ts.VTIcon:IDI_VT), |
675 |
|
|
IMAGE_ICON, 0, 0, fuLoad)); |
676 |
|
|
|
677 |
|
|
MainMenu = NULL; |
678 |
|
|
WinMenu = NULL; |
679 |
|
|
if ((ts.HideTitle==0) && (ts.PopupMenu==0)) { |
680 |
|
|
InitMenu(&MainMenu); |
681 |
|
|
::SetMenu(HVTWin,MainMenu); |
682 |
|
|
} |
683 |
|
|
|
684 |
|
|
/* Reset Terminal */ |
685 |
|
|
ResetTerminal(); |
686 |
|
|
|
687 |
|
|
if ((ts.PopupMenu>0) || (ts.HideTitle>0)) |
688 |
|
|
::PostMessage(HVTWin,WM_USER_CHANGEMENU,0,0); |
689 |
|
|
|
690 |
|
|
ChangeFont(); |
691 |
|
|
|
692 |
|
|
ResetIME(); |
693 |
|
|
|
694 |
|
|
BuffChangeWinSize(NumOfColumns,NumOfLines); |
695 |
|
|
|
696 |
|
|
ChangeTitle(); |
697 |
|
|
/* Enable drag-drop */ |
698 |
|
|
::DragAcceptFiles(HVTWin,TRUE); |
699 |
|
|
|
700 |
|
|
if (ts.HideWindow>0) { |
701 |
|
|
if (strlen(TopicName)>0) { |
702 |
|
|
InitDDE(); |
703 |
|
|
SendDDEReady(); |
704 |
|
|
} |
705 |
|
|
FirstPaint = FALSE; |
706 |
|
|
Startup(); |
707 |
|
|
return; |
708 |
|
|
} |
709 |
|
|
CmdShow = SW_SHOWDEFAULT; |
710 |
|
|
if (ts.Minimize>0) |
711 |
|
|
CmdShow = SW_SHOWMINIMIZED; |
712 |
|
|
ShowWindow(CmdShow); |
713 |
|
|
ChangeCaret(); |
714 |
|
|
} |
715 |
|
|
|
716 |
|
|
///////////////////////////////////////////////////////////////////////////// |
717 |
|
|
|
718 |
|
|
#ifdef _DEBUG |
719 |
|
|
void CVTWindow::AssertValid() const |
720 |
|
|
{ |
721 |
|
|
CFrameWnd::AssertValid(); |
722 |
|
|
} |
723 |
|
|
|
724 |
|
|
void CVTWindow::Dump(CDumpContext& dc) const |
725 |
|
|
{ |
726 |
|
|
CFrameWnd::Dump(dc); |
727 |
|
|
} |
728 |
|
|
|
729 |
|
|
#endif //_DEBUG |
730 |
|
|
|
731 |
|
|
///////////////////////////////////////////////////////////////////////////// |
732 |
|
|
|
733 |
|
|
int CVTWindow::Parse() |
734 |
|
|
{ |
735 |
|
|
// added ScrollLock (2006.11.14 yutaka) |
736 |
|
|
if (LButton || MButton || RButton || ScrollLock) |
737 |
|
|
return 0; |
738 |
|
|
return (VTParse()); // Parse received characters |
739 |
|
|
} |
740 |
|
|
|
741 |
|
|
void CVTWindow::ButtonUp(BOOL Paste) |
742 |
|
|
{ |
743 |
|
|
BOOL disableBuffEndSelect = false; |
744 |
|
|
BOOL pasteRButton = RButton && Paste; |
745 |
|
|
BOOL pasteMButton = MButton && Paste; |
746 |
|
|
|
747 |
|
|
/* disable autoscrolling */ |
748 |
|
|
::KillTimer(HVTWin,IdScrollTimer); |
749 |
|
|
ReleaseCapture(); |
750 |
|
|
|
751 |
|
|
if (ts.SelectOnlyByLButton && |
752 |
|
|
(MButton || RButton)) { |
753 |
|
|
disableBuffEndSelect = true; |
754 |
|
|
} |
755 |
|
|
|
756 |
|
|
LButton = FALSE; |
757 |
|
|
MButton = FALSE; |
758 |
|
|
RButton = FALSE; |
759 |
|
|
DblClk = FALSE; |
760 |
|
|
TplClk = FALSE; |
761 |
|
|
CaretOn(); |
762 |
|
|
|
763 |
|
|
// SelectOnlyByLButton �� on �� ���E�E�N���b�N���������� |
764 |
|
|
// �o�b�t�@���I���������������A�I�����e���N���b�v�{�[�h�� |
765 |
|
|
// �R�s�[�������������������C�� (2007.12.6 maya) |
766 |
|
|
if (!disableBuffEndSelect) { |
767 |
|
|
BuffEndSelect(); |
768 |
|
|
} |
769 |
|
|
|
770 |
|
|
// added ConfirmPasteMouseRButton (2007.3.17 maya) |
771 |
|
|
if (pasteRButton && !ts.ConfirmPasteMouseRButton) { |
772 |
|
|
if (CBStartPasteConfirmChange(HVTWin)) { |
773 |
|
|
CBStartPaste(HVTWin,FALSE,0,NULL,0); |
774 |
|
|
/* �����s�����������X�N���[���������������� |
775 |
|
|
�y�[�X�g�������X�N���[�������� */ |
776 |
|
|
if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { |
777 |
|
|
DispVScroll(SCROLL_BOTTOM, 0); |
778 |
|
|
} |
779 |
|
|
} |
780 |
|
|
} |
781 |
|
|
else if (pasteMButton) { |
782 |
|
|
if (CBStartPasteConfirmChange(HVTWin)) { |
783 |
|
|
CBStartPaste(HVTWin,FALSE,0,NULL,0); |
784 |
|
|
/* �����s�����������X�N���[���������������� |
785 |
|
|
�y�[�X�g�������X�N���[�������� */ |
786 |
|
|
if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { |
787 |
|
|
DispVScroll(SCROLL_BOTTOM, 0); |
788 |
|
|
} |
789 |
|
|
} |
790 |
|
|
} |
791 |
|
|
} |
792 |
|
|
|
793 |
|
|
void CVTWindow::ButtonDown(POINT p, int LMR) |
794 |
|
|
{ |
795 |
|
|
HMENU PopupMenu, PopupBase; |
796 |
|
|
BOOL mousereport; |
797 |
|
|
|
798 |
|
|
if ((LMR==IdLeftButton) && ControlKey() && (MainMenu==NULL) && |
799 |
|
|
((ts.MenuFlag & MF_NOPOPUP)==0)) { |
800 |
|
|
int i, numItems; |
801 |
|
|
char itemText[256]; |
802 |
|
|
|
803 |
|
|
InitMenu(&PopupMenu); |
804 |
|
|
|
805 |
|
|
PopupBase = CreatePopupMenu(); |
806 |
|
|
numItems = GetMenuItemCount(PopupMenu); |
807 |
|
|
|
808 |
|
|
for (i = 0; i < numItems; i++) { |
809 |
|
|
HMENU submenu = GetSubMenu(PopupMenu, i); |
810 |
|
|
|
811 |
|
|
if (submenu != NULL) { |
812 |
|
|
InitMenuPopup(submenu); |
813 |
|
|
} |
814 |
|
|
|
815 |
|
|
if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) { |
816 |
|
|
int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) & |
817 |
|
|
(MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE | |
818 |
|
|
MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR); |
819 |
|
|
|
820 |
|
|
AppendMenu(PopupBase, |
821 |
|
|
submenu != NULL ? LOBYTE(state) | MF_POPUP : state, |
822 |
|
|
submenu != NULL ? (UINT)submenu : GetMenuItemID(PopupMenu, i), |
823 |
|
|
itemText); |
824 |
|
|
} |
825 |
|
|
} |
826 |
|
|
|
827 |
|
|
::ClientToScreen(HVTWin, &p); |
828 |
|
|
TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON, |
829 |
|
|
p.x,p.y,0,HVTWin,NULL); |
830 |
|
|
if (WinMenu!=NULL) { |
831 |
|
|
DestroyMenu(WinMenu); |
832 |
|
|
WinMenu = NULL; |
833 |
|
|
} |
834 |
|
|
DestroyMenu(PopupBase); |
835 |
|
|
DestroyMenu(PopupMenu); |
836 |
|
|
PopupMenu = 0; |
837 |
|
|
return; |
838 |
|
|
} |
839 |
|
|
|
840 |
|
|
mousereport = MouseReport(IdMouseEventBtnDown, LMR, p.x, p.y); |
841 |
|
|
|
842 |
|
|
// added ConfirmPasteMouseRButton (2007.3.17 maya) |
843 |
|
|
if ((LMR == IdRightButton) && |
844 |
|
|
!ts.DisablePasteMouseRButton && |
845 |
|
|
ts.ConfirmPasteMouseRButton && |
846 |
|
|
cv.Ready && |
847 |
|
|
!mousereport && |
848 |
|
|
(SendVar==NULL) && (FileVar==NULL) && |
849 |
|
|
(cv.PortType!=IdFile) && |
850 |
|
|
(IsClipboardFormatAvailable(CF_TEXT) || |
851 |
|
|
IsClipboardFormatAvailable(CF_OEMTEXT))) { |
852 |
|
|
|
853 |
|
|
int i, numItems; |
854 |
|
|
char itemText[256]; |
855 |
|
|
|
856 |
|
|
InitPasteMenu(&PopupMenu); |
857 |
|
|
PopupBase = CreatePopupMenu(); |
858 |
|
|
numItems = GetMenuItemCount(PopupMenu); |
859 |
|
|
|
860 |
|
|
for (i = 0; i < numItems; i++) { |
861 |
|
|
if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) { |
862 |
|
|
int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) & |
863 |
|
|
(MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE | |
864 |
|
|
MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR); |
865 |
|
|
|
866 |
|
|
AppendMenu(PopupBase, state, |
867 |
|
|
GetMenuItemID(PopupMenu, i), itemText); |
868 |
|
|
} |
869 |
|
|
} |
870 |
|
|
|
871 |
|
|
::ClientToScreen(HVTWin, &p); |
872 |
|
|
TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON, |
873 |
|
|
p.x,p.y,0,HVTWin,NULL); |
874 |
|
|
if (WinMenu!=NULL) { |
875 |
|
|
DestroyMenu(WinMenu); |
876 |
|
|
WinMenu = NULL; |
877 |
|
|
} |
878 |
|
|
DestroyMenu(PopupBase); |
879 |
|
|
DestroyMenu(PopupMenu); |
880 |
|
|
PopupMenu = 0; |
881 |
|
|
return; |
882 |
|
|
} |
883 |
|
|
|
884 |
|
|
if (AfterDblClk && (LMR==IdLeftButton) && |
885 |
|
|
(abs(p.x-DblClkX)<=GetSystemMetrics(SM_CXDOUBLECLK)) && |
886 |
|
|
(abs(p.y-DblClkY)<=GetSystemMetrics(SM_CYDOUBLECLK))) { |
887 |
|
|
/* triple click */ |
888 |
|
|
::KillTimer(HVTWin, IdDblClkTimer); |
889 |
|
|
AfterDblClk = FALSE; |
890 |
|
|
BuffTplClk(p.y); |
891 |
|
|
LButton = TRUE; |
892 |
|
|
TplClk = TRUE; |
893 |
|
|
/* for AutoScrolling */ |
894 |
|
|
::SetCapture(HVTWin); |
895 |
|
|
::SetTimer(HVTWin, IdScrollTimer, 100, NULL); |
896 |
|
|
} |
897 |
|
|
else { |
898 |
|
|
if (! (LButton || MButton || RButton)) { |
899 |
|
|
BOOL box = FALSE; |
900 |
|
|
|
901 |
|
|
// select several pages of output from Tera Term window (2005.5.15 yutaka) |
902 |
|
|
if (LMR == IdLeftButton && ShiftKey()) { |
903 |
|
|
BuffSeveralPagesSelect(p.x, p.y); |
904 |
|
|
|
905 |
|
|
} else { |
906 |
|
|
// Select rectangular block with Alt Key. Delete Shift key.(2005.5.15 yutaka) |
907 |
|
|
if (LMR == IdLeftButton && AltKey()) { |
908 |
|
|
box = TRUE; |
909 |
|
|
} |
910 |
|
|
|
911 |
|
|
// Starting the selection only by a left button.(2007.11.20 maya) |
912 |
|
|
if (!ts.SelectOnlyByLButton || |
913 |
|
|
(ts.SelectOnlyByLButton && LMR == IdLeftButton) ) { |
914 |
|
|
BuffStartSelect(p.x,p.y, box); |
915 |
|
|
TplClk = FALSE; |
916 |
|
|
|
917 |
|
|
/* for AutoScrolling */ |
918 |
|
|
::SetCapture(HVTWin); |
919 |
|
|
::SetTimer(HVTWin, IdScrollTimer, 100, NULL); |
920 |
|
|
} |
921 |
|
|
} |
922 |
|
|
} |
923 |
|
|
|
924 |
|
|
switch (LMR) { |
925 |
|
|
case IdRightButton: |
926 |
|
|
RButton = TRUE; |
927 |
|
|
break; |
928 |
|
|
case IdMiddleButton: |
929 |
|
|
MButton = TRUE; |
930 |
|
|
break; |
931 |
|
|
case IdLeftButton: |
932 |
|
|
LButton = TRUE; |
933 |
|
|
break; |
934 |
|
|
} |
935 |
|
|
} |
936 |
|
|
} |
937 |
|
|
|
938 |
|
|
// LogMeIn.exe -> LogMeTT.exe �����l�[�� (2005.2.21 yutaka) |
939 |
|
|
char *LogMeTTexename = "LogMeTT.exe"; |
940 |
|
|
static char LogMeTTMenuString[] = "Log&MeTT"; |
941 |
|
|
static BOOL isLogMeTTExist() |
942 |
|
|
{ |
943 |
|
|
char LogMeTT[MAX_PATH]; |
944 |
|
|
|
945 |
|
|
strncpy_s(LogMeTT, sizeof(LogMeTT), ts.HomeDir, _TRUNCATE); |
946 |
|
|
AppendSlash(LogMeTT, sizeof(LogMeTT)); |
947 |
|
|
strncat_s(LogMeTT, sizeof(LogMeTT), LogMeTTexename, _TRUNCATE); |
948 |
|
|
|
949 |
|
|
if (_access(LogMeTT, 0) == -1) { |
950 |
|
|
return FALSE; |
951 |
|
|
} |
952 |
|
|
return TRUE; |
953 |
|
|
} |
954 |
|
|
|
955 |
|
|
void CVTWindow::InitMenu(HMENU *Menu) |
956 |
|
|
{ |
957 |
|
|
*Menu = LoadMenu(AfxGetInstanceHandle(), |
958 |
|
|
MAKEINTRESOURCE(IDR_MENU)); |
959 |
|
|
char uimsg[MAX_UIMSG]; |
960 |
|
|
int ret; |
961 |
|
|
|
962 |
|
|
FileMenu = GetSubMenu(*Menu,ID_FILE); |
963 |
|
|
TransMenu = GetSubMenu(FileMenu,ID_TRANSFER); |
964 |
|
|
EditMenu = GetSubMenu(*Menu,ID_EDIT); |
965 |
|
|
SetupMenu = GetSubMenu(*Menu,ID_SETUP); |
966 |
|
|
ControlMenu = GetSubMenu(*Menu,ID_CONTROL); |
967 |
|
|
HelpMenu = GetSubMenu(*Menu,ID_HELPMENU); |
968 |
|
|
|
969 |
|
|
/* LogMeTT ���������m�F�������j���[���������� */ |
970 |
|
|
if (isLogMeTTExist()) { |
971 |
|
|
::InsertMenu(FileMenu, ID_FILE_PRINT2, MF_STRING | MF_ENABLED | MF_BYCOMMAND, |
972 |
|
|
ID_FILE_LOGMEIN, LogMeTTMenuString); |
973 |
|
|
::InsertMenu(FileMenu, ID_FILE_PRINT2, MF_SEPARATOR, NULL, NULL); |
974 |
|
|
} |
975 |
|
|
|
976 |
|
|
GetMenuString(*Menu, ID_FILE, uimsg, sizeof(uimsg), MF_BYPOSITION); |
977 |
|
|
get_lang_msg("MENU_FILE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
978 |
|
|
ModifyMenu(*Menu, ID_FILE, MF_BYPOSITION, ID_FILE, ts.UIMsg); |
979 |
|
|
GetMenuString(FileMenu, ID_FILE_NEWCONNECTION, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
980 |
|
|
get_lang_msg("MENU_FILE_NEW", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
981 |
|
|
ModifyMenu(FileMenu, ID_FILE_NEWCONNECTION, MF_BYCOMMAND, ID_FILE_NEWCONNECTION, ts.UIMsg); |
982 |
|
|
GetMenuString(FileMenu, ID_FILE_DUPLICATESESSION, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
983 |
|
|
get_lang_msg("MENU_FILE_DUPLICATE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
984 |
|
|
ModifyMenu(FileMenu, ID_FILE_DUPLICATESESSION, MF_BYCOMMAND, ID_FILE_DUPLICATESESSION, ts.UIMsg); |
985 |
|
|
GetMenuString(FileMenu, ID_FILE_CYGWINCONNECTION, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
986 |
|
|
get_lang_msg("MENU_FILE_GYGWIN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
987 |
|
|
ModifyMenu(FileMenu, ID_FILE_CYGWINCONNECTION, MF_BYCOMMAND, ID_FILE_CYGWINCONNECTION, ts.UIMsg); |
988 |
|
|
GetMenuString(FileMenu, ID_FILE_LOG, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
989 |
|
|
get_lang_msg("MENU_FILE_LOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
990 |
|
|
ModifyMenu(FileMenu, ID_FILE_LOG, MF_BYCOMMAND, ID_FILE_LOG, ts.UIMsg); |
991 |
|
|
GetMenuString(FileMenu, ID_FILE_COMMENTTOLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
992 |
|
|
get_lang_msg("MENU_FILE_COMMENTLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
993 |
|
|
ModifyMenu(FileMenu, ID_FILE_COMMENTTOLOG, MF_BYCOMMAND, ID_FILE_COMMENTTOLOG, ts.UIMsg); |
994 |
|
|
GetMenuString(FileMenu, ID_FILE_VIEWLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
995 |
|
|
get_lang_msg("MENU_FILE_VIEWLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
996 |
|
|
ModifyMenu(FileMenu, ID_FILE_VIEWLOG, MF_BYCOMMAND, ID_FILE_VIEWLOG, ts.UIMsg); |
997 |
|
|
GetMenuString(FileMenu, ID_FILE_SHOWLOGDIALOG, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
998 |
|
|
get_lang_msg("MENU_FILE_SHOWLOGDIALOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
999 |
|
|
ModifyMenu(FileMenu, ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND, ID_FILE_SHOWLOGDIALOG, ts.UIMsg); |
1000 |
|
|
GetMenuString(FileMenu, ID_FILE_SENDFILE, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1001 |
|
|
get_lang_msg("MENU_FILE_SENDFILE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1002 |
|
|
ModifyMenu(FileMenu, ID_FILE_SENDFILE, MF_BYCOMMAND, ID_FILE_SENDFILE, ts.UIMsg); |
1003 |
|
|
GetMenuString(FileMenu, ID_FILE_REPLAYLOG, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1004 |
|
|
get_lang_msg("MENU_FILE_REPLAYLOG", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1005 |
|
|
ModifyMenu(FileMenu, ID_FILE_REPLAYLOG, MF_BYCOMMAND, ID_FILE_REPLAYLOG, ts.UIMsg); |
1006 |
|
|
GetMenuString(FileMenu, ID_FILE_CHANGEDIR, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1007 |
|
|
get_lang_msg("MENU_FILE_CHANGEDIR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1008 |
|
|
ModifyMenu(FileMenu, ID_FILE_CHANGEDIR, MF_BYCOMMAND, ID_FILE_CHANGEDIR, ts.UIMsg); |
1009 |
|
|
ret = GetMenuString(FileMenu, ID_FILE_LOGMEIN, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1010 |
|
|
if (ret != 0) { |
1011 |
|
|
get_lang_msg("MENU_FILE_LOGMETT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1012 |
|
|
ModifyMenu(FileMenu, ID_FILE_LOGMEIN, MF_BYCOMMAND, ID_FILE_LOGMEIN, ts.UIMsg); |
1013 |
|
|
} |
1014 |
|
|
GetMenuString(FileMenu, ID_FILE_PRINT2, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1015 |
|
|
get_lang_msg("MENU_FILE_PRINT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1016 |
|
|
ModifyMenu(FileMenu, ID_FILE_PRINT2, MF_BYCOMMAND, ID_FILE_PRINT2, ts.UIMsg); |
1017 |
|
|
GetMenuString(FileMenu, ID_FILE_DISCONNECT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1018 |
|
|
get_lang_msg("MENU_FILE_DISCONNECT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1019 |
|
|
ModifyMenu(FileMenu, ID_FILE_DISCONNECT, MF_BYCOMMAND, ID_FILE_DISCONNECT, ts.UIMsg); |
1020 |
|
|
GetMenuString(FileMenu, ID_FILE_EXIT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1021 |
|
|
get_lang_msg("MENU_FILE_EXIT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1022 |
|
|
ModifyMenu(FileMenu, ID_FILE_EXIT, MF_BYCOMMAND, ID_FILE_EXIT, ts.UIMsg); |
1023 |
|
|
|
1024 |
|
|
GetMenuString(FileMenu, 9, uimsg, sizeof(uimsg), MF_BYPOSITION); |
1025 |
|
|
get_lang_msg("MENU_TRANS", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1026 |
|
|
ModifyMenu(FileMenu, 9, MF_BYPOSITION, 9, ts.UIMsg); |
1027 |
|
|
|
1028 |
|
|
GetMenuString(FileMenu, ID_FILE_KERMITRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1029 |
|
|
get_lang_msg("MENU_TRANS_KERMIT_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1030 |
|
|
ModifyMenu(FileMenu, ID_FILE_KERMITRCV, MF_BYCOMMAND, ID_FILE_KERMITRCV, ts.UIMsg); |
1031 |
|
|
GetMenuString(FileMenu, ID_FILE_KERMITGET, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1032 |
|
|
get_lang_msg("MENU_TRANS_KERMIT_GET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1033 |
|
|
ModifyMenu(FileMenu, ID_FILE_KERMITGET, MF_BYCOMMAND, ID_FILE_KERMITGET, ts.UIMsg); |
1034 |
|
|
GetMenuString(FileMenu, ID_FILE_KERMITSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1035 |
|
|
get_lang_msg("MENU_TRANS_KERMIT_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1036 |
|
|
ModifyMenu(FileMenu, ID_FILE_KERMITSEND, MF_BYCOMMAND, ID_FILE_KERMITSEND, ts.UIMsg); |
1037 |
|
|
GetMenuString(FileMenu, ID_FILE_KERMITFINISH, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1038 |
|
|
get_lang_msg("MENU_TRANS_KERMIT_FINISH", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1039 |
|
|
ModifyMenu(FileMenu, ID_FILE_KERMITFINISH, MF_BYCOMMAND, ID_FILE_KERMITFINISH, ts.UIMsg); |
1040 |
|
|
|
1041 |
|
|
GetMenuString(FileMenu, ID_FILE_XRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1042 |
|
|
get_lang_msg("MENU_TRANS_X_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1043 |
|
|
ModifyMenu(FileMenu, ID_FILE_XRCV, MF_BYCOMMAND, ID_FILE_XRCV, ts.UIMsg); |
1044 |
|
|
GetMenuString(FileMenu, ID_FILE_XSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1045 |
|
|
get_lang_msg("MENU_TRANS_X_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1046 |
|
|
ModifyMenu(FileMenu, ID_FILE_XSEND, MF_BYCOMMAND, ID_FILE_XSEND, ts.UIMsg); |
1047 |
|
|
|
1048 |
|
|
// TBD: YMODEM���������T�|�[�g�������A���j���[���B���B(2008.5.15 yutaka) |
1049 |
|
|
//#define YMODEM_TBD |
1050 |
|
|
#ifndef YMODEM_TBD |
1051 |
|
|
DeleteMenu(TransMenu, 2, MF_BYPOSITION); |
1052 |
|
|
DeleteMenu(FileMenu, ID_FILE_YRCV, MF_BYCOMMAND); |
1053 |
|
|
DeleteMenu(FileMenu, ID_FILE_YSEND, MF_BYCOMMAND); |
1054 |
|
|
#endif |
1055 |
|
|
#undef YMODEM_TBD |
1056 |
|
|
|
1057 |
|
|
GetMenuString(FileMenu, ID_FILE_ZRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1058 |
|
|
get_lang_msg("MENU_TRANS_Z_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1059 |
|
|
ModifyMenu(FileMenu, ID_FILE_ZRCV, MF_BYCOMMAND, ID_FILE_ZRCV, ts.UIMsg); |
1060 |
|
|
GetMenuString(FileMenu, ID_FILE_ZSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1061 |
|
|
get_lang_msg("MENU_TRANS_Z_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1062 |
|
|
ModifyMenu(FileMenu, ID_FILE_ZSEND, MF_BYCOMMAND, ID_FILE_ZSEND, ts.UIMsg); |
1063 |
|
|
|
1064 |
|
|
GetMenuString(FileMenu, ID_FILE_BPRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1065 |
|
|
get_lang_msg("MENU_TRANS_BP_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1066 |
|
|
ModifyMenu(FileMenu, ID_FILE_BPRCV, MF_BYCOMMAND, ID_FILE_BPRCV, ts.UIMsg); |
1067 |
|
|
GetMenuString(FileMenu, ID_FILE_BPSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1068 |
|
|
get_lang_msg("MENU_TRANS_BP_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1069 |
|
|
ModifyMenu(FileMenu, ID_FILE_BPSEND, MF_BYCOMMAND, ID_FILE_BPSEND, ts.UIMsg); |
1070 |
|
|
|
1071 |
|
|
GetMenuString(FileMenu, ID_FILE_QVRCV, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1072 |
|
|
get_lang_msg("MENU_TRANS_QV_RCV", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1073 |
|
|
ModifyMenu(FileMenu, ID_FILE_QVRCV, MF_BYCOMMAND, ID_FILE_QVRCV, ts.UIMsg); |
1074 |
|
|
GetMenuString(FileMenu, ID_FILE_QVSEND, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1075 |
|
|
get_lang_msg("MENU_TRANS_QV_SEND", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1076 |
|
|
ModifyMenu(FileMenu, ID_FILE_QVSEND, MF_BYCOMMAND, ID_FILE_QVSEND, ts.UIMsg); |
1077 |
|
|
|
1078 |
|
|
GetMenuString(*Menu, ID_EDIT, uimsg, sizeof(uimsg), MF_BYPOSITION); |
1079 |
|
|
get_lang_msg("MENU_EDIT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1080 |
|
|
ModifyMenu(*Menu, ID_EDIT, MF_BYPOSITION, ID_EDIT, ts.UIMsg); |
1081 |
|
|
GetMenuString(EditMenu, ID_EDIT_COPY2, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1082 |
|
|
get_lang_msg("MENU_EDIT_COPY", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1083 |
|
|
ModifyMenu(EditMenu, ID_EDIT_COPY2, MF_BYCOMMAND, ID_EDIT_COPY2, ts.UIMsg); |
1084 |
|
|
GetMenuString(EditMenu, ID_EDIT_COPYTABLE, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1085 |
|
|
get_lang_msg("MENU_EDIT_COPYTABLE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1086 |
|
|
ModifyMenu(EditMenu, ID_EDIT_COPYTABLE, MF_BYCOMMAND, ID_EDIT_COPYTABLE, ts.UIMsg); |
1087 |
|
|
GetMenuString(EditMenu, ID_EDIT_PASTE2, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1088 |
|
|
get_lang_msg("MENU_EDIT_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1089 |
|
|
ModifyMenu(EditMenu, ID_EDIT_PASTE2, MF_BYCOMMAND, ID_EDIT_PASTE2, ts.UIMsg); |
1090 |
|
|
GetMenuString(EditMenu, ID_EDIT_PASTECR, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1091 |
|
|
get_lang_msg("MENU_EDIT_PASTECR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1092 |
|
|
ModifyMenu(EditMenu, ID_EDIT_PASTECR, MF_BYCOMMAND, ID_EDIT_PASTECR, ts.UIMsg); |
1093 |
|
|
GetMenuString(EditMenu, ID_EDIT_CLEARSCREEN, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1094 |
|
|
get_lang_msg("MENU_EDIT_CLSCREEN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1095 |
|
|
ModifyMenu(EditMenu, ID_EDIT_CLEARSCREEN, MF_BYCOMMAND, ID_EDIT_CLEARSCREEN, ts.UIMsg); |
1096 |
|
|
GetMenuString(EditMenu, ID_EDIT_CLEARBUFFER, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1097 |
|
|
get_lang_msg("MENU_EDIT_CLBUFFER", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1098 |
|
|
ModifyMenu(EditMenu, ID_EDIT_CLEARBUFFER, MF_BYCOMMAND, ID_EDIT_CLEARBUFFER, ts.UIMsg); |
1099 |
|
|
GetMenuString(EditMenu, ID_EDIT_CANCELSELECT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1100 |
|
|
get_lang_msg("MENU_EDIT_CANCELSELECT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1101 |
|
|
ModifyMenu(EditMenu, ID_EDIT_CANCELSELECT, MF_BYCOMMAND, ID_EDIT_CANCELSELECT, ts.UIMsg); |
1102 |
|
|
GetMenuString(EditMenu, ID_EDIT_SELECTSCREEN, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1103 |
|
|
get_lang_msg("MENU_EDIT_SELECTSCREEN", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1104 |
|
|
ModifyMenu(EditMenu, ID_EDIT_SELECTSCREEN, MF_BYCOMMAND, ID_EDIT_SELECTSCREEN, ts.UIMsg); |
1105 |
|
|
GetMenuString(EditMenu, ID_EDIT_SELECTALL, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1106 |
|
|
get_lang_msg("MENU_EDIT_SELECTALL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1107 |
|
|
ModifyMenu(EditMenu, ID_EDIT_SELECTALL, MF_BYCOMMAND, ID_EDIT_SELECTALL, ts.UIMsg); |
1108 |
|
|
|
1109 |
|
|
GetMenuString(*Menu, ID_SETUP, uimsg, sizeof(uimsg), MF_BYPOSITION); |
1110 |
|
|
get_lang_msg("MENU_SETUP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1111 |
|
|
ModifyMenu(*Menu, ID_SETUP, MF_BYPOSITION, ID_SETUP, ts.UIMsg); |
1112 |
|
|
GetMenuString(SetupMenu, ID_SETUP_TERMINAL, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1113 |
|
|
get_lang_msg("MENU_SETUP_TERMINAL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1114 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_TERMINAL, MF_BYCOMMAND, ID_SETUP_TERMINAL, ts.UIMsg); |
1115 |
|
|
GetMenuString(SetupMenu, ID_SETUP_WINDOW, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1116 |
|
|
get_lang_msg("MENU_SETUP_WINDOW", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1117 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_WINDOW, MF_BYCOMMAND, ID_SETUP_WINDOW, ts.UIMsg); |
1118 |
|
|
GetMenuString(SetupMenu, ID_SETUP_FONT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1119 |
|
|
get_lang_msg("MENU_SETUP_FONT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1120 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_FONT, MF_BYCOMMAND, ID_SETUP_FONT, ts.UIMsg); |
1121 |
|
|
GetMenuString(SetupMenu, ID_SETUP_KEYBOARD, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1122 |
|
|
get_lang_msg("MENU_SETUP_KEYBOARD", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1123 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_KEYBOARD, MF_BYCOMMAND, ID_SETUP_KEYBOARD, ts.UIMsg); |
1124 |
|
|
GetMenuString(SetupMenu, ID_SETUP_SERIALPORT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1125 |
|
|
get_lang_msg("MENU_SETUP_SERIALPORT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1126 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_SERIALPORT, MF_BYCOMMAND, ID_SETUP_SERIALPORT, ts.UIMsg); |
1127 |
|
|
GetMenuString(SetupMenu, ID_SETUP_TCPIP, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1128 |
|
|
get_lang_msg("MENU_SETUP_TCPIP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1129 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_TCPIP, MF_BYCOMMAND, ID_SETUP_TCPIP, ts.UIMsg); |
1130 |
|
|
GetMenuString(SetupMenu, ID_SETUP_GENERAL, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1131 |
|
|
get_lang_msg("MENU_SETUP_GENERAL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1132 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_GENERAL, MF_BYCOMMAND, ID_SETUP_GENERAL, ts.UIMsg); |
1133 |
|
|
GetMenuString(SetupMenu, ID_SETUP_ADDITIONALSETTINGS, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1134 |
|
|
get_lang_msg("MENU_SETUP_ADDITION", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1135 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_ADDITIONALSETTINGS, MF_BYCOMMAND, ID_SETUP_ADDITIONALSETTINGS, ts.UIMsg); |
1136 |
|
|
GetMenuString(SetupMenu, ID_SETUP_SAVE, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1137 |
|
|
get_lang_msg("MENU_SETUP_SAVE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1138 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_SAVE, MF_BYCOMMAND, ID_SETUP_SAVE, ts.UIMsg); |
1139 |
|
|
GetMenuString(SetupMenu, ID_SETUP_RESTORE, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1140 |
|
|
get_lang_msg("MENU_SETUP_RESTORE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1141 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_RESTORE, MF_BYCOMMAND, ID_SETUP_RESTORE, ts.UIMsg); |
1142 |
|
|
GetMenuString(SetupMenu, ID_SETUP_LOADKEYMAP, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1143 |
|
|
get_lang_msg("MENU_SETUP_LOADKEYMAP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1144 |
|
|
ModifyMenu(SetupMenu, ID_SETUP_LOADKEYMAP, MF_BYCOMMAND, ID_SETUP_LOADKEYMAP, ts.UIMsg); |
1145 |
|
|
|
1146 |
|
|
GetMenuString(*Menu, ID_CONTROL, uimsg, sizeof(uimsg), MF_BYPOSITION); |
1147 |
|
|
get_lang_msg("MENU_CONTROL", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1148 |
|
|
ModifyMenu(*Menu, ID_CONTROL, MF_BYPOSITION, ID_CONTROL, ts.UIMsg); |
1149 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_RESETTERMINAL, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1150 |
|
|
get_lang_msg("MENU_CONTROL_RESET", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1151 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_RESETTERMINAL, MF_BYCOMMAND, ID_CONTROL_RESETTERMINAL, ts.UIMsg); |
1152 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_RESETREMOTETITLE, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1153 |
|
|
get_lang_msg("MENU_CONTROL_RESETTITLE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1154 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_RESETREMOTETITLE, MF_BYCOMMAND, ID_CONTROL_RESETREMOTETITLE, ts.UIMsg); |
1155 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_AREYOUTHERE, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1156 |
|
|
get_lang_msg("MENU_CONTROL_AREYOUTHERE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1157 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_AREYOUTHERE, MF_BYCOMMAND, ID_CONTROL_AREYOUTHERE, ts.UIMsg); |
1158 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_SENDBREAK, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1159 |
|
|
get_lang_msg("MENU_CONTROL_SENDBREAK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1160 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_SENDBREAK, MF_BYCOMMAND, ID_CONTROL_SENDBREAK, ts.UIMsg); |
1161 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_RESETPORT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1162 |
|
|
get_lang_msg("MENU_CONTROL_RESETPORT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1163 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_RESETPORT, MF_BYCOMMAND, ID_CONTROL_RESETPORT, ts.UIMsg); |
1164 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_BROADCASTCOMMAND, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1165 |
|
|
get_lang_msg("MENU_CONTROL_BROADCAST", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1166 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_BROADCASTCOMMAND, MF_BYCOMMAND, ID_CONTROL_BROADCASTCOMMAND, ts.UIMsg); |
1167 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_OPENTEK, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1168 |
|
|
get_lang_msg("MENU_CONTROL_OPENTEK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1169 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_OPENTEK, MF_BYCOMMAND, ID_CONTROL_OPENTEK, ts.UIMsg); |
1170 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_CLOSETEK, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1171 |
|
|
get_lang_msg("MENU_CONTROL_CLOSETEK", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1172 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_CLOSETEK, MF_BYCOMMAND, ID_CONTROL_CLOSETEK, ts.UIMsg); |
1173 |
|
|
GetMenuString(ControlMenu, ID_CONTROL_MACRO, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1174 |
|
|
get_lang_msg("MENU_CONTROL_MACRO", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1175 |
|
|
ModifyMenu(ControlMenu, ID_CONTROL_MACRO, MF_BYCOMMAND, ID_CONTROL_MACRO, ts.UIMsg); |
1176 |
|
|
|
1177 |
|
|
GetMenuString(*Menu, ID_HELPMENU, uimsg, sizeof(uimsg), MF_BYPOSITION); |
1178 |
|
|
get_lang_msg("MENU_HELP", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1179 |
|
|
ModifyMenu(*Menu, ID_HELPMENU, MF_BYPOSITION, ID_HELPMENU, ts.UIMsg); |
1180 |
|
|
GetMenuString(HelpMenu, ID_HELP_INDEX2, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1181 |
|
|
get_lang_msg("MENU_HELP_INDEX", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1182 |
|
|
ModifyMenu(HelpMenu, ID_HELP_INDEX2, MF_BYCOMMAND, ID_HELP_INDEX2, ts.UIMsg); |
1183 |
|
|
GetMenuString(HelpMenu, ID_HELP_ABOUT, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1184 |
|
|
get_lang_msg("MENU_HELP_ABOUT", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1185 |
|
|
ModifyMenu(HelpMenu, ID_HELP_ABOUT, MF_BYCOMMAND, ID_HELP_ABOUT, ts.UIMsg); |
1186 |
|
|
|
1187 |
|
|
if ((ts.MenuFlag & MF_SHOWWINMENU) !=0) { |
1188 |
|
|
WinMenu = CreatePopupMenu(); |
1189 |
|
|
get_lang_msg("MENU_WINDOW", ts.UIMsg, sizeof(ts.UIMsg), |
1190 |
|
|
"&Window", ts.UILanguageFile); |
1191 |
|
|
::InsertMenu(*Menu,ID_HELPMENU, |
1192 |
|
|
MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION, |
1193 |
|
|
(int)WinMenu, ts.UIMsg); |
1194 |
|
|
} |
1195 |
|
|
|
1196 |
|
|
TTXModifyMenu(*Menu); /* TTPLUG */ |
1197 |
|
|
} |
1198 |
|
|
|
1199 |
|
|
void CVTWindow::InitMenuPopup(HMENU SubMenu) |
1200 |
|
|
{ |
1201 |
|
|
if ( SubMenu == FileMenu ) |
1202 |
|
|
{ |
1203 |
|
|
if ( Connecting ) { |
1204 |
|
|
EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_GRAYED); |
1205 |
|
|
} else { |
1206 |
|
|
EnableMenuItem(FileMenu,ID_FILE_NEWCONNECTION,MF_BYCOMMAND | MF_ENABLED); |
1207 |
|
|
} |
1208 |
|
|
|
1209 |
|
|
if ( (! cv.Ready) || (SendVar!=NULL) || |
1210 |
|
|
(FileVar!=NULL) || (cv.PortType==IdFile) ) { |
1211 |
|
|
EnableMenuItem(FileMenu,ID_FILE_SENDFILE,MF_BYCOMMAND | MF_GRAYED); |
1212 |
|
|
EnableMenuItem(FileMenu,ID_TRANSFER,MF_BYPOSITION | MF_GRAYED); /* Transfer */ |
1213 |
|
|
EnableMenuItem(FileMenu,ID_FILE_CHANGEDIR,MF_BYCOMMAND | MF_GRAYED); |
1214 |
|
|
EnableMenuItem(FileMenu,ID_FILE_DISCONNECT,MF_BYCOMMAND | MF_GRAYED); |
1215 |
|
|
EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_GRAYED); |
1216 |
|
|
} |
1217 |
|
|
else { |
1218 |
|
|
EnableMenuItem(FileMenu,ID_FILE_SENDFILE,MF_BYCOMMAND | MF_ENABLED); |
1219 |
|
|
EnableMenuItem(FileMenu,ID_TRANSFER,MF_BYPOSITION | MF_ENABLED); /* Transfer */ |
1220 |
|
|
EnableMenuItem(FileMenu,ID_FILE_CHANGEDIR,MF_BYCOMMAND | MF_ENABLED); |
1221 |
|
|
EnableMenuItem(FileMenu,ID_FILE_DISCONNECT,MF_BYCOMMAND | MF_ENABLED); |
1222 |
|
|
EnableMenuItem(FileMenu,ID_FILE_DUPLICATESESSION,MF_BYCOMMAND | MF_ENABLED); |
1223 |
|
|
} |
1224 |
|
|
|
1225 |
|
|
// �V�K���j���[������ (2004.12.5 yutaka) |
1226 |
|
|
EnableMenuItem(FileMenu,ID_FILE_CYGWINCONNECTION,MF_BYCOMMAND | MF_ENABLED); |
1227 |
|
|
EnableMenuItem(FileMenu,ID_FILE_TERATERMMENU,MF_BYCOMMAND | MF_ENABLED); |
1228 |
|
|
EnableMenuItem(FileMenu,ID_FILE_LOGMEIN,MF_BYCOMMAND | MF_ENABLED); |
1229 |
|
|
|
1230 |
|
|
// XXX: �������u�����������Alog���O���C�����������B (2005.2.1 yutaka) |
1231 |
|
|
if (LogVar!=NULL) { // ���O�������[�h������ |
1232 |
|
|
EnableMenuItem(FileMenu,ID_FILE_LOG,MF_BYCOMMAND | MF_GRAYED); |
1233 |
|
|
EnableMenuItem(FileMenu,ID_FILE_COMMENTTOLOG, MF_BYCOMMAND | MF_ENABLED); |
1234 |
|
|
EnableMenuItem(FileMenu,ID_FILE_VIEWLOG, MF_BYCOMMAND | MF_ENABLED); |
1235 |
|
|
if (ts.LogHideDialog) { |
1236 |
|
|
EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_ENABLED); |
1237 |
|
|
} |
1238 |
|
|
else { |
1239 |
|
|
EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_GRAYED); |
1240 |
|
|
} |
1241 |
|
|
} else { |
1242 |
|
|
EnableMenuItem(FileMenu,ID_FILE_LOG,MF_BYCOMMAND | MF_ENABLED); |
1243 |
|
|
EnableMenuItem(FileMenu,ID_FILE_COMMENTTOLOG, MF_BYCOMMAND | MF_GRAYED); |
1244 |
|
|
EnableMenuItem(FileMenu,ID_FILE_VIEWLOG, MF_BYCOMMAND | MF_GRAYED); |
1245 |
|
|
EnableMenuItem(FileMenu,ID_FILE_SHOWLOGDIALOG, MF_BYCOMMAND | MF_GRAYED); |
1246 |
|
|
} |
1247 |
|
|
|
1248 |
|
|
} |
1249 |
|
|
else if ( SubMenu == TransMenu ) |
1250 |
|
|
{ |
1251 |
|
|
if ((cv.PortType==IdSerial) && |
1252 |
|
|
((ts.DataBit==IdDataBit7) || (ts.Flow==IdFlowX))) { |
1253 |
|
|
EnableMenuItem(TransMenu,1,MF_BYPOSITION | MF_GRAYED); /* XMODEM */ |
1254 |
|
|
EnableMenuItem(TransMenu,4,MF_BYPOSITION | MF_GRAYED); /* Quick-VAN */ |
1255 |
|
|
} |
1256 |
|
|
else { |
1257 |
|
|
EnableMenuItem(TransMenu,1,MF_BYPOSITION | MF_ENABLED); /* XMODEM */ |
1258 |
|
|
EnableMenuItem(TransMenu,4,MF_BYPOSITION | MF_ENABLED); /* Quick-VAN */ |
1259 |
|
|
} |
1260 |
|
|
if ((cv.PortType==IdSerial) && |
1261 |
|
|
(ts.DataBit==IdDataBit7)) { |
1262 |
|
|
EnableMenuItem(TransMenu,2,MF_BYPOSITION | MF_GRAYED); /* ZMODEM */ |
1263 |
|
|
EnableMenuItem(TransMenu,3,MF_BYPOSITION | MF_GRAYED); /* B-Plus */ |
1264 |
|
|
} |
1265 |
|
|
else { |
1266 |
|
|
EnableMenuItem(TransMenu,2,MF_BYPOSITION | MF_ENABLED); /* ZMODEM */ |
1267 |
|
|
EnableMenuItem(TransMenu,3,MF_BYPOSITION | MF_ENABLED); /* B-Plus */ |
1268 |
|
|
} |
1269 |
|
|
} |
1270 |
|
|
else if (SubMenu == EditMenu) |
1271 |
|
|
{ |
1272 |
|
|
if (Selected) { |
1273 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_COPY2,MF_BYCOMMAND | MF_ENABLED); |
1274 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_COPYTABLE,MF_BYCOMMAND | MF_ENABLED); |
1275 |
|
|
} |
1276 |
|
|
else { |
1277 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_COPY2,MF_BYCOMMAND | MF_GRAYED); |
1278 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_COPYTABLE,MF_BYCOMMAND | MF_GRAYED); |
1279 |
|
|
} |
1280 |
|
|
if (cv.Ready && |
1281 |
|
|
(SendVar==NULL) && (FileVar==NULL) && |
1282 |
|
|
(cv.PortType!=IdFile) && |
1283 |
|
|
(IsClipboardFormatAvailable(CF_TEXT) || |
1284 |
|
|
IsClipboardFormatAvailable(CF_OEMTEXT))) { |
1285 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_PASTE2,MF_BYCOMMAND | MF_ENABLED); |
1286 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_PASTECR,MF_BYCOMMAND | MF_ENABLED); |
1287 |
|
|
} |
1288 |
|
|
else { |
1289 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_PASTE2,MF_BYCOMMAND | MF_GRAYED); |
1290 |
|
|
EnableMenuItem(EditMenu,ID_EDIT_PASTECR,MF_BYCOMMAND | MF_GRAYED); |
1291 |
|
|
} |
1292 |
|
|
} |
1293 |
|
|
else if (SubMenu == SetupMenu) |
1294 |
|
|
if (cv.Ready && |
1295 |
|
|
((cv.PortType==IdTCPIP) || (cv.PortType==IdFile)) || |
1296 |
|
|
(SendVar!=NULL) || (FileVar!=NULL) || Connecting) |
1297 |
|
|
EnableMenuItem(SetupMenu,ID_SETUP_SERIALPORT,MF_BYCOMMAND | MF_GRAYED); |
1298 |
|
|
else |
1299 |
|
|
EnableMenuItem(SetupMenu,ID_SETUP_SERIALPORT,MF_BYCOMMAND | MF_ENABLED); |
1300 |
|
|
|
1301 |
|
|
else if (SubMenu == ControlMenu) |
1302 |
|
|
{ |
1303 |
|
|
if (cv.Ready && |
1304 |
|
|
(SendVar==NULL) && (FileVar==NULL)) { |
1305 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_ENABLED); |
1306 |
|
|
if (cv.PortType==IdSerial) |
1307 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_ENABLED); |
1308 |
|
|
else |
1309 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_GRAYED); |
1310 |
|
|
} |
1311 |
|
|
else { |
1312 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_SENDBREAK,MF_BYCOMMAND | MF_GRAYED); |
1313 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_RESETPORT,MF_BYCOMMAND | MF_GRAYED); |
1314 |
|
|
} |
1315 |
|
|
|
1316 |
|
|
if (cv.Ready && cv.TelFlag && (FileVar==NULL)) |
1317 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_AREYOUTHERE,MF_BYCOMMAND | MF_ENABLED); |
1318 |
|
|
else |
1319 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_AREYOUTHERE,MF_BYCOMMAND | MF_GRAYED); |
1320 |
|
|
|
1321 |
|
|
if (HTEKWin==0) |
1322 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_GRAYED); |
1323 |
|
|
else |
1324 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_CLOSETEK,MF_BYCOMMAND | MF_ENABLED); |
1325 |
|
|
|
1326 |
|
|
if ((ConvH!=0) || (FileVar!=NULL)) |
1327 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_GRAYED); |
1328 |
|
|
else |
1329 |
|
|
EnableMenuItem(ControlMenu,ID_CONTROL_MACRO,MF_BYCOMMAND | MF_ENABLED); |
1330 |
|
|
|
1331 |
|
|
} |
1332 |
|
|
else if (SubMenu == WinMenu) |
1333 |
|
|
{ |
1334 |
|
|
SetWinMenu(WinMenu, ts.UIMsg, sizeof(ts.UIMsg), ts.UILanguageFile, 1); |
1335 |
|
|
} |
1336 |
|
|
|
1337 |
|
|
TTXModifyPopupMenu(SubMenu); /* TTPLUG */ |
1338 |
|
|
} |
1339 |
|
|
|
1340 |
|
|
// added ConfirmPasteMouseRButton (2007.3.17 maya) |
1341 |
|
|
void CVTWindow::InitPasteMenu(HMENU *Menu) |
1342 |
|
|
{ |
1343 |
|
|
char uimsg[MAX_UIMSG]; |
1344 |
|
|
|
1345 |
|
|
*Menu = LoadMenu(AfxGetInstanceHandle(), |
1346 |
|
|
MAKEINTRESOURCE(IDR_PASTEMENU)); |
1347 |
|
|
|
1348 |
|
|
GetMenuString(*Menu, ID_EDIT_PASTE2, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1349 |
|
|
get_lang_msg("MENU_EDIT_PASTE", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1350 |
|
|
ModifyMenu(*Menu, ID_EDIT_PASTE2, MF_BYCOMMAND, ID_EDIT_PASTE2, ts.UIMsg); |
1351 |
|
|
GetMenuString(*Menu, ID_EDIT_PASTECR, uimsg, sizeof(uimsg), MF_BYCOMMAND); |
1352 |
|
|
get_lang_msg("MENU_EDIT_PASTECR", ts.UIMsg, sizeof(ts.UIMsg), uimsg, ts.UILanguageFile); |
1353 |
|
|
ModifyMenu(*Menu, ID_EDIT_PASTECR, MF_BYCOMMAND, ID_EDIT_PASTECR, ts.UIMsg); |
1354 |
|
|
} |
1355 |
|
|
|
1356 |
|
|
void CVTWindow::ResetSetup() |
1357 |
|
|
{ |
1358 |
|
|
ChangeFont(); |
1359 |
|
|
BuffChangeWinSize(WinWidth,WinHeight); |
1360 |
|
|
ChangeCaret(); |
1361 |
|
|
|
1362 |
|
|
if (cv.Ready) { |
1363 |
|
|
ts.PortType = cv.PortType; |
1364 |
|
|
if (cv.PortType==IdSerial) { |
1365 |
|
|
/* if serial port, change port parameters */ |
1366 |
|
|
ts.ComPort = cv.ComPort; |
1367 |
|
|
CommResetSerial(&ts, &cv, TRUE); |
1368 |
|
|
} |
1369 |
|
|
} |
1370 |
|
|
|
1371 |
|
|
/* setup terminal */ |
1372 |
|
|
SetupTerm(); |
1373 |
|
|
|
1374 |
|
|
/* background and ANSI color */ |
1375 |
|
|
#ifdef ALPHABLEND_TYPE2 |
1376 |
|
|
BGInitialize(); |
1377 |
|
|
BGSetupPrimary(TRUE); |
1378 |
|
|
// 2006/03/17 by 337 : Alpha�l���������X |
1379 |
|
|
// Layered�������������������������������� |
1380 |
|
|
if (ts.EtermLookfeel.BGUseAlphaBlendAPI) { |
1381 |
|
|
MySetLayeredWindowAttributes(HVTWin, 0, ts.AlphaBlend, LWA_ALPHA); |
1382 |
|
|
} |
1383 |
|
|
#else |
1384 |
|
|
DispApplyANSIColor(); |
1385 |
|
|
#endif |
1386 |
|
|
DispSetNearestColors(IdBack, IdFore+8, NULL); |
1387 |
|
|
|
1388 |
|
|
/* setup window */ |
1389 |
|
|
ChangeWin(); |
1390 |
|
|
|
1391 |
|
|
/* Language & IME */ |
1392 |
|
|
ResetIME(); |
1393 |
|
|
|
1394 |
|
|
/* change TEK window */ |
1395 |
|
|
if (pTEKWin != NULL) |
1396 |
|
|
((CTEKWindow *)pTEKWin)->RestoreSetup(); |
1397 |
|
|
} |
1398 |
|
|
|
1399 |
|
|
void CVTWindow::RestoreSetup() |
1400 |
|
|
{ |
1401 |
|
|
char TempDir[MAXPATHLEN]; |
1402 |
|
|
char TempName[MAXPATHLEN]; |
1403 |
|
|
|
1404 |
|
|
if ( strlen(ts.SetupFName)==0 ) |
1405 |
|
|
return; |
1406 |
|
|
|
1407 |
|
|
ExtractFileName(ts.SetupFName,TempName,sizeof(TempName)); |
1408 |
|
|
ExtractDirName(ts.SetupFName,TempDir); |
1409 |
|
|
if (TempDir[0]==0) |
1410 |
|
|
strncpy_s(TempDir, sizeof(TempDir),ts.HomeDir, _TRUNCATE); |
1411 |
|
|
FitFileName(TempName,sizeof(TempName),".INI"); |
1412 |
|
|
|
1413 |
|
|
strncpy_s(ts.SetupFName, sizeof(ts.SetupFName),TempDir, _TRUNCATE); |
1414 |
|
|
AppendSlash(ts.SetupFName,sizeof(ts.SetupFName)); |
1415 |
|
|
strncat_s(ts.SetupFName,sizeof(ts.SetupFName),TempName,_TRUNCATE); |
1416 |
|
|
|
1417 |
|
|
if (LoadTTSET()) |
1418 |
|
|
(*ReadIniFile)(ts.SetupFName,&ts); |
1419 |
|
|
FreeTTSET(); |
1420 |
|
|
|
1421 |
|
|
#if 0 |
1422 |
|
|
ChangeDefaultSet(&ts,NULL); |
1423 |
|
|
#endif |
1424 |
|
|
|
1425 |
|
|
ResetSetup(); |
1426 |
|
|
} |
1427 |
|
|
|
1428 |
|
|
/* called by the [Setup] Terminal command */ |
1429 |
|
|
void CVTWindow::SetupTerm() |
1430 |
|
|
{ |
1431 |
|
|
if (ts.Language==IdJapanese) |
1432 |
|
|
ResetCharSet(); |
1433 |
|
|
if (ts.Language==IdKorean) // HKS |
1434 |
|
|
ResetCharSet(); |
1435 |
|
|
cv.CRSend = ts.CRSend; |
1436 |
|
|
|
1437 |
|
|
// for russian mode |
1438 |
|
|
cv.RussHost = ts.RussHost; |
1439 |
|
|
cv.RussClient = ts.RussClient; |
1440 |
|
|
|
1441 |
|
|
if (cv.Ready && cv.TelFlag && (ts.TelEcho>0)) |
1442 |
|
|
TelChangeEcho(); |
1443 |
|
|
|
1444 |
|
|
if ((ts.TerminalWidth!=NumOfColumns) || |
1445 |
|
|
(ts.TerminalHeight!=NumOfLines-StatusLine)) { |
1446 |
|
|
LockBuffer(); |
1447 |
|
|
HideStatusLine(); |
1448 |
|
|
ChangeTerminalSize(ts.TerminalWidth, |
1449 |
|
|
ts.TerminalHeight); |
1450 |
|
|
UnlockBuffer(); |
1451 |
|
|
} |
1452 |
|
|
else if ((ts.TermIsWin>0) && |
1453 |
|
|
((ts.TerminalWidth!=WinWidth) || |
1454 |
|
|
(ts.TerminalHeight!=WinHeight-StatusLine))) |
1455 |
|
|
BuffChangeWinSize(ts.TerminalWidth,ts.TerminalHeight+StatusLine); |
1456 |
|
|
} |
1457 |
|
|
|
1458 |
|
|
void CVTWindow::Startup() |
1459 |
|
|
{ |
1460 |
|
|
/* auto log */ |
1461 |
|
|
/* OnCommOpen ���J�n�������������������J�n������ (2007.5.14 maya) */ |
1462 |
|
|
|
1463 |
|
|
if ((TopicName[0]==0) && (ts.MacroFN[0]!=0)) { |
1464 |
|
|
// start the macro specified in the command line or setup file |
1465 |
|
|
RunMacro(ts.MacroFN,TRUE); |
1466 |
|
|
ts.MacroFN[0] = 0; |
1467 |
|
|
} |
1468 |
|
|
else {// start connection |
1469 |
|
|
if (TopicName[0]!=0) |
1470 |
|
|
cv.NoMsg=1; /* suppress error messages */ |
1471 |
|
|
::PostMessage(HVTWin,WM_USER_COMMSTART,0,0); |
1472 |
|
|
} |
1473 |
|
|
} |
1474 |
|
|
|
1475 |
|
|
void CVTWindow::OpenTEK() |
1476 |
|
|
{ |
1477 |
|
|
ActiveWin = IdTEK; |
1478 |
|
|
if (HTEKWin==NULL) { |
1479 |
|
|
pTEKWin = new CTEKWindow(); |
1480 |
|
|
} |
1481 |
|
|
else { |
1482 |
|
|
::ShowWindow(HTEKWin,SW_SHOWNORMAL); |
1483 |
|
|
::SetFocus(HTEKWin); |
1484 |
|
|
} |
1485 |
|
|
} |
1486 |
|
|
|
1487 |
|
|
///////////////////////////////////////////////////////////////////////////// |
1488 |
|
|
// CVTWindow message handler |
1489 |
|
|
|
1490 |
|
|
LRESULT CVTWindow::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) |
1491 |
|
|
{ |
1492 |
|
|
LRESULT Result; |
1493 |
|
|
|
1494 |
|
|
if (message == MsgDlgHelp) { |
1495 |
|
|
OnDlgHelp(wParam,lParam); |
1496 |
|
|
return 0; |
1497 |
|
|
} |
1498 |
|
|
else if ((ts.HideTitle>0) && |
1499 |
|
|
(message == WM_NCHITTEST)) { |
1500 |
|
|
Result = CFrameWnd::DefWindowProc(message,wParam,lParam); |
1501 |
|
|
if ((Result==HTCLIENT) && AltKey()) |
1502 |
|
|
#ifdef ALPHABLEND_TYPE2 |
1503 |
|
|
if(ShiftKey()) |
1504 |
|
|
Result = HTBOTTOMRIGHT; |
1505 |
|
|
else |
1506 |
|
|
Result = HTCAPTION; |
1507 |
|
|
#else |
1508 |
|
|
Result = HTCAPTION; |
1509 |
|
|
#endif |
1510 |
|
|
return Result; |
1511 |
|
|
} |
1512 |
|
|
|
1513 |
|
|
return (CFrameWnd::DefWindowProc(message,wParam,lParam)); |
1514 |
|
|
} |
1515 |
|
|
|
1516 |
|
|
BOOL CVTWindow::OnCommand(WPARAM wParam, LPARAM lParam) |
1517 |
|
|
{ |
1518 |
|
|
WORD wID = LOWORD(wParam); |
1519 |
|
|
WORD wNotifyCode = HIWORD(wParam); |
1520 |
|
|
|
1521 |
|
|
if (wNotifyCode==1) { |
1522 |
|
|
switch (wID) { |
1523 |
|
|
case ID_ACC_SENDBREAK: |
1524 |
|
|
// added DisableAcceleratorSendBreak (2007.3.17 maya) |
1525 |
|
|
if (!ts.DisableAcceleratorSendBreak) |
1526 |
|
|
OnControlSendBreak(); |
1527 |
|
|
return TRUE; |
1528 |
|
|
case ID_ACC_PASTECR: |
1529 |
|
|
OnEditPasteCR(); |
1530 |
|
|
return TRUE; |
1531 |
|
|
case ID_ACC_AREYOUTHERE: |
1532 |
|
|
OnControlAreYouThere(); |
1533 |
|
|
return TRUE; |
1534 |
|
|
case ID_ACC_PASTE: |
1535 |
|
|
OnEditPaste(); |
1536 |
|
|
return TRUE; |
1537 |
|
|
case ID_ACC_DISCONNECT: |
1538 |
|
|
OnFileDisconnect(); |
1539 |
|
|
return TRUE; |
1540 |
|
|
} |
1541 |
|
|
if (ActiveWin==IdVT) { |
1542 |
|
|
switch (wID) { |
1543 |
|
|
case ID_ACC_NEWCONNECTION: |
1544 |
|
|
OnFileNewConnection(); |
1545 |
|
|
return TRUE; |
1546 |
|
|
case ID_ACC_COPY: |
1547 |
|
|
OnEditCopy(); |
1548 |
|
|
return TRUE; |
1549 |
|
|
case ID_ACC_PRINT: |
1550 |
|
|
OnFilePrint(); |
1551 |
|
|
return TRUE; |
1552 |
|
|
case ID_ACC_EXIT: |
1553 |
|
|
OnFileExit(); |
1554 |
|
|
return TRUE; |
1555 |
|
|
} |
1556 |
|
|
} |
1557 |
|
|
else { // transfer accelerator message to TEK win |
1558 |
|
|
switch (wID) { |
1559 |
|
|
case ID_ACC_COPY: |
1560 |
|
|
::PostMessage(HTEKWin,WM_COMMAND,ID_TEKEDIT_COPY,0); |
1561 |
|
|
return TRUE; |
1562 |
|
|
case ID_ACC_PRINT: |
1563 |
|
|
::PostMessage(HTEKWin,WM_COMMAND,ID_TEKFILE_PRINT,0); |
1564 |
|
|
return TRUE; |
1565 |
|
|
case ID_ACC_EXIT: |
1566 |
|
|
::PostMessage(HTEKWin,WM_COMMAND,ID_TEKFILE_EXIT,0); |
1567 |
|
|
return TRUE; |
1568 |
|
|
} |
1569 |
|
|
} |
1570 |
|
|
} |
1571 |
|
|
|
1572 |
|
|
if ((wID>=ID_WINDOW_1) && (wID<ID_WINDOW_1+9)) { |
1573 |
|
|
SelectWin(wID-ID_WINDOW_1); |
1574 |
|
|
return TRUE; |
1575 |
|
|
} |
1576 |
|
|
else { |
1577 |
|
|
if (TTXProcessCommand(HVTWin, wID)) |
1578 |
|
|
return TRUE; |
1579 |
|
|
else /* TTPLUG */ |
1580 |
|
|
return CFrameWnd::OnCommand(wParam, lParam); |
1581 |
|
|
} |
1582 |
|
|
} |
1583 |
|
|
|
1584 |
|
|
void CVTWindow::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) |
1585 |
|
|
{ |
1586 |
|
|
DispSetActive(nState!=WA_INACTIVE); |
1587 |
|
|
} |
1588 |
|
|
|
1589 |
|
|
void CVTWindow::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) |
1590 |
|
|
{ |
1591 |
|
|
unsigned int i; |
1592 |
|
|
char Code; |
1593 |
|
|
|
1594 |
|
|
if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) |
1595 |
|
|
return; |
1596 |
|
|
|
1597 |
|
|
if ((ts.MetaKey>0) && AltKey()) { |
1598 |
|
|
::PostMessage(HVTWin,WM_SYSCHAR,nChar,MAKELONG(nRepCnt,nFlags)); |
1599 |
|
|
return; |
1600 |
|
|
} |
1601 |
|
|
Code = nChar; |
1602 |
|
|
|
1603 |
|
|
if ((ts.Language==IdRussian) && |
1604 |
|
|
((BYTE)Code>=128)) |
1605 |
|
|
Code = (char)RussConv(ts.RussKeyb,ts.RussClient,(BYTE)Code); |
1606 |
|
|
|
1607 |
|
|
for (i=1 ; i<=nRepCnt ; i++) { |
1608 |
|
|
CommTextOut(&cv,&Code,1); |
1609 |
|
|
if (ts.LocalEcho>0) |
1610 |
|
|
CommTextEcho(&cv,&Code,1); |
1611 |
|
|
} |
1612 |
|
|
|
1613 |
|
|
/* �����s�����������X�N���[���������������� |
1614 |
|
|
�����[�g�����L�[�������M���X�N���[�������� */ |
1615 |
|
|
if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { |
1616 |
|
|
DispVScroll(SCROLL_BOTTOM, 0); |
1617 |
|
|
} |
1618 |
|
|
} |
1619 |
|
|
|
1620 |
|
|
/* copy from ttset.c*/ |
1621 |
|
|
static void WriteInt2(PCHAR Sect, PCHAR Key, PCHAR FName, int i1, int i2) |
1622 |
|
|
{ |
1623 |
|
|
char Temp[32]; |
1624 |
|
|
_snprintf_s(Temp, sizeof(Temp), _TRUNCATE, "%d,%d", i1, i2); |
1625 |
|
|
WritePrivateProfileString(Sect, Key, Temp, FName); |
1626 |
|
|
} |
1627 |
|
|
|
1628 |
|
|
static void SaveVTPos() |
1629 |
|
|
{ |
1630 |
|
|
#define Section "Tera Term" |
1631 |
|
|
if (ts.SaveVTWinPos) { |
1632 |
|
|
/* VT win position */ |
1633 |
|
|
WriteInt2(Section, "VTPos", ts.SetupFName, ts.VTPos.x, ts.VTPos.y); |
1634 |
|
|
|
1635 |
|
|
/* VT terminal size */ |
1636 |
|
|
WriteInt2(Section, "TerminalSize", ts.SetupFName, |
1637 |
|
|
ts.TerminalWidth, ts.TerminalHeight); |
1638 |
|
|
} |
1639 |
|
|
} |
1640 |
|
|
|
1641 |
|
|
void CVTWindow::OnClose() |
1642 |
|
|
{ |
1643 |
|
|
if ((HTEKWin!=NULL) && ! ::IsWindowEnabled(HTEKWin)) { |
1644 |
|
|
MessageBeep(0); |
1645 |
|
|
return; |
1646 |
|
|
} |
1647 |
|
|
get_lang_msg("MSG_DISCONNECT_CONF", ts.UIMsg, sizeof(ts.UIMsg), |
1648 |
|
|
"Disconnect?", ts.UILanguageFile); |
1649 |
|
|
if (cv.Ready && (cv.PortType==IdTCPIP) && |
1650 |
|
|
((ts.PortFlag & PF_CONFIRMDISCONN) != 0) && |
1651 |
|
|
! CloseTT && |
1652 |
|
|
(::MessageBox(HVTWin, ts.UIMsg, "Tera Term", |
1653 |
|
|
MB_OKCANCEL | MB_ICONEXCLAMATION | MB_DEFBUTTON2)==IDCANCEL)) |
1654 |
|
|
return; |
1655 |
|
|
|
1656 |
|
|
FileTransEnd(0); |
1657 |
|
|
ProtoEnd(); |
1658 |
|
|
|
1659 |
|
|
SaveVTPos(); |
1660 |
|
|
DestroyWindow(); |
1661 |
|
|
} |
1662 |
|
|
|
1663 |
|
|
void CVTWindow::OnDestroy() |
1664 |
|
|
{ |
1665 |
|
|
// remove this window from the window list |
1666 |
|
|
UnregWin(HVTWin); |
1667 |
|
|
|
1668 |
|
|
EndKeyboard(); |
1669 |
|
|
|
1670 |
|
|
/* Disable drag-drop */ |
1671 |
|
|
::DragAcceptFiles(HVTWin,FALSE); |
1672 |
|
|
|
1673 |
|
|
EndDDE(); |
1674 |
|
|
|
1675 |
|
|
if (cv.TelFlag) |
1676 |
|
|
EndTelnet(); |
1677 |
|
|
CommClose(&cv); |
1678 |
|
|
|
1679 |
|
|
OpenHelp(HVTWin,HH_CLOSE_ALL,0); |
1680 |
|
|
|
1681 |
|
|
FreeIME(); |
1682 |
|
|
FreeTTSET(); |
1683 |
|
|
do { } |
1684 |
|
|
while (FreeTTDLG()); |
1685 |
|
|
|
1686 |
|
|
do { } |
1687 |
|
|
while (FreeTTFILE()); |
1688 |
|
|
|
1689 |
|
|
if (HTEKWin != NULL) |
1690 |
|
|
::DestroyWindow(HTEKWin); |
1691 |
|
|
|
1692 |
|
|
EndDisp(); |
1693 |
|
|
|
1694 |
|
|
FreeBuffer(); |
1695 |
|
|
|
1696 |
|
|
CFrameWnd::OnDestroy(); |
1697 |
|
|
TTXEnd(); /* TTPLUG */ |
1698 |
|
|
} |
1699 |
|
|
|
1700 |
|
|
// MessageBox���{�^�������X�p�n���h�� |
1701 |
|
|
static LRESULT CALLBACK MsgBoxHootProc( INT hc, WPARAM wParam, LPARAM lParam ) |
1702 |
|
|
{ |
1703 |
|
|
if ( hc == HCBT_ACTIVATE ) { |
1704 |
|
|
// &Send file �� S&CP ���������A�N�Z�����[�^�L�[���������� |
1705 |
|
|
get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", ts.UIMsg, sizeof(ts.UIMsg), |
1706 |
|
|
"Send file", ts.UILanguageFile); |
1707 |
|
|
SetDlgItemText( (HWND)wParam, IDOK, ts.UIMsg ); |
1708 |
|
|
SetDlgItemText( (HWND)wParam, IDYES, ts.UIMsg ); |
1709 |
|
|
SetDlgItemText( (HWND)wParam, IDNO, "SCP" ); |
1710 |
|
|
|
1711 |
|
|
return FALSE; |
1712 |
|
|
} |
1713 |
|
|
|
1714 |
|
|
return CallNextHookEx( NULL, hc, wParam, lParam ); |
1715 |
|
|
} |
1716 |
|
|
|
1717 |
|
|
void CVTWindow::OnDropFiles(HDROP hDropInfo) |
1718 |
|
|
{ |
1719 |
|
|
::SetForegroundWindow(HVTWin); |
1720 |
|
|
if (cv.Ready && (SendVar==NULL) && NewFileVar(&SendVar)) |
1721 |
|
|
{ |
1722 |
|
|
if (DragQueryFile(hDropInfo,0,SendVar->FullName, |
1723 |
|
|
sizeof(SendVar->FullName))>0) |
1724 |
|
|
{ |
1725 |
|
|
DWORD attr; |
1726 |
|
|
char *ptr, *q; |
1727 |
|
|
char tmpbuf[_MAX_PATH * 2]; |
1728 |
|
|
|
1729 |
|
|
// �f�B���N�g�����������t���p�X�����\���t���� (2004.11.3 yutaka) |
1730 |
|
|
attr = GetFileAttributes(SendVar->FullName); |
1731 |
|
|
if (attr != -1 && (attr & FILE_ATTRIBUTE_DIRECTORY)) { |
1732 |
|
|
ptr = SendVar->FullName; |
1733 |
|
|
// �p�X���������� \ -> / �� |
1734 |
|
|
setlocale(LC_ALL, ts.Locale); |
1735 |
|
|
while (*ptr) { |
1736 |
|
|
if (isleadbyte(*ptr)) { // multi-byte |
1737 |
|
|
ptr += 2; |
1738 |
|
|
continue; |
1739 |
|
|
} |
1740 |
|
|
if (*ptr == '\\') |
1741 |
|
|
*ptr = '/'; |
1742 |
|
|
ptr++; |
1743 |
|
|
} |
1744 |
|
|
|
1745 |
|
|
// �p�X���������������G�X�P�[�v���� |
1746 |
|
|
q = tmpbuf; |
1747 |
|
|
ptr = SendVar->FullName; |
1748 |
|
|
while (*ptr) { |
1749 |
|
|
if (*ptr == ' ') |
1750 |
|
|
*q++ = '\\'; |
1751 |
|
|
*q++ = *ptr; |
1752 |
|
|
ptr++; |
1753 |
|
|
} |
1754 |
|
|
*q = '\0'; // null-terminate |
1755 |
|
|
|
1756 |
|
|
ptr = tmpbuf; |
1757 |
|
|
|
1758 |
|
|
// console�����M |
1759 |
|
|
while (*ptr) { |
1760 |
|
|
FSOut1(*ptr); |
1761 |
|
|
if (ts.LocalEcho > 0) { |
1762 |
|
|
FSEcho1(*ptr); |
1763 |
|
|
} |
1764 |
|
|
ptr++; |
1765 |
|
|
} |
1766 |
|
|
FreeFileVar(&SendVar); // �������Y������ |
1767 |
|
|
|
1768 |
|
|
} else { |
1769 |
|
|
// Confirm send a file when drag and drop (2007.12.28 maya) |
1770 |
|
|
if (ts.ConfirmFileDragAndDrop) { |
1771 |
|
|
// ���������t�@�C�������e�����������O���A���[�U���������������s���B(2006.1.21 yutaka) |
1772 |
|
|
// MessageBox��SCP���I�������������������B(2008.1.25 yutaka) |
1773 |
|
|
char uimsg[MAX_UIMSG]; |
1774 |
|
|
HHOOK hook = NULL; |
1775 |
|
|
DWORD dwThreadID = GetCurrentThreadId(); |
1776 |
|
|
int ret; |
1777 |
|
|
|
1778 |
|
|
get_lang_msg("MSG_DANDD_CONF_TITLE", uimsg, sizeof(uimsg), |
1779 |
|
|
"Tera Term: File Drag and Drop", ts.UILanguageFile); |
1780 |
|
|
get_lang_msg("MSG_DANDD_CONF", ts.UIMsg, sizeof(ts.UIMsg), |
1781 |
|
|
"Are you sure that you want to send the file content?", ts.UILanguageFile); |
1782 |
|
|
|
1783 |
|
|
hook = SetWindowsHookEx( WH_CBT, MsgBoxHootProc, NULL, dwThreadID ); |
1784 |
|
|
if (cv.isSSH == 2) { |
1785 |
|
|
ret = MessageBox(ts.UIMsg, uimsg, MB_YESNOCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON3); |
1786 |
|
|
} |
1787 |
|
|
else { |
1788 |
|
|
// SSH2 �������������������� "SCP" ���o������ (2008.1.25 maya) |
1789 |
|
|
ret = MessageBox(ts.UIMsg, uimsg, MB_OKCANCEL | MB_ICONINFORMATION | MB_DEFBUTTON2); |
1790 |
|
|
} |
1791 |
|
|
UnhookWindowsHookEx( hook ); |
1792 |
|
|
|
1793 |
|
|
if (ret == IDOK || ret == IDYES) { // sendfile |
1794 |
|
|
SendVar->DirLen = 0; |
1795 |
|
|
ts.TransBin = 0; |
1796 |
|
|
FileSendStart(); |
1797 |
|
|
|
1798 |
|
|
} else if (ret == IDNO) { // SCP |
1799 |
|
|
typedef int (CALLBACK *PSSH_start_scp)(char *, char *); |
1800 |
|
|
static PSSH_start_scp func = NULL; |
1801 |
|
|
static HMODULE h = NULL, h2 = NULL; |
1802 |
|
|
char msg[128]; |
1803 |
|
|
|
1804 |
|
|
if (func == NULL) { |
1805 |
|
|
h2 = LoadLibrary("ttxssh.dll"); |
1806 |
|
|
if ( ((h = GetModuleHandle("ttxssh.dll")) == NULL) ) { |
1807 |
|
|
_snprintf_s(msg, sizeof(msg), _TRUNCATE, "GetModuleHandle(\"ttxssh.dll\")) %d", GetLastError()); |
1808 |
|
|
goto scp_send_error; |
1809 |
|
|
} |
1810 |
|
|
func = (PSSH_start_scp)GetProcAddress(h, "TTXScpSendfile"); |
1811 |
|
|
if (func == NULL) { |
1812 |
|
|
_snprintf_s(msg, sizeof(msg), _TRUNCATE, "GetProcAddress(\"TTXScpSendfile\")) %d", GetLastError()); |
1813 |
|
|
goto scp_send_error; |
1814 |
|
|
} |
1815 |
|
|
} |
1816 |
|
|
|
1817 |
|
|
if (func != NULL) { |
1818 |
|
|
func(SendVar->FullName, NULL); |
1819 |
|
|
goto send_success; |
1820 |
|
|
} |
1821 |
|
|
|
1822 |
|
|
scp_send_error: |
1823 |
|
|
::MessageBox(NULL, msg, "Tera Term: scpsend command error", MB_OK | MB_ICONERROR); |
1824 |
|
|
FreeLibrary(h2); |
1825 |
|
|
send_success: |
1826 |
|
|
FreeFileVar(&SendVar); // �������Y������ |
1827 |
|
|
|
1828 |
|
|
} else { |
1829 |
|
|
FreeFileVar(&SendVar); |
1830 |
|
|
|
1831 |
|
|
} |
1832 |
|
|
} |
1833 |
|
|
else { |
1834 |
|
|
SendVar->DirLen = 0; |
1835 |
|
|
ts.TransBin = 0; |
1836 |
|
|
FileSendStart(); |
1837 |
|
|
|
1838 |
|
|
} |
1839 |
|
|
} |
1840 |
|
|
} |
1841 |
|
|
else |
1842 |
|
|
FreeFileVar(&SendVar); |
1843 |
|
|
} |
1844 |
|
|
DragFinish(hDropInfo); |
1845 |
|
|
} |
1846 |
|
|
|
1847 |
|
|
void CVTWindow::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) |
1848 |
|
|
{ |
1849 |
|
|
#ifndef WINDOW_MAXMIMUM_ENABLED |
1850 |
|
|
lpMMI->ptMaxSize.x = 10000; |
1851 |
|
|
lpMMI->ptMaxSize.y = 10000; |
1852 |
|
|
lpMMI->ptMaxTrackSize.x = 10000; |
1853 |
|
|
lpMMI->ptMaxTrackSize.y = 10000; |
1854 |
|
|
#endif |
1855 |
|
|
} |
1856 |
|
|
|
1857 |
|
|
void CVTWindow::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) |
1858 |
|
|
{ |
1859 |
|
|
int Func; |
1860 |
|
|
|
1861 |
|
|
switch (nSBCode) { |
1862 |
|
|
case SB_BOTTOM: |
1863 |
|
|
Func = SCROLL_BOTTOM; |
1864 |
|
|
break; |
1865 |
|
|
case SB_ENDSCROLL: |
1866 |
|
|
return; |
1867 |
|
|
case SB_LINEDOWN: |
1868 |
|
|
Func = SCROLL_LINEDOWN; |
1869 |
|
|
break; |
1870 |
|
|
case SB_LINEUP: |
1871 |
|
|
Func = SCROLL_LINEUP; |
1872 |
|
|
break; |
1873 |
|
|
case SB_PAGEDOWN: |
1874 |
|
|
Func = SCROLL_PAGEDOWN; |
1875 |
|
|
break; |
1876 |
|
|
case SB_PAGEUP: |
1877 |
|
|
Func = SCROLL_PAGEUP; |
1878 |
|
|
break; |
1879 |
|
|
case SB_THUMBPOSITION: |
1880 |
|
|
case SB_THUMBTRACK: |
1881 |
|
|
Func = SCROLL_POS; |
1882 |
|
|
break; |
1883 |
|
|
case SB_TOP: |
1884 |
|
|
Func = SCROLL_TOP; |
1885 |
|
|
break; |
1886 |
|
|
default: |
1887 |
|
|
return; |
1888 |
|
|
} |
1889 |
|
|
DispHScroll(Func,nPos); |
1890 |
|
|
} |
1891 |
|
|
|
1892 |
|
|
void CVTWindow::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) |
1893 |
|
|
{ |
1894 |
|
|
InitMenuPopup(pPopupMenu->m_hMenu); |
1895 |
|
|
} |
1896 |
|
|
|
1897 |
|
|
void CVTWindow::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) |
1898 |
|
|
{ |
1899 |
|
|
BYTE KeyState[256]; |
1900 |
|
|
MSG M; |
1901 |
|
|
|
1902 |
|
|
switch (KeyDown(HVTWin,nChar,nRepCnt,nFlags & 0x1ff)) { |
1903 |
|
|
case KEYDOWN_OTHER: |
1904 |
|
|
break; |
1905 |
|
|
case KEYDOWN_CONTROL: |
1906 |
|
|
return; |
1907 |
|
|
case KEYDOWN_COMMOUT: |
1908 |
|
|
/* �����s�����������X�N���[���������������� |
1909 |
|
|
�����[�g�����L�[�������M���X�N���[�������� */ |
1910 |
|
|
if (ts.AutoScrollOnlyInBottomLine != 0 && WinOrgY != 0) { |
1911 |
|
|
DispVScroll(SCROLL_BOTTOM, 0); |
1912 |
|
|
} |
1913 |
|
|
return; |
1914 |
|
|
} |
1915 |
|
|
|
1916 |
|
|
|
1917 |
|
|
if ((ts.MetaKey>0) && ((nFlags & 0x2000) != 0)) { |
1918 |
|
|
/* for Ctrl+Alt+Key combination */ |
1919 |
|
|
GetKeyboardState((PBYTE)KeyState); |
1920 |
|
|
KeyState[VK_MENU] = 0; |
1921 |
|
|
SetKeyboardState((PBYTE)KeyState); |
1922 |
|
|
M.hwnd = HVTWin; |
1923 |
|
|
M.message = WM_KEYDOWN; |
1924 |
|
|
M.wParam = nChar; |
1925 |
|
|
M.lParam = MAKELONG(nRepCnt,nFlags & 0xdfff); |
1926 |
|
|
TranslateMessage(&M); |
1927 |
|
|
|
1928 |
|
|
} else { |
1929 |
|
|
// ScrollLock�L�[���_�����������������A�}�E�X���N���b�N���������������������� |
1930 |
|
|
// �������B���������A�p�[�W���O�������������~�����B |
1931 |
|
|
// ���Y�L�[���������������A���������J�������B(2006.11.14 yutaka) |
1932 |
|
|
#if 0 |
1933 |
|
|
GetKeyboardState((PBYTE)KeyState); |
1934 |
|
|
if (KeyState[VK_SCROLL] == 0x81) { // on : scroll locked |
1935 |
|
|
ScrollLock = TRUE; |
1936 |
|
|
} else if (KeyState[VK_SCROLL] == 0x80) { // off : scroll unlocked |
1937 |
|
|
ScrollLock = FALSE; |
1938 |
|
|
} else { |
1939 |
|
|
// do nothing |
1940 |
|
|
} |
1941 |
|
|
#endif |
1942 |
|
|
} |
1943 |
|
|
|
1944 |
|
|
} |
1945 |
|
|
|
1946 |
|
|
void CVTWindow::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) |
1947 |
|
|
{ |
1948 |
|
|
KeyUp(nChar); |
1949 |
|
|
} |
1950 |
|
|
|
1951 |
|
|
void CVTWindow::OnKillFocus(CWnd* pNewWnd) |
1952 |
|
|
{ |
1953 |
|
|
DispDestroyCaret(); |
1954 |
|
|
FocusReport(FALSE); |
1955 |
|
|
CFrameWnd::OnKillFocus(pNewWnd); |
1956 |
|
|
|
1957 |
|
|
if (IsCaretOn()) |
1958 |
|
|
CaretKillFocus(TRUE); |
1959 |
|
|
} |
1960 |
|
|
|
1961 |
|
|
void CVTWindow::OnLButtonDblClk(UINT nFlags, CPoint point) |
1962 |
|
|
{ |
1963 |
|
|
if (LButton || MButton || RButton) |
1964 |
|
|
return; |
1965 |
|
|
|
1966 |
|
|
DblClkX = point.x; |
1967 |
|
|
DblClkY = point.y; |
1968 |
|
|
|
1969 |
|
|
|
1970 |
|
|
if (! MouseReport(IdMouseEventBtnDown, IdLeftButton, DblClkX, DblClkY) && |
1971 |
|
|
BuffUrlDblClk(DblClkX, DblClkY)) // �u���E�U�����o���������������������B (2005.4.3 yutaka) |
1972 |
|
|
return; |
1973 |
|
|
|
1974 |
|
|
BuffDblClk(DblClkX, DblClkY); |
1975 |
|
|
|
1976 |
|
|
LButton = TRUE; |
1977 |
|
|
DblClk = TRUE; |
1978 |
|
|
AfterDblClk = TRUE; |
1979 |
|
|
::SetTimer(HVTWin, IdDblClkTimer, GetDoubleClickTime(), NULL); |
1980 |
|
|
|
1981 |
|
|
/* for AutoScrolling */ |
1982 |
|
|
::SetCapture(HVTWin); |
1983 |
|
|
::SetTimer(HVTWin, IdScrollTimer, 100, NULL); |
1984 |
|
|
} |
1985 |
|
|
|
1986 |
|
|
void CVTWindow::OnLButtonDown(UINT nFlags, CPoint point) |
1987 |
|
|
{ |
1988 |
|
|
POINT p; |
1989 |
|
|
|
1990 |
|
|
p.x = point.x; |
1991 |
|
|
p.y = point.y; |
1992 |
|
|
ButtonDown(p,IdLeftButton); |
1993 |
|
|
} |
1994 |
|
|
|
1995 |
|
|
void CVTWindow::OnLButtonUp(UINT nFlags, CPoint point) |
1996 |
|
|
{ |
1997 |
|
|
MouseReport(IdMouseEventBtnUp, IdLeftButton, point.x, point.y); |
1998 |
|
|
|
1999 |
|
|
if (! LButton) |
2000 |
|
|
return; |
2001 |
|
|
|
2002 |
|
|
ButtonUp(FALSE); |
2003 |
|
|
} |
2004 |
|
|
|
2005 |
|
|
void CVTWindow::OnMButtonDown(UINT nFlags, CPoint point) |
2006 |
|
|
{ |
2007 |
|
|
POINT p; |
2008 |
|
|
|
2009 |
|
|
p.x = point.x; |
2010 |
|
|
p.y = point.y; |
2011 |
|
|
ButtonDown(p,IdMiddleButton); |
2012 |
|
|
} |
2013 |
|
|
|
2014 |
|
|
void CVTWindow::OnMButtonUp(UINT nFlags, CPoint point) |
2015 |
|
|
{ |
2016 |
|
|
BOOL mousereport; |
2017 |
|
|
|
2018 |
|
|
mousereport = MouseReport(IdMouseEventBtnUp, IdMiddleButton, point.x, point.y); |
2019 |
|
|
|
2020 |
|
|
if (! MButton) |
2021 |
|
|
return; |
2022 |
|
|
|
2023 |
|
|
// added DisablePasteMouseMButton (2008.3.2 maya) |
2024 |
|
|
if (ts.DisablePasteMouseMButton) |
2025 |
|
|
ButtonUp(FALSE); |
2026 |
|
|
else |
2027 |
|
|
ButtonUp(TRUE); |
2028 |
|
|
} |
2029 |
|
|
|
2030 |
|
|
int CVTWindow::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) |
2031 |
|
|
{ |
2032 |
|
|
if ((ts.SelOnActive==0) && |
2033 |
|
|
(nHitTest==HTCLIENT)) //disable mouse event for text selection |
2034 |
|
|
return MA_ACTIVATEANDEAT; // when window is activated |
2035 |
|
|
else |
2036 |
|
|
return MA_ACTIVATE; |
2037 |
|
|
} |
2038 |
|
|
|
2039 |
|
|
void CVTWindow::OnMouseMove(UINT nFlags, CPoint point) |
2040 |
|
|
{ |
2041 |
|
|
int i; |
2042 |
|
|
|
2043 |
|
|
if (! (LButton || MButton || RButton)) { |
2044 |
|
|
// �}�E�X�J�[�\��������URL������������������������ (2005.4.2 yutaka) |
2045 |
|
|
BuffChangeSelect(point.x, point.y,0); |
2046 |
|
|
return; |
2047 |
|
|
} |
2048 |
|
|
|
2049 |
|
|
if (DblClk) |
2050 |
|
|
i = 2; |
2051 |
|
|
else if (TplClk) |
2052 |
|
|
i = 3; |
2053 |
|
|
else |
2054 |
|
|
i = 1; |
2055 |
|
|
|
2056 |
|
|
if (!ts.SelectOnlyByLButton || |
2057 |
|
|
(ts.SelectOnlyByLButton && LButton) ) { |
2058 |
|
|
// SelectOnlyByLButton == TRUE ���������A���{�^���_�E���������I������ (2007.11.21 maya) |
2059 |
|
|
BuffChangeSelect(point.x, point.y,i); |
2060 |
|
|
} |
2061 |
|
|
} |
2062 |
|
|
|
2063 |
|
|
void CVTWindow::OnMove(int x, int y) |
2064 |
|
|
{ |
2065 |
|
|
DispSetWinPos(); |
2066 |
|
|
} |
2067 |
|
|
|
2068 |
|
|
// �}�E�X�z�C�[�������] |
2069 |
|
|
BOOL CVTWindow::OnMouseWheel( |
2070 |
|
|
UINT nFlags, // ���z�L�[ |
2071 |
|
|
short zDelta, // ���]���� |
2072 |
|
|
CPoint pt // �J�[�\�����u |
2073 |
|
|
) |
2074 |
|
|
{ |
2075 |
|
|
int line, i; |
2076 |
|
|
|
2077 |
|
|
::ScreenToClient(HVTWin, &pt); |
2078 |
|
|
|
2079 |
|
|
line = abs(zDelta) / WHEEL_DELTA; // ���C���� |
2080 |
|
|
if (line < 1) line = 1; |
2081 |
|
|
|
2082 |
|
|
// ���X�N���[�����������s������������ (2008.4.6 yutaka) |
2083 |
|
|
if (line == 1 && ts.MouseWheelScrollLine > 0) |
2084 |
|
|
line *= ts.MouseWheelScrollLine; |
2085 |
|
|
|
2086 |
|
|
if (MouseReport(IdMouseEventWheel, zDelta<0, pt.x, pt.y)) |
2087 |
|
|
return TRUE; |
2088 |
|
|
|
2089 |
|
|
if (ts.TranslateWheelToCursor && AppliCursorMode && !ts.DisableAppCursor && |
2090 |
|
|
!(ControlKey() && ts.DisableWheelToCursorByCtrl)) { |
2091 |
|
|
if (zDelta < 0) { |
2092 |
|
|
KeyDown(HVTWin, VK_DOWN, line, MapVirtualKey(VK_DOWN, 0) | 0x100); |
2093 |
|
|
KeyUp(VK_DOWN); |
2094 |
|
|
} else { |
2095 |
|
|
KeyDown(HVTWin, VK_UP, line, MapVirtualKey(VK_UP, 0) | 0x100); |
2096 |
|
|
KeyUp(VK_UP); |
2097 |
|
|
} |
2098 |
|
|
} else { |
2099 |
|
|
for (i = 0 ; i < line ; i++) { |
2100 |
|
|
if (zDelta < 0) { |
2101 |
|
|
OnVScroll(SB_LINEDOWN, 0, NULL); |
2102 |
|
|
} else { |
2103 |
|
|
OnVScroll(SB_LINEUP, 0, NULL); |
2104 |
|
|
} |
2105 |
|
|
} |
2106 |
|
|
} |
2107 |
|
|
|
2108 |
|
|
return (TRUE); |
2109 |
|
|
} |
2110 |
|
|
|
2111 |
|
|
|
2112 |
|
|
void CVTWindow::OnNcLButtonDblClk(UINT nHitTest, CPoint point) |
2113 |
|
|
{ |
2114 |
|
|
if (! Minimized && (nHitTest == HTCAPTION)) |
2115 |
|
|
DispRestoreWinSize(); |
2116 |
|
|
else |
2117 |
|
|
CFrameWnd::OnNcLButtonDblClk(nHitTest,point); |
2118 |
|
|
} |
2119 |
|
|
|
2120 |
|
|
void CVTWindow::OnNcRButtonDown(UINT nHitTest, CPoint point) |
2121 |
|
|
{ |
2122 |
|
|
if ((nHitTest==HTCAPTION) && |
2123 |
|
|
(ts.HideTitle>0) && |
2124 |
|
|
AltKey()) |
2125 |
|
|
::CloseWindow(HVTWin); /* iconize */ |
2126 |
|
|
} |
2127 |
|
|
|
2128 |
|
|
void CVTWindow::OnPaint() |
2129 |
|
|
{ |
2130 |
|
|
PAINTSTRUCT ps; |
2131 |
|
|
CDC *cdc; |
2132 |
|
|
HDC PaintDC; |
2133 |
|
|
int Xs, Ys, Xe, Ye; |
2134 |
|
|
|
2135 |
|
|
#ifdef ALPHABLEND_TYPE2 |
2136 |
|
|
//<!--by AKASI |
2137 |
|
|
BGSetupPrimary(FALSE); |
2138 |
|
|
//--> |
2139 |
|
|
#endif |
2140 |
|
|
|
2141 |
|
|
cdc = BeginPaint(&ps); |
2142 |
|
|
PaintDC = cdc->GetSafeHdc(); |
2143 |
|
|
|
2144 |
|
|
PaintWindow(PaintDC,ps.rcPaint,ps.fErase, &Xs,&Ys,&Xe,&Ye); |
2145 |
|
|
LockBuffer(); |
2146 |
|
|
BuffUpdateRect(Xs,Ys,Xe,Ye); |
2147 |
|
|
UnlockBuffer(); |
2148 |
|
|
DispEndPaint(); |
2149 |
|
|
|
2150 |
|
|
EndPaint(&ps); |
2151 |
|
|
|
2152 |
|
|
if (FirstPaint) { |
2153 |
|
|
if (strlen(TopicName)>0) { |
2154 |
|
|
InitDDE(); |
2155 |
|
|
SendDDEReady(); |
2156 |
|
|
} |
2157 |
|
|
FirstPaint = FALSE; |
2158 |
|
|
Startup(); |
2159 |
|
|
} |
2160 |
|
|
} |
2161 |
|
|
|
2162 |
|
|
void CVTWindow::OnRButtonDown(UINT nFlags, CPoint point) |
2163 |
|
|
{ |
2164 |
|
|
POINT p; |
2165 |
|
|
|
2166 |
|
|
p.x = point.x; |
2167 |
|
|
p.y = point.y; |
2168 |
|
|
ButtonDown(p,IdRightButton); |
2169 |
|
|
} |
2170 |
|
|
|
2171 |
|
|
void CVTWindow::OnRButtonUp(UINT nFlags, CPoint point) |
2172 |
|
|
{ |
2173 |
|
|
BOOL mousereport; |
2174 |
|
|
|
2175 |
|
|
mousereport = MouseReport(IdMouseEventBtnUp, IdRightButton, point.x, point.y); |
2176 |
|
|
|
2177 |
|
|
if (! RButton) return; |
2178 |
|
|
|
2179 |
|
|
// �E�{�^�����������y�[�X�g�����~���� (2005.3.16 yutaka) |
2180 |
|
|
if (ts.DisablePasteMouseRButton || mousereport) { |
2181 |
|
|
ButtonUp(FALSE); |
2182 |
|
|
} else { |
2183 |
|
|
ButtonUp(TRUE); |
2184 |
|
|
} |
2185 |
|
|
} |
2186 |
|
|
|
2187 |
|
|
void CVTWindow::OnSetFocus(CWnd* pOldWnd) |
2188 |
|
|
{ |
2189 |
|
|
ChangeCaret(); |
2190 |
|
|
FocusReport(TRUE); |
2191 |
|
|
CFrameWnd::OnSetFocus(pOldWnd); |
2192 |
|
|
} |
2193 |
|
|
|
2194 |
|
|
|
2195 |
|
|
// |
2196 |
|
|
// ���T�C�Y�c�[���`�b�v(based on PuTTY sizetip.c) |
2197 |
|
|
// |
2198 |
|
|
static ATOM tip_class = 0; |
2199 |
|
|
static HFONT tip_font; |
2200 |
|
|
static COLORREF tip_bg; |
2201 |
|
|
static COLORREF tip_text; |
2202 |
|
|
static HWND tip_wnd = NULL; |
2203 |
|
|
static int tip_enabled = 0; |
2204 |
|
|
|
2205 |
|
|
static LRESULT CALLBACK SizeTipWndProc(HWND hWnd, UINT nMsg, |
2206 |
|
|
WPARAM wParam, LPARAM lParam) |
2207 |
|
|
{ |
2208 |
|
|
|
2209 |
|
|
switch (nMsg) { |
2210 |
|
|
case WM_ERASEBKGND: |
2211 |
|
|
return TRUE; |
2212 |
|
|
|
2213 |
|
|
case WM_PAINT: |
2214 |
|
|
{ |
2215 |
|
|
HBRUSH hbr; |
2216 |
|
|
HGDIOBJ holdbr; |
2217 |
|
|
RECT cr; |
2218 |
|
|
int wtlen; |
2219 |
|
|
LPTSTR wt; |
2220 |
|
|
HDC hdc; |
2221 |
|
|
|
2222 |
|
|
PAINTSTRUCT ps; |
2223 |
|
|
hdc = BeginPaint(hWnd, &ps); |
2224 |
|
|
|
2225 |
|
|
SelectObject(hdc, tip_font); |
2226 |
|
|
SelectObject(hdc, GetStockObject(BLACK_PEN)); |
2227 |
|
|
|
2228 |
|
|
hbr = CreateSolidBrush(tip_bg); |
2229 |
|
|
holdbr = SelectObject(hdc, hbr); |
2230 |
|
|
|
2231 |
|
|
GetClientRect(hWnd, &cr); |
2232 |
|
|
Rectangle(hdc, cr.left, cr.top, cr.right, cr.bottom); |
2233 |
|
|
|
2234 |
|
|
wtlen = GetWindowTextLength(hWnd); |
2235 |
|
|
wt = (LPTSTR) malloc((wtlen + 1) * sizeof(TCHAR)); |
2236 |
|
|
GetWindowText(hWnd, wt, wtlen + 1); |
2237 |
|
|
|
2238 |
|
|
SetTextColor(hdc, tip_text); |
2239 |
|
|
SetBkColor(hdc, tip_bg); |
2240 |
|
|
|
2241 |
|
|
TextOut(hdc, cr.left + 3, cr.top + 3, wt, wtlen); |
2242 |
|
|
|
2243 |
|
|
free(wt); |
2244 |
|
|
|
2245 |
|
|
SelectObject(hdc, holdbr); |
2246 |
|
|
DeleteObject(hbr); |
2247 |
|
|
|
2248 |
|
|
EndPaint(hWnd, &ps); |
2249 |
|
|
} |
2250 |
|
|
return 0; |
2251 |
|
|
|
2252 |
|
|
case WM_NCHITTEST: |
2253 |
|
|
return HTTRANSPARENT; |
2254 |
|
|
|
2255 |
|
|
case WM_DESTROY: |
2256 |
|
|
DeleteObject(tip_font); |
2257 |
|
|
tip_font = NULL; |
2258 |
|
|
break; |
2259 |
|
|
|
2260 |
|
|
case WM_SETTEXT: |
2261 |
|
|
{ |
2262 |
|
|
LPCTSTR str = (LPCTSTR) lParam; |
2263 |
|
|
SIZE sz; |
2264 |
|
|
HDC hdc = CreateCompatibleDC(NULL); |
2265 |
|
|
|
2266 |
|
|
SelectObject(hdc, tip_font); |
2267 |
|
|
GetTextExtentPoint32(hdc, str, _tcslen(str), &sz); |
2268 |
|
|
|
2269 |
|
|
SetWindowPos(hWnd, NULL, 0, 0, sz.cx + 6, sz.cy + 6, |
2270 |
|
|
SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); |
2271 |
|
|
InvalidateRect(hWnd, NULL, FALSE); |
2272 |
|
|
|
2273 |
|
|
DeleteDC(hdc); |
2274 |
|
|
} |
2275 |
|
|
break; |
2276 |
|
|
} |
2277 |
|
|
|
2278 |
|
|
return DefWindowProc(hWnd, nMsg, wParam, lParam); |
2279 |
|
|
} |
2280 |
|
|
|
2281 |
|
|
static void UpdateSizeTip(HWND src, int cx, int cy) |
2282 |
|
|
{ |
2283 |
|
|
TCHAR str[32]; |
2284 |
|
|
|
2285 |
|
|
if (!tip_enabled) |
2286 |
|
|
return; |
2287 |
|
|
|
2288 |
|
|
if (!tip_wnd) { |
2289 |
|
|
NONCLIENTMETRICS nci; |
2290 |
|
|
|
2291 |
|
|
/* First make sure the window class is registered */ |
2292 |
|
|
|
2293 |
|
|
if (!tip_class) { |
2294 |
|
|
WNDCLASS wc; |
2295 |
|
|
wc.style = CS_HREDRAW | CS_VREDRAW; |
2296 |
|
|
wc.lpfnWndProc = SizeTipWndProc; |
2297 |
|
|
wc.cbClsExtra = 0; |
2298 |
|
|
wc.cbWndExtra = 0; |
2299 |
|
|
wc.hInstance = hInst; |
2300 |
|
|
wc.hIcon = NULL; |
2301 |
|
|
wc.hCursor = NULL; |
2302 |
|
|
wc.hbrBackground = NULL; |
2303 |
|
|
wc.lpszMenuName = NULL; |
2304 |
|
|
wc.lpszClassName = "SizeTipClass"; |
2305 |
|
|
|
2306 |
|
|
tip_class = RegisterClass(&wc); |
2307 |
|
|
} |
2308 |
|
|
#if 0 |
2309 |
|
|
/* Default values based on Windows Standard color scheme */ |
2310 |
|
|
|
2311 |
|
|
tip_font = GetStockObject(SYSTEM_FONT); |
2312 |
|
|
tip_bg = RGB(255, 255, 225); |
2313 |
|
|
tip_text = RGB(0, 0, 0); |
2314 |
|
|
#endif |
2315 |
|
|
|
2316 |
|
|
/* Prepare other GDI objects and drawing info */ |
2317 |
|
|
|
2318 |
|
|
tip_bg = GetSysColor(COLOR_INFOBK); |
2319 |
|
|
tip_text = GetSysColor(COLOR_INFOTEXT); |
2320 |
|
|
|
2321 |
|
|
memset(&nci, 0, sizeof(NONCLIENTMETRICS)); |
2322 |
|
|
nci.cbSize = sizeof(NONCLIENTMETRICS); |
2323 |
|
|
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, |
2324 |
|
|
sizeof(NONCLIENTMETRICS), &nci, 0); |
2325 |
|
|
tip_font = CreateFontIndirect(&nci.lfStatusFont); |
2326 |
|
|
} |
2327 |
|
|
|
2328 |
|
|
/* Generate the tip text */ |
2329 |
|
|
|
2330 |
|
|
sprintf(str, "%dx%d", cx, cy); |
2331 |
|
|
|
2332 |
|
|
if (!tip_wnd) { |
2333 |
|
|
HDC hdc; |
2334 |
|
|
SIZE sz; |
2335 |
|
|
RECT wr; |
2336 |
|
|
int ix, iy; |
2337 |
|
|
|
2338 |
|
|
/* calculate the tip's size */ |
2339 |
|
|
|
2340 |
|
|
hdc = CreateCompatibleDC(NULL); |
2341 |
|
|
GetTextExtentPoint32(hdc, str, _tcslen(str), &sz); |
2342 |
|
|
DeleteDC(hdc); |
2343 |
|
|
|
2344 |
|
|
GetWindowRect(src, &wr); |
2345 |
|
|
|
2346 |
|
|
ix = wr.left; |
2347 |
|
|
if (ix < 16) |
2348 |
|
|
ix = 16; |
2349 |
|
|
|
2350 |
|
|
iy = wr.top - sz.cy; |
2351 |
|
|
if (iy < 16) |
2352 |
|
|
iy = 16; |
2353 |
|
|
|
2354 |
|
|
/* Create the tip window */ |
2355 |
|
|
|
2356 |
|
|
tip_wnd = |
2357 |
|
|
CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, |
2358 |
|
|
MAKEINTRESOURCE(tip_class |