Develop and Download Open Source Software

Browse Subversion Repository

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10521 - (hide annotations) (download) (as text)
Fri Jan 20 16:03:38 2023 UTC (14 months, 2 weeks ago) by zmatsuo
File MIME type: text/x-c++src
File size: 22339 byte(s)
add communication test tool
1 doda 6806 /*
2     * Copyright (C) 1994-1998 T. Teranishi
3 nmaya 9048 * (C) 2006- TeraTerm Project
4 doda 6806 * All rights reserved.
5     *
6 doda 6841 * Redistribution and use in source and binary forms, with or without
7     * modification, are permitted provided that the following conditions
8     * are met:
9 doda 6806 *
10 doda 6841 * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17 doda 6806 *
18 doda 6841 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
19     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 doda 6806 */
29 maya 3227
30     /* TERATERM.EXE, TEK window */
31 zmatsuo 7527 #include <windowsx.h>
32 maya 3227 #include "teraterm.h"
33     #include "tttypes.h"
34 zmatsuo 9244 #include "tttypes_key.h"
35 maya 3227 #include "tektypes.h"
36     #include "teklib.h"
37     #include "ttwinman.h"
38     #include "ttcommon.h"
39     #include "keyboard.h"
40     #include "clipboar.h"
41     #include "ttdialog.h"
42     #include "teraprn.h"
43     #include "helpid.h"
44     #include "tt_res.h"
45     #include "tekwin.h"
46     #include "ttlib.h"
47 zmatsuo 7527 #include <htmlhelp.h>
48     #include "dlglib.h"
49 zmatsuo 9150 #include "codeconv.h"
50 nmaya 10009 #include "compat_win.h"
51 maya 3227
52 zmatsuo 8519 #define TEKClassName L"TEKWin32"
53 zmatsuo 7527
54 maya 3227 /////////////////////////////////////////////////////////////////////////////
55     // CTEKWindow
56    
57 zmatsuo 7916 CTEKWindow::CTEKWindow(HINSTANCE hInstance)
58 maya 3227 {
59 zmatsuo 8519 WNDCLASSW wc;
60 maya 3392 RECT rect;
61     DWORD Style;
62 zmatsuo 7916 m_hInst = hInstance;
63 maya 3227
64 maya 3392 if (! LoadTTTEK()) {
65     return;
66     }
67     TEKInit(&tk, &ts);
68 maya 3227
69 maya 3392 if (ts.HideTitle>0) {
70     Style = WS_POPUP | WS_THICKFRAME | WS_BORDER;
71     }
72     else {
73     Style = WS_CAPTION | WS_SYSMENU |
74     WS_MINIMIZEBOX | WS_BORDER | WS_THICKFRAME;
75     }
76 maya 3227
77 maya 3392 wc.style = CS_HREDRAW | CS_VREDRAW;
78 zmatsuo 7527 wc.lpfnWndProc = (WNDPROC)ProcStub;
79 maya 3392 wc.cbClsExtra = 0;
80     wc.cbWndExtra = 0;
81 zmatsuo 7916 wc.hInstance = hInstance;
82 maya 3392 wc.hIcon = NULL;
83     wc.hCursor = LoadCursor(NULL,IDC_ARROW);
84     wc.hbrBackground = NULL;
85     wc.lpszMenuName = NULL;
86     wc.lpszClassName = TEKClassName;
87 maya 3227
88 zmatsuo 9324 RegisterClassW(&wc);
89 maya 3227
90 maya 3392 if (ts.TEKPos.x==CW_USEDEFAULT) {
91     rect = rectDefault;
92     }
93     else {
94     rect.left = ts.TEKPos.x;
95     rect.top = ts.TEKPos.y;
96     rect.right = rect.left + 640; //temporary width
97     rect.bottom = rect.top + 400; //temporary height
98     }
99 zmatsuo 8519 CreateW(hInstance, TEKClassName, L"Tera Term", Style, rect, ::GetDesktopWindow(), NULL);
100 nmaya 10019
101 maya 3227 //--------------------------------------------------------
102 maya 3392 HTEKWin = GetSafeHwnd();
103     if (HTEKWin == NULL) {
104     return;
105     }
106 nmaya 10019
107     // Windows 11 ���E�B���h�E���p������������������������
108 nmaya 10036 if (ts.WindowCornerDontround && pDwmSetWindowAttribute != NULL) {
109 nmaya 10019 DWM_WINDOW_CORNER_PREFERENCE preference = DWMWCP_DONOTROUND;
110     pDwmSetWindowAttribute(HTEKWin, DWMWA_WINDOW_CORNER_PREFERENCE, &preference, sizeof(preference));
111     }
112    
113 maya 3392 tk.HWin = HTEKWin;
114     // register this window to the window list
115     RegWin(HVTWin,HTEKWin);
116 maya 3227
117 nmaya 10009 TTSetIcon(m_hInst, m_hWnd, MAKEINTRESOURCEW((ts.TEKIcon!=IdIconDefault)?ts.TEKIcon:IDI_TEK), 0);
118 maya 3227
119 maya 3392 MainMenu = NULL;
120     WinMenu = NULL;
121     if ((ts.HideTitle==0) && (ts.PopupMenu==0)) {
122     InitMenu(&MainMenu);
123     ::SetMenu(HTEKWin,MainMenu);
124     }
125 maya 3227
126 maya 3392 ChangeTitle();
127 maya 3227
128 maya 3392 ::GetWindowRect(tk.HWin,&rect);
129     TEKResizeWindow(&tk,&ts, rect.right-rect.left, rect.bottom-rect.top);
130 maya 3227
131 maya 3392 if ((ts.PopupMenu>0) || (ts.HideTitle>0)) {
132     ::PostMessage(HTEKWin,WM_USER_CHANGEMENU,0,0);
133     }
134 maya 3227
135 maya 3392 ::ShowWindow(tk.HWin, SW_SHOWNORMAL);
136 maya 3227 }
137    
138     int CTEKWindow::Parse()
139     {
140 maya 3392 return (TEKParse(&tk,&ts,&cv));
141 maya 3227 }
142    
143     void CTEKWindow::RestoreSetup()
144     {
145 maya 3392 TEKRestoreSetup(&tk,&ts);
146     ChangeTitle();
147 maya 3227 }
148    
149     void CTEKWindow::InitMenu(HMENU *Menu)
150     {
151 zmatsuo 7527 static const DlgTextInfo MenuTextInfo[] = {
152     { 0, "TEKMENU_FILE" },
153     { 1, "TEKMENU_EDIT" },
154     { 2, "TEKMENU_SETUP" },
155     { ID_TEKVTWIN, "TEKMENU_VTWIN"},
156     { 4, "TEKMENU_HELP"},
157     };
158     static const DlgTextInfo FileMenuTextInfo[] = {
159     { ID_TEKFILE_PRINT, "TEKMENU_FILE_PRINT" },
160     { ID_TEKFILE_EXIT, "TEKMENU_FILE_EXIT" },
161     };
162     static const DlgTextInfo EditMenuTextInfo[] = {
163     { ID_TEKEDIT_COPY, "TEKMENU_EDIT_COPY" },
164     { ID_TEKEDIT_COPYSCREEN, "TEKMENU_EDIT_COPYSCREEN" },
165     { ID_TEKEDIT_PASTE, "TEKMENU_EDIT_PASTE" },
166     { ID_TEKEDIT_PASTECR, "TEKMENU_EDIT_PASTECR" },
167     { ID_TEKEDIT_CLEARSCREEN, "TEKMENU_EDIT_CLSCREEN" },
168     };
169     static const DlgTextInfo SetupMenuTextInfo[] = {
170     { ID_TEKSETUP_WINDOW, "TEKMENU_SETUP_WINDOW" },
171     { ID_TEKSETUP_FONT, "TEKMENU_SETUP_FONT" },
172     };
173     static const DlgTextInfo HelpMenuTextInfo[] = {
174     { ID_TEKHELP_INDEX, "TEKMENU_HELP_INDEX" },
175     { ID_TEKHELP_ABOUT, "TEKMENU_HELP_ABOUT" },
176     };
177    
178 zmatsuo 7916 *Menu = ::LoadMenu(m_hInst,
179 maya 3392 MAKEINTRESOURCE(IDR_TEKMENU));
180 maya 7756 FileMenu = GetSubMenu(*Menu,0);
181     EditMenu = GetSubMenu(*Menu,1);
182     SetupMenu = GetSubMenu(*Menu,2);
183     HelpMenu = GetSubMenu(*Menu,4);
184 maya 3227
185 zmatsuo 9350 SetDlgMenuTextsW(*Menu, MenuTextInfo, _countof(MenuTextInfo), ts.UILanguageFileW);
186     SetDlgMenuTextsW(FileMenu, FileMenuTextInfo, _countof(FileMenuTextInfo), ts.UILanguageFileW);
187     SetDlgMenuTextsW(EditMenu, EditMenuTextInfo, _countof(EditMenuTextInfo), ts.UILanguageFileW);
188     SetDlgMenuTextsW(SetupMenu, SetupMenuTextInfo, _countof(SetupMenuTextInfo), ts.UILanguageFileW);
189     SetDlgMenuTextsW(HelpMenu, HelpMenuTextInfo, _countof(HelpMenuTextInfo), ts.UILanguageFileW);
190 maya 3227
191 maya 3392 if ((ts.MenuFlag & MF_SHOWWINMENU) !=0) {
192 zmatsuo 9292 wchar_t uimsg[MAX_UIMSG];
193 maya 3392 WinMenu = CreatePopupMenu();
194 zmatsuo 9292 get_lang_msgW("TEKMENU_WINDOW", uimsg, _countof(uimsg), L"&Window", ts.UILanguageFile);
195     ::InsertMenuW(*Menu,4,MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
196     (UINT_PTR)WinMenu, uimsg);
197 maya 3392 }
198 maya 3227 }
199    
200     void CTEKWindow::InitMenuPopup(HMENU SubMenu)
201     {
202 maya 3392 if (SubMenu==EditMenu) {
203     if (tk.Select) {
204     EnableMenuItem(EditMenu,ID_TEKEDIT_COPY,MF_BYCOMMAND | MF_ENABLED);
205     }
206     else {
207     EnableMenuItem(EditMenu,ID_TEKEDIT_COPY,MF_BYCOMMAND | MF_GRAYED);
208     }
209 maya 3227
210 maya 3392 if (cv.Ready &&
211     (IsClipboardFormatAvailable(CF_TEXT) ||
212     IsClipboardFormatAvailable(CF_OEMTEXT))) {
213     EnableMenuItem(EditMenu,ID_TEKEDIT_PASTE,MF_BYCOMMAND | MF_ENABLED);
214     EnableMenuItem(EditMenu,ID_TEKEDIT_PASTECR,MF_BYCOMMAND | MF_ENABLED);
215     }
216     else {
217     EnableMenuItem(EditMenu,ID_TEKEDIT_PASTE,MF_BYCOMMAND | MF_GRAYED);
218     EnableMenuItem(EditMenu,ID_TEKEDIT_PASTECR,MF_BYCOMMAND | MF_GRAYED);
219     }
220     }
221     else if ( SubMenu == WinMenu ) {
222 yutakapon 5249 SetWinMenu(WinMenu, ts.UIMsg, sizeof(ts.UIMsg), ts.UILanguageFile, 0);
223 maya 3392 }
224 maya 3227 }
225    
226     /////////////////////////////////////////////////////////////////////////////
227     // CTEKWindow message handler
228    
229     BOOL CTEKWindow::OnCommand(WPARAM wParam, LPARAM lParam)
230     {
231 maya 3392 if ((LOWORD(wParam)>=ID_WINDOW_1) && (LOWORD(wParam)<ID_WINDOW_1+9)) {
232     SelectWin(LOWORD(wParam)-ID_WINDOW_1);
233     return TRUE;
234     }
235     else {
236 zmatsuo 7784 return TTCFrameWnd::OnCommand(wParam, lParam);
237 maya 3392 }
238 maya 3227 }
239    
240 zmatsuo 7527 void CTEKWindow::OnActivate(UINT nState, HWND pWndOther, BOOL bMinimized)
241 maya 3227 {
242 maya 3392 if (nState!=WA_INACTIVE) {
243     tk.Active = TRUE;
244     ActiveWin = IdTEK;
245     }
246     else {
247     tk.Active = FALSE;
248     }
249 maya 3227 }
250    
251 zmatsuo 9150 /**
252     * �L�[�{�[�h����1��������
253     * @param nChar UTF-16 char(wchar_t) IsWindowUnicode() == TRUE ��
254     * ANSI char(char) IsWindowUnicode() == FALSE ��
255     */
256 zmatsuo 8337 void CTEKWindow::OnChar(WPARAM nChar, UINT nRepCnt, UINT nFlags)
257 maya 3227 {
258    
259 maya 3392 if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) {
260     return;
261     }
262 maya 3227
263 zmatsuo 9150 wchar_t u16;
264     if (IsWindowUnicode(HTEKWin) == TRUE) {
265     // ������ UTF-16
266     u16 = (wchar_t)nChar;
267     } else {
268     // ������ ANSI
269     // ANSI(ACP) -> UTF-32 -> UTF-16
270     const char mb_str[2] = {(char)nChar, 0};
271     unsigned int u32;
272     size_t mb_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32);
273     if (mb_len == 0) {
274     return;
275     }
276     u16 = (wchar_t)u32;
277     }
278    
279 maya 3392 if (tk.GIN) {
280 zmatsuo 9150 char Code = (char)nChar;
281     TEKReportGIN(&tk, &ts, &cv, Code);
282 maya 3392 }
283     else {
284 zmatsuo 9150 for (unsigned int i = 1; i <= nRepCnt; i++) {
285     CommTextOutW(&cv, &u16, 1);
286     if (ts.LocalEcho > 0) {
287     CommTextEchoW(&cv, &u16, 1);
288 maya 3392 }
289     }
290     }
291 maya 3227 }
292    
293     void CTEKWindow::OnDestroy()
294     {
295 maya 3392 // remove this window from the window list
296     UnregWin(HTEKWin);
297 maya 3227
298 maya 3392 TEKEnd(&tk);
299     FreeTTTEK();
300     HTEKWin = NULL;
301     pTEKWin = NULL;
302     ActiveWin = IdVT;
303 nmaya 10009
304     TTSetIcon(m_hInst, m_hWnd, NULL, 0);
305 maya 3227 }
306    
307 doda 6801 void CTEKWindow::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
308 maya 3227 {
309 maya 3392 lpMMI->ptMaxSize.x = 10000;
310     lpMMI->ptMaxSize.y = 10000;
311     lpMMI->ptMaxTrackSize.x = 10000;
312     lpMMI->ptMaxTrackSize.y = 10000;
313 maya 3227 }
314    
315 zmatsuo 7527 void CTEKWindow::OnInitMenuPopup(HMENU hPopupMenu, UINT nIndex, BOOL bSysMenu)
316 maya 3227 {
317 zmatsuo 7527 InitMenuPopup(hPopupMenu);
318 maya 3227 }
319    
320 zmatsuo 8337 void CTEKWindow::OnKeyDown(WPARAM nChar, UINT nRepCnt, UINT nFlags)
321 maya 3227 {
322 maya 3392 KeyDown(HTEKWin,nChar,nRepCnt,nFlags & 0x1ff);
323 maya 3227 }
324    
325 zmatsuo 8337 void CTEKWindow::OnKeyUp(WPARAM nChar, UINT nRepCnt, UINT nFlags)
326 maya 3227 {
327 maya 3392 KeyUp(nChar);
328 maya 3227 }
329    
330 zmatsuo 7527 void CTEKWindow::OnKillFocus(HWND hNewWnd)
331 maya 3227 {
332 maya 3392 TEKDestroyCaret(&tk,&ts);
333 zmatsuo 7784 TTCFrameWnd::OnKillFocus(hNewWnd);
334 maya 3227 }
335    
336 zmatsuo 8337 void CTEKWindow::OnLButtonDown(WPARAM nFlags, POINTS point)
337 maya 3227 {
338 maya 3392 POINT p;
339     HMENU PopupMenu, PopupBase;
340 maya 3227
341 maya 3392 p.x = point.x;
342     p.y = point.y;
343 maya 3227
344 maya 3392 // popup menu
345     if (ControlKey() && (MainMenu==NULL))
346     {
347 maya 7756 int i, numItems;
348     char itemText[256];
349    
350 maya 3392 InitMenu(&PopupMenu);
351 maya 7756
352 maya 3392 PopupBase = CreatePopupMenu();
353 maya 7756 numItems = GetMenuItemCount(PopupMenu);
354    
355     for (i = 0; i < numItems; i++) {
356     HMENU submenu = GetSubMenu(PopupMenu, i);
357    
358     if (submenu != NULL) {
359     InitMenuPopup(submenu);
360     }
361    
362     if (GetMenuString(PopupMenu, i, itemText, sizeof(itemText), MF_BYPOSITION) != 0) {
363     int state = GetMenuState(PopupMenu, i, MF_BYPOSITION) &
364     (MF_CHECKED | MF_DISABLED | MF_GRAYED | MF_HILITE |
365     MF_MENUBARBREAK | MF_MENUBREAK | MF_SEPARATOR);
366    
367     AppendMenu(PopupBase,
368     submenu != NULL ? LOBYTE(state) | MF_POPUP : state,
369 zmatsuo 7896 submenu != NULL ? (UINT_PTR)submenu : GetMenuItemID(PopupMenu, i),
370 maya 7756 itemText);
371     }
372 maya 3392 }
373 maya 7756
374 maya 3392 ::ClientToScreen(tk.HWin, &p);
375     TrackPopupMenu(PopupBase,TPM_LEFTALIGN | TPM_LEFTBUTTON,
376     p.x,p.y,0,tk.HWin,NULL);
377     if (WinMenu!=NULL) {
378     DestroyMenu(WinMenu);
379     WinMenu = NULL;
380     }
381     DestroyMenu(PopupBase);
382     DestroyMenu(PopupMenu);
383 maya 7756 PopupMenu = 0;
384 maya 3392 return;
385     }
386 maya 3227
387 maya 3392 TEKWMLButtonDown(&tk,&ts,&cv,p);
388 maya 3227 }
389    
390 zmatsuo 8337 void CTEKWindow::OnLButtonUp(WPARAM nFlags, POINTS point)
391 maya 3227 {
392 maya 3392 TEKWMLButtonUp(&tk,&ts);
393 maya 3227 }
394    
395 zmatsuo 8337 void CTEKWindow::OnMButtonUp(WPARAM nFlags, POINTS point)
396 maya 3227 {
397 maya 3392 //OnRButtonUp(nFlags,point);
398 maya 3227 }
399    
400 zmatsuo 7527 int CTEKWindow::OnMouseActivate(HWND pDesktopWnd, UINT nHitTest, UINT message)
401 maya 3227 {
402 maya 3392 if ((ts.SelOnActive==0) &&
403     (nHitTest==HTCLIENT)) { //disable mouse event for text selection
404     return MA_ACTIVATEANDEAT; // when window is activated
405     }
406     else {
407     return MA_ACTIVATE;
408     }
409 maya 3227 }
410    
411 zmatsuo 8337 void CTEKWindow::OnMouseMove(WPARAM nFlags, POINTS point)
412 maya 3227 {
413 maya 3392 POINT p;
414 maya 3227
415 maya 3392 p.x = point.x;
416     p.y = point.y;
417     TEKWMMouseMove(&tk,&ts,p);
418 maya 3227 }
419    
420     void CTEKWindow::OnMove(int x, int y)
421     {
422 maya 3392 RECT R;
423 maya 3227
424 maya 3392 ::GetWindowRect(HTEKWin,&R);
425     ts.TEKPos.x = R.left;
426     ts.TEKPos.y = R.top;
427 maya 3227 }
428    
429     void CTEKWindow::OnPaint()
430     {
431 maya 3392 PAINTSTRUCT ps;
432     HDC PaintDC;
433 maya 3227
434 zmatsuo 7527 PaintDC = BeginPaint(&ps);
435 maya 3227
436 maya 3392 TEKPaint(&tk,&ts,PaintDC,&ps);
437 maya 3227
438 maya 3392 EndPaint(&ps);
439 maya 3227 }
440    
441 zmatsuo 7527 void CTEKWindow::OnRButtonUp(UINT nFlags, POINTS point)
442 maya 3227 {
443 doda 6440 CBStartPaste(tk.HWin, FALSE, FALSE);
444 maya 3227 }
445    
446 zmatsuo 7527 void CTEKWindow::OnSetFocus(HWND hOldWnd)
447 maya 3227 {
448 maya 3392 TEKChangeCaret(&tk,&ts);
449 zmatsuo 7784 TTCFrameWnd::OnSetFocus(hOldWnd);
450 maya 3227 }
451    
452 zmatsuo 8337 void CTEKWindow::OnSize(WPARAM nType, int cx, int cy)
453 maya 3227 {
454 maya 3392 int w, h;
455     RECT R;
456 maya 3227
457 maya 3392 if (tk.Minimized && (nType==SIZE_RESTORED)) {
458     tk.Minimized = FALSE;
459     return;
460     }
461     tk.Minimized = (nType==SIZE_MINIMIZED);
462     if (tk.Minimized) {
463     return;
464     }
465 maya 3227
466 maya 3392 ::GetWindowRect(tk.HWin,&R);
467     w = R.right - R.left;
468     h = R.bottom - R.top;
469 maya 3227
470 maya 3392 TEKWMSize(&tk,&ts,w,h,cx,cy);
471 maya 3227 }
472    
473 zmatsuo 8337 void CTEKWindow::OnSysCommand(WPARAM nID, LPARAM lParam)
474 maya 3227 {
475 maya 3392 if (nID==ID_SHOWMENUBAR) {
476     ts.PopupMenu = 0;
477     SwitchMenu();
478     }
479     else {
480 zmatsuo 7784 TTCFrameWnd::OnSysCommand(nID,lParam);
481 maya 3392 }
482 maya 3227 }
483    
484 zmatsuo 8337 void CTEKWindow::OnSysKeyDown(WPARAM nChar, UINT nRepCnt, UINT nFlags)
485 maya 3227 {
486 maya 3392 if (nChar==VK_F10) {
487     OnKeyDown(nChar,nRepCnt,nFlags);
488     }
489     else {
490 zmatsuo 7784 TTCFrameWnd::OnSysKeyDown(nChar,nRepCnt,nFlags);
491 maya 3392 }
492 maya 3227 }
493    
494 zmatsuo 8337 void CTEKWindow::OnSysKeyUp(WPARAM nChar, UINT nRepCnt, UINT nFlags)
495 maya 3227 {
496 maya 3392 if (nChar==VK_F10) {
497     OnKeyUp(nChar,nRepCnt,nFlags);
498     }
499     else {
500 zmatsuo 7784 TTCFrameWnd::OnSysKeyUp(nChar,nRepCnt,nFlags);
501 maya 3392 }
502 maya 3227 }
503    
504 zmatsuo 7527 void CTEKWindow::OnTimer(UINT_PTR nIDEvent)
505 maya 3227 {
506 maya 3392 UINT T;
507 maya 3227
508 maya 3392 if (nIDEvent==IdCaretTimer) {
509     if (ts.NonblinkingCursor!=0) {
510     T = GetCaretBlinkTime();
511     SetCaretBlinkTime(T);
512     }
513     else {
514     ::KillTimer(HTEKWin,IdCaretTimer);
515     }
516     return;
517     }
518     else {
519     ::KillTimer(HTEKWin,nIDEvent);
520     }
521 maya 3227 }
522    
523 zmatsuo 7527 LRESULT CTEKWindow::OnAccelCommand(WPARAM wParam, LPARAM lParam)
524 maya 3227 {
525 maya 3392 switch (wParam) {
526     case IdPrint:
527     OnFilePrint();
528     break;
529     case IdCmdEditCopy:
530     OnEditCopy();
531     break;
532     case IdCmdEditPaste:
533     OnEditPaste();
534     break;
535     case IdCmdEditPasteCR:
536     OnEditPasteCR();
537     break;
538     case IdCmdEditCLS:
539     OnEditClearScreen();
540     break;
541     case IdCmdCtrlCloseTEK:
542     OnFileExit();
543     break;
544     case IdCmdNextWin:
545 doda 4030 SelectNextWin(HTEKWin,1,FALSE);
546 maya 3392 break;
547     case IdCmdPrevWin:
548 doda 4030 SelectNextWin(HTEKWin,-1,FALSE);
549 maya 3392 break;
550 doda 3954 case IdCmdNextSWin:
551 doda 4030 SelectNextWin(HTEKWin,1,TRUE);
552 doda 3954 break;
553     case IdCmdPrevSWin:
554 doda 4030 SelectNextWin(HTEKWin,-1,TRUE);
555 doda 3954 break;
556 maya 3392 case IdBreak:
557     case IdCmdRestoreSetup:
558     case IdCmdLoadKeyMap:
559     ::PostMessage(HVTWin,WM_USER_ACCELCOMMAND,wParam,0);
560     break;
561     }
562     return 0;
563 maya 3227 }
564    
565 zmatsuo 7527 LRESULT CTEKWindow::OnChangeMenu(WPARAM wParam, LPARAM lParam)
566 maya 3227 {
567 maya 3392 HMENU SysMenu;
568     BOOL Show, B1, B2;
569 maya 3227
570 maya 3392 Show = (ts.PopupMenu==0) && (ts.HideTitle==0);
571     if (Show != (MainMenu!=NULL)) {
572     if (! Show) {
573     if (WinMenu!=NULL) {
574     DestroyMenu(WinMenu);
575     }
576     WinMenu = NULL;
577     DestroyMenu(MainMenu);
578     MainMenu = NULL;
579     }
580     else {
581     InitMenu(&MainMenu);
582     }
583 maya 3227
584 maya 3392 tk.AdjustSize = TRUE;
585     ::SetMenu(tk.HWin, MainMenu);
586     ::DrawMenuBar(HTEKWin);
587     }
588 maya 3227
589 maya 3392 B1 = ((ts.MenuFlag & MF_SHOWWINMENU)!=0);
590     B2 = (WinMenu!=NULL);
591     if ((MainMenu!=NULL) &&
592     (B1 != B2)) {
593     if (WinMenu==NULL) {
594 zmatsuo 9292 wchar_t uimsg[MAX_UIMSG];
595 maya 3392 WinMenu = CreatePopupMenu();
596 zmatsuo 9292 get_lang_msgW("TEKMENU_WINDOW", uimsg, _countof(uimsg), L"&Window", ts.UILanguageFile);
597     ::InsertMenuW(MainMenu,4,
598     MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
599     (UINT_PTR)WinMenu, uimsg);
600 maya 3392 }
601     else {
602     RemoveMenu(MainMenu,4,MF_BYPOSITION);
603     DestroyMenu(WinMenu);
604     WinMenu = NULL;
605     }
606     ::DrawMenuBar(HTEKWin);
607     }
608 maya 3227
609 maya 3392 ::GetSystemMenu(tk.HWin,TRUE);
610     if ((! Show) && ((ts.MenuFlag & MF_NOSHOWMENU)==0)) {
611 zmatsuo 9292 wchar_t uimsg[MAX_UIMSG];
612 maya 3392 SysMenu = ::GetSystemMenu(tk.HWin,FALSE);
613 zmatsuo 9292 AppendMenuW(SysMenu, MF_SEPARATOR, 0, NULL);
614     get_lang_msgW("TEKMENU_SHOW_MENUBAR", uimsg, _countof(uimsg), L"Show menu &bar", ts.UILanguageFile);
615     AppendMenuW(SysMenu, MF_STRING, ID_SHOWMENUBAR, uimsg);
616 maya 3392 }
617     return 0;
618 maya 3227 }
619    
620 zmatsuo 7527 LRESULT CTEKWindow::OnChangeTBar(WPARAM wParam, LPARAM lParam)
621 maya 3227 {
622 maya 3392 BOOL TBar;
623     DWORD Style;
624     HMENU SysMenu;
625 maya 3227
626 zmatsuo 7527 Style = GetWindowLongPtr (GWL_STYLE);
627 maya 3392 TBar = ((Style & WS_SYSMENU)!=0);
628     if (TBar == (ts.HideTitle==0)) {
629     return 0;
630     }
631     if (ts.HideTitle>0) {
632     Style = Style & ~(WS_SYSMENU | WS_CAPTION |
633     WS_MINIMIZEBOX) | WS_BORDER | WS_POPUP;
634     }
635     else {
636     Style = Style & ~WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX;
637     }
638     tk.AdjustSize = TRUE;
639 zmatsuo 7527 SetWindowLongPtr (GWL_STYLE, Style);
640 maya 3392 ::SetWindowPos (HTEKWin, NULL, 0, 0, 0, 0,
641     SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
642     ::ShowWindow (HTEKWin, SW_SHOW);
643 maya 3227
644 maya 3392 if ((ts.HideTitle==0) && (MainMenu==NULL) &&
645     ((ts.MenuFlag & MF_NOSHOWMENU) == 0)) {
646 zmatsuo 9292 wchar_t uimsg[MAX_UIMSG];
647 maya 3392 SysMenu = ::GetSystemMenu(HTEKWin,FALSE);
648 zmatsuo 9292 AppendMenuW(SysMenu, MF_SEPARATOR, 0, NULL);
649     get_lang_msgW("TEKMENU_SHOW_MENUBAR", uimsg, _countof(uimsg), L"Show menu &bar", ts.UILanguageFile);
650     AppendMenuW(SysMenu, MF_STRING, ID_SHOWMENUBAR, uimsg);
651 maya 3392 }
652     return 0;
653 maya 3227 }
654    
655 zmatsuo 7527 LRESULT CTEKWindow::OnDlgHelp(WPARAM wParam, LPARAM lParam)
656 maya 3227 {
657 zmatsuo 8273 DWORD help_id = (wParam == 0) ? HelpId : (DWORD)wParam;
658 nmaya 10009 OpenHelpCV(&cv, HH_HELP_CONTEXT, help_id);
659 maya 3392 return 0;
660 maya 3227 }
661    
662 zmatsuo 7527 LRESULT CTEKWindow::OnGetSerialNo(WPARAM wParam, LPARAM lParam)
663 maya 3227 {
664 maya 3392 return (LONG)SerialNo;
665 maya 3227 }
666    
667     void CTEKWindow::OnFilePrint()
668     {
669 maya 3392 BOOL Sel;
670     HDC PrintDC;
671 maya 3227
672 maya 3392 HelpId = HlpTEKFilePrint;
673 maya 3227
674 maya 3392 Sel = tk.Select;
675     PrintDC = PrnBox(tk.HWin,&Sel);
676     if (PrintDC==NULL) {
677     return;
678     }
679     if (! PrnStart(ts.Title)) {
680     return;
681     }
682 maya 3227
683 maya 3392 (*TEKPrint)(&tk,&ts,PrintDC,Sel);
684 maya 3227
685 maya 3392 PrnStop();
686 maya 3227 }
687    
688     void CTEKWindow::OnFileExit()
689     {
690 maya 3392 DestroyWindow();
691 maya 3227 }
692    
693     void CTEKWindow::OnEditCopy()
694     {
695 maya 3392 (*TEKCMCopy)(&tk,&ts);
696 maya 3227 }
697    
698     void CTEKWindow::OnEditCopyScreen()
699     {
700 maya 3392 (*TEKCMCopyScreen)(&tk,&ts);
701 maya 3227 }
702    
703     void CTEKWindow::OnEditPaste()
704     {
705 doda 6440 CBStartPaste(tk.HWin, FALSE, FALSE);
706 maya 3227 }
707    
708     void CTEKWindow::OnEditPasteCR()
709     {
710 doda 6440 CBStartPaste(tk.HWin, TRUE, FALSE);
711 maya 3227 }
712    
713     void CTEKWindow::OnEditClearScreen()
714     {
715 maya 3392 (*TEKClearScreen)(&tk,&ts);
716 maya 3227 }
717    
718     void CTEKWindow::OnSetupWindow()
719     {
720 maya 3392 BOOL Ok;
721     WORD OldEmu;
722 maya 3227
723 maya 3392 HelpId = HlpTEKSetupWindow;
724     ts.VTFlag = 0;
725     ts.SampleFont = tk.TEKFont[0];
726 maya 3227
727 maya 3392 if (! LoadTTDLG()) {
728     return;
729     }
730     OldEmu = ts.TEKColorEmu;
731 zmatsuo 10150 SetDialogFont(ts.DialogFontNameW, ts.DialogFontPoint, ts.DialogFontCharSet,
732     ts.UILanguageFileW, "Tera Term", "DLG_SYSTEM_FONT");
733 maya 3392 Ok = (*SetupWin)(HTEKWin, &ts);
734     if (Ok) {
735     (*TEKResetWin)(&tk,&ts,OldEmu);
736     ChangeTitle();
737     SwitchMenu();
738     SwitchTitleBar();
739     }
740 maya 3227 }
741    
742     void CTEKWindow::OnSetupFont()
743     {
744 maya 3392 BOOL Ok;
745 maya 3227
746 maya 3392 HelpId = HlpTEKSetupFont;
747     ts.VTFlag = 0;
748     if (! LoadTTDLG()) {
749     return;
750     }
751     Ok = (*ChooseFontDlg)(HTEKWin,&tk.TEKlf,&ts);
752     if (! Ok) {
753     return;
754     }
755 maya 3227
756 maya 3392 (*TEKSetupFont)(&tk,&ts);
757 maya 3227 }
758    
759     void CTEKWindow::OnVTWin()
760     {
761 maya 3392 VTActivate();
762 maya 3227 }
763    
764     void CTEKWindow::OnWindowWindow()
765     {
766 maya 3392 BOOL Close;
767 maya 3227
768 maya 3392 HelpId = HlpWindowWindow;
769     if (! LoadTTDLG()) {
770     return;
771     }
772 zmatsuo 10150 SetDialogFont(ts.DialogFontNameW, ts.DialogFontPoint, ts.DialogFontCharSet,
773     ts.UILanguageFileW, "Tera Term", "DLG_SYSTEM_FONT");
774 maya 3392 (*WindowWindow)(HTEKWin,&Close);
775     if (Close) {
776     OnClose();
777     }
778 maya 3227 }
779    
780     void CTEKWindow::OnHelpIndex()
781     {
782 nmaya 10009 OpenHelpCV(&cv, HH_DISPLAY_TOPIC, 0);
783 maya 3227 }
784    
785     void CTEKWindow::OnHelpAbout()
786     {
787 maya 3392 if (! LoadTTDLG()) {
788     return;
789     }
790     (*AboutDialog)(tk.HWin);
791 maya 3227 }
792 zmatsuo 7527
793     LRESULT CTEKWindow::Proc(UINT msg, WPARAM wp, LPARAM lp)
794     {
795     LRESULT retval = 0;
796 zmatsuo 7783 if (msg == MsgDlgHelp) {
797 zmatsuo 8225 // HELPMSGSTRING message ��
798     // wp = dialog handle
799     // lp = initialization structure
800 zmatsuo 8273 OnDlgHelp(HelpId, 0);
801 zmatsuo 7783 return 0;
802     }
803 zmatsuo 7527 switch(msg)
804     {
805     case WM_ACTIVATE:
806     OnActivate(wp & 0xFFFF, (HWND)wp, (wp >> 16) & 0xFFFF);
807     break;
808     case WM_CHAR:
809     OnChar(wp, LOWORD(lp), HIWORD(lp));
810     break;
811     case WM_DESTROY:
812     OnDestroy();
813     break;
814     case WM_GETMINMAXINFO:
815     OnGetMinMaxInfo((MINMAXINFO *)lp);
816     break;
817     case WM_INITMENUPOPUP:
818     OnInitMenuPopup((HMENU)wp, LOWORD(lp), HIWORD(lp));
819     break;
820     case WM_KEYDOWN:
821     OnKeyDown(wp, LOWORD(lp), HIWORD(lp));
822     break;
823     case WM_KEYUP:
824     OnKeyUp(wp, LOWORD(lp), HIWORD(lp));
825     break;
826     case WM_KILLFOCUS:
827     OnKillFocus((HWND)wp);
828     break;
829     case WM_LBUTTONDOWN:
830     OnLButtonDown(wp, MAKEPOINTS(lp));
831     break;
832     case WM_LBUTTONUP:
833     OnLButtonUp(wp, MAKEPOINTS(lp));
834     break;
835     case WM_MBUTTONUP:
836     OnMButtonUp(wp, MAKEPOINTS(lp));
837     break;
838     case WM_MOUSEACTIVATE:
839 zmatsuo 7782 retval = OnMouseActivate((HWND)wp, LOWORD(lp), HIWORD(lp));
840 zmatsuo 7527 break;
841     case WM_MOUSEMOVE:
842     OnMouseMove(wp, MAKEPOINTS(lp));
843     break;
844     case WM_MOVE:
845     OnMove(LOWORD(lp), HIWORD(lp));
846     break;
847     case WM_PAINT:
848     OnPaint();
849     break;
850     case WM_RBUTTONUP:
851     OnRButtonUp((UINT)wp, MAKEPOINTS(lp));
852     break;
853     case WM_SETFOCUS:
854     OnSetFocus((HWND)wp);
855     DefWindowProc(msg, wp, lp);
856     break;
857     case WM_SIZE:
858     OnSize(wp, LOWORD(lp), HIWORD(lp));
859     break;
860     case WM_SYSCOMMAND:
861     OnSysCommand(wp, lp);
862     DefWindowProc(msg, wp, lp);
863     break;
864     case WM_SYSKEYDOWN:
865     OnSysKeyDown(wp, LOWORD(lp), HIWORD(lp));
866     break;
867     case WM_SYSKEYUP:
868     OnSysKeyUp(wp, LOWORD(lp), HIWORD(lp));
869     break;
870     case WM_TIMER:
871     OnTimer(wp);
872     break;
873     case WM_USER_ACCELCOMMAND:
874     OnAccelCommand(wp, lp);
875     break;
876     case WM_USER_CHANGEMENU:
877     OnChangeMenu(wp, lp);
878     break;
879     case WM_USER_CHANGETBAR:
880     OnChangeTBar(wp, lp);
881     break;
882     case WM_USER_DLGHELP2:
883     OnDlgHelp(wp, lp);
884     break;
885     case WM_USER_GETSERIALNO:
886     OnGetSerialNo(wp, lp);
887     break;
888     case WM_COMMAND:
889     {
890     const WORD wID = GET_WM_COMMAND_ID(wp, lp);
891     switch (wID) {
892     case ID_TEKFILE_PRINT: OnFilePrint(); break;
893     case ID_TEKFILE_EXIT: OnFileExit(); break;
894     case ID_TEKEDIT_COPY: OnEditCopy(); break;
895     case ID_TEKEDIT_COPYSCREEN: OnEditCopyScreen(); break;
896     case ID_TEKEDIT_PASTE: OnEditPaste(); break;
897     case ID_TEKEDIT_PASTECR: OnEditPasteCR(); break;
898     case ID_TEKEDIT_CLEARSCREEN: OnEditClearScreen(); break;
899     case ID_TEKSETUP_WINDOW: OnSetupWindow(); break;
900     case ID_TEKSETUP_FONT: OnSetupFont(); break;
901     case ID_TEKVTWIN: OnVTWin(); break;
902     case ID_TEKWINDOW_WINDOW: OnWindowWindow(); break;
903     case ID_TEKHELP_INDEX: OnHelpIndex(); break;
904     case ID_TEKHELP_ABOUT: OnHelpAbout(); break;
905     default:
906     OnCommand(wp, lp);
907     break;
908     }
909     break;
910     }
911 zmatsuo 7783 case WM_NCHITTEST: {
912     retval = TTCFrameWnd::DefWindowProc(msg, wp, lp);
913     if (ts.HideTitle>0) {
914     if ((retval ==HTCLIENT) && AltKey()) {
915     retval = HTCAPTION;
916     }
917     }
918     break;
919     }
920 nmaya 10009 case WM_DPICHANGED: {
921     const UINT NewDPI = LOWORD(wp);
922     TTSetIcon(m_hInst, m_hWnd, MAKEINTRESOURCEW((ts.TEKIcon!=IdIconDefault)?ts.TEKIcon:IDI_TEK), NewDPI);
923     break;
924     }
925 zmatsuo 7527 default:
926     retval = DefWindowProc(msg, wp, lp);
927     break;
928     }
929 zmatsuo 9150
930 zmatsuo 7527 return retval;
931     }

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