Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2504 - (hide annotations) (download) (as text)
Sun May 11 15:37:00 2008 UTC (15 years, 11 months ago) by maya
Original Path: teraterm/trunk/teraterm/vtwin.cpp
File MIME type: text/x-c++src
File size: 119416 byte(s)
Additional settings を、タブコントロールから CPropertySheet に変更した。
vtwin.cpp から addsetting.cpp に処理を移動した。

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