Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/teraterm/teraterm/tekwin.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10617 - (show annotations) (download) (as text)
Fri Mar 3 15:15:04 2023 UTC (14 months, 3 weeks ago) by zmatsuo
File MIME type: text/x-c++src
File size: 22326 byte(s)
lngファイル名変数を ANSI版から Unicode 版へ切り替え

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

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