Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/tekwin.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10617 - (hide annotations) (download) (as text)
Fri Mar 3 15:15:04 2023 UTC (13 months, 1 week 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 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 10617 wchar_t *uimsg;
193 maya 3392 WinMenu = CreatePopupMenu();
194 zmatsuo 10617 GetI18nStrWW("Tera Term", "TEKMENU_WINDOW", L"&Window", ts.UILanguageFileW, &uimsg);
195 zmatsuo 9292 ::InsertMenuW(*Menu,4,MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
196     (UINT_PTR)WinMenu, uimsg);
197 zmatsuo 10617 free(uimsg);
198 maya 3392 }
199 maya 3227 }
200    
201     void CTEKWindow::InitMenuPopup(HMENU SubMenu)
202     {
203 maya 3392 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 maya 3227
211 maya 3392 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 zmatsuo 10617 SetWinMenuW(WinMenu, ts.UILanguageFileW, 0);
224 maya 3392 }
225 maya 3227 }
226    
227     /////////////////////////////////////////////////////////////////////////////
228     // CTEKWindow message handler
229    
230     BOOL CTEKWindow::OnCommand(WPARAM wParam, LPARAM lParam)
231     {
232 maya 3392 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 zmatsuo 7784 return TTCFrameWnd::OnCommand(wParam, lParam);
238 maya 3392 }
239 maya 3227 }
240    
241 zmatsuo 7527 void CTEKWindow::OnActivate(UINT nState, HWND pWndOther, BOOL bMinimized)
242 maya 3227 {
243 maya 3392 if (nState!=WA_INACTIVE) {
244     tk.Active = TRUE;
245     ActiveWin = IdTEK;
246     }
247     else {
248     tk.Active = FALSE;
249     }
250 maya 3227 }
251    
252 zmatsuo 9150 /**
253     * �L�[�{�[�h����1��������
254     * @param nChar UTF-16 char(wchar_t) IsWindowUnicode() == TRUE ��
255     * ANSI char(char) IsWindowUnicode() == FALSE ��
256     */
257 zmatsuo 8337 void CTEKWindow::OnChar(WPARAM nChar, UINT nRepCnt, UINT nFlags)
258 maya 3227 {
259    
260 maya 3392 if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) {
261     return;
262     }
263 maya 3227
264 zmatsuo 9150 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 maya 3392 if (tk.GIN) {
281 zmatsuo 9150 char Code = (char)nChar;
282     TEKReportGIN(&tk, &ts, &cv, Code);
283 maya 3392 }
284     else {
285 zmatsuo 9150 for (unsigned int i = 1; i <= nRepCnt; i++) {
286     CommTextOutW(&cv, &u16, 1);
287     if (ts.LocalEcho > 0) {
288     CommTextEchoW(&cv, &u16, 1);
289 maya 3392 }
290     }
291     }
292 maya 3227 }
293    
294     void CTEKWindow::OnDestroy()
295     {
296 maya 3392 // remove this window from the window list
297     UnregWin(HTEKWin);
298 maya 3227
299 maya 3392 TEKEnd(&tk);
300     FreeTTTEK();
301     HTEKWin = NULL;
302     pTEKWin = NULL;
303     ActiveWin = IdVT;
304 nmaya 10009
305     TTSetIcon(m_hInst, m_hWnd, NULL, 0);
306 maya 3227 }
307    
308 doda 6801 void CTEKWindow::OnGetMinMaxInfo(MINMAXINFO *lpMMI)
309 maya 3227 {
310 maya 3392 lpMMI->ptMaxSize.x = 10000;
311     lpMMI->ptMaxSize.y = 10000;
312     lpMMI->ptMaxTrackSize.x = 10000;
313     lpMMI->ptMaxTrackSize.y = 10000;
314 maya 3227 }
315    
316 zmatsuo 7527 void CTEKWindow::OnInitMenuPopup(HMENU hPopupMenu, UINT nIndex, BOOL bSysMenu)
317 maya 3227 {
318 zmatsuo 7527 InitMenuPopup(hPopupMenu);
319 maya 3227 }
320    
321 zmatsuo 8337 void CTEKWindow::OnKeyDown(WPARAM nChar, UINT nRepCnt, UINT nFlags)
322 maya 3227 {
323 maya 3392 KeyDown(HTEKWin,nChar,nRepCnt,nFlags & 0x1ff);
324 maya 3227 }
325    
326 zmatsuo 8337 void CTEKWindow::OnKeyUp(WPARAM nChar, UINT nRepCnt, UINT nFlags)
327 maya 3227 {
328 maya 3392 KeyUp(nChar);
329 maya 3227 }
330    
331 zmatsuo 7527 void CTEKWindow::OnKillFocus(HWND hNewWnd)
332 maya 3227 {
333 maya 3392 TEKDestroyCaret(&tk,&ts);
334 zmatsuo 7784 TTCFrameWnd::OnKillFocus(hNewWnd);
335 maya 3227 }
336    
337 zmatsuo 8337 void CTEKWindow::OnLButtonDown(WPARAM nFlags, POINTS point)
338 maya 3227 {
339 maya 3392 POINT p;
340     HMENU PopupMenu, PopupBase;
341 maya 3227
342 maya 3392 p.x = point.x;
343     p.y = point.y;
344 maya 3227
345 maya 3392 // popup menu
346     if (ControlKey() && (MainMenu==NULL))
347     {
348 maya 7756 int i, numItems;
349     char itemText[256];
350    
351 maya 3392 InitMenu(&PopupMenu);
352 maya 7756
353 maya 3392 PopupBase = CreatePopupMenu();
354 maya 7756 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 zmatsuo 7896 submenu != NULL ? (UINT_PTR)submenu : GetMenuItemID(PopupMenu, i),
371 maya 7756 itemText);
372     }
373 maya 3392 }
374 maya 7756
375 maya 3392 ::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 maya 7756 PopupMenu = 0;
385 maya 3392 return;
386     }
387 maya 3227
388 maya 3392 TEKWMLButtonDown(&tk,&ts,&cv,p);
389 maya 3227 }
390    
391 zmatsuo 8337 void CTEKWindow::OnLButtonUp(WPARAM nFlags, POINTS point)
392 maya 3227 {
393 maya 3392 TEKWMLButtonUp(&tk,&ts);
394 maya 3227 }
395    
396 zmatsuo 8337 void CTEKWindow::OnMButtonUp(WPARAM nFlags, POINTS point)
397 maya 3227 {
398 maya 3392 //OnRButtonUp(nFlags,point);
399 maya 3227 }
400    
401 zmatsuo 7527 int CTEKWindow::OnMouseActivate(HWND pDesktopWnd, UINT nHitTest, UINT message)
402 maya 3227 {
403 maya 3392 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 maya 3227 }
411    
412 zmatsuo 8337 void CTEKWindow::OnMouseMove(WPARAM nFlags, POINTS point)
413 maya 3227 {
414 maya 3392 POINT p;
415 maya 3227
416 maya 3392 p.x = point.x;
417     p.y = point.y;
418     TEKWMMouseMove(&tk,&ts,p);
419 maya 3227 }
420    
421     void CTEKWindow::OnMove(int x, int y)
422     {
423 maya 3392 RECT R;
424 maya 3227
425 maya 3392 ::GetWindowRect(HTEKWin,&R);
426     ts.TEKPos.x = R.left;
427     ts.TEKPos.y = R.top;
428 maya 3227 }
429    
430     void CTEKWindow::OnPaint()
431     {
432 maya 3392 PAINTSTRUCT ps;
433     HDC PaintDC;
434 maya 3227
435 zmatsuo 7527 PaintDC = BeginPaint(&ps);
436 maya 3227
437 maya 3392 TEKPaint(&tk,&ts,PaintDC,&ps);
438 maya 3227
439 maya 3392 EndPaint(&ps);
440 maya 3227 }
441    
442 zmatsuo 7527 void CTEKWindow::OnRButtonUp(UINT nFlags, POINTS point)
443 maya 3227 {
444 doda 6440 CBStartPaste(tk.HWin, FALSE, FALSE);
445 maya 3227 }
446    
447 zmatsuo 7527 void CTEKWindow::OnSetFocus(HWND hOldWnd)
448 maya 3227 {
449 maya 3392 TEKChangeCaret(&tk,&ts);
450 zmatsuo 7784 TTCFrameWnd::OnSetFocus(hOldWnd);
451 maya 3227 }
452    
453 zmatsuo 8337 void CTEKWindow::OnSize(WPARAM nType, int cx, int cy)
454 maya 3227 {
455 maya 3392 int w, h;
456     RECT R;
457 maya 3227
458 maya 3392 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 maya 3227
467 maya 3392 ::GetWindowRect(tk.HWin,&R);
468     w = R.right - R.left;
469     h = R.bottom - R.top;
470 maya 3227
471 maya 3392 TEKWMSize(&tk,&ts,w,h,cx,cy);
472 maya 3227 }
473    
474 zmatsuo 8337 void CTEKWindow::OnSysCommand(WPARAM nID, LPARAM lParam)
475 maya 3227 {
476 maya 3392 if (nID==ID_SHOWMENUBAR) {
477     ts.PopupMenu = 0;
478     SwitchMenu();
479     }
480     else {
481 zmatsuo 7784 TTCFrameWnd::OnSysCommand(nID,lParam);
482 maya 3392 }
483 maya 3227 }
484    
485 zmatsuo 8337 void CTEKWindow::OnSysKeyDown(WPARAM nChar, UINT nRepCnt, UINT nFlags)
486 maya 3227 {
487 maya 3392 if (nChar==VK_F10) {
488     OnKeyDown(nChar,nRepCnt,nFlags);
489     }
490     else {
491 zmatsuo 7784 TTCFrameWnd::OnSysKeyDown(nChar,nRepCnt,nFlags);
492 maya 3392 }
493 maya 3227 }
494    
495 zmatsuo 8337 void CTEKWindow::OnSysKeyUp(WPARAM nChar, UINT nRepCnt, UINT nFlags)
496 maya 3227 {
497 maya 3392 if (nChar==VK_F10) {
498     OnKeyUp(nChar,nRepCnt,nFlags);
499     }
500     else {
501 zmatsuo 7784 TTCFrameWnd::OnSysKeyUp(nChar,nRepCnt,nFlags);
502 maya 3392 }
503 maya 3227 }
504    
505 zmatsuo 7527 void CTEKWindow::OnTimer(UINT_PTR nIDEvent)
506 maya 3227 {
507 maya 3392 UINT T;
508 maya 3227
509 maya 3392 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 maya 3227 }
523    
524 zmatsuo 7527 LRESULT CTEKWindow::OnAccelCommand(WPARAM wParam, LPARAM lParam)
525 maya 3227 {
526 maya 3392 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 doda 4030 SelectNextWin(HTEKWin,1,FALSE);
547 maya 3392 break;
548     case IdCmdPrevWin:
549 doda 4030 SelectNextWin(HTEKWin,-1,FALSE);
550 maya 3392 break;
551 doda 3954 case IdCmdNextSWin:
552 doda 4030 SelectNextWin(HTEKWin,1,TRUE);
553 doda 3954 break;
554     case IdCmdPrevSWin:
555 doda 4030 SelectNextWin(HTEKWin,-1,TRUE);
556 doda 3954 break;
557 maya 3392 case IdBreak:
558     case IdCmdRestoreSetup:
559     case IdCmdLoadKeyMap:
560     ::PostMessage(HVTWin,WM_USER_ACCELCOMMAND,wParam,0);
561     break;
562     }
563     return 0;
564 maya 3227 }
565    
566 zmatsuo 7527 LRESULT CTEKWindow::OnChangeMenu(WPARAM wParam, LPARAM lParam)
567 maya 3227 {
568 maya 3392 HMENU SysMenu;
569     BOOL Show, B1, B2;
570 maya 3227
571 maya 3392 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 maya 3227
585 maya 3392 tk.AdjustSize = TRUE;
586     ::SetMenu(tk.HWin, MainMenu);
587     ::DrawMenuBar(HTEKWin);
588     }
589 maya 3227
590 maya 3392 B1 = ((ts.MenuFlag & MF_SHOWWINMENU)!=0);
591     B2 = (WinMenu!=NULL);
592     if ((MainMenu!=NULL) &&
593     (B1 != B2)) {
594     if (WinMenu==NULL) {
595 zmatsuo 10617 wchar_t *uimsg;
596 maya 3392 WinMenu = CreatePopupMenu();
597 zmatsuo 10617 GetI18nStrWW("Tera Term", "TEKMENU_WINDOW", L"&Window", ts.UILanguageFileW, &uimsg);
598 zmatsuo 9292 ::InsertMenuW(MainMenu,4,
599     MF_STRING | MF_ENABLED | MF_POPUP | MF_BYPOSITION,
600     (UINT_PTR)WinMenu, uimsg);
601 zmatsuo 10617 free(uimsg);
602 maya 3392 }
603     else {
604     RemoveMenu(MainMenu,4,MF_BYPOSITION);
605     DestroyMenu(WinMenu);
606     WinMenu = NULL;
607     }
608     ::DrawMenuBar(HTEKWin);
609     }
610 maya 3227
611 maya 3392 ::GetSystemMenu(tk.HWin,TRUE);
612     if ((! Show) && ((ts.MenuFlag & MF_NOSHOWMENU)==0)) {
613 zmatsuo 10617 wchar_t *uimsg;
614 maya 3392 SysMenu = ::GetSystemMenu(tk.HWin,FALSE);
615 zmatsuo 9292 AppendMenuW(SysMenu, MF_SEPARATOR, 0, NULL);
616 zmatsuo 10617 GetI18nStrWW("Tera Term", "TEKMENU_SHOW_MENUBAR", L"Show menu &bar", ts.UILanguageFileW, &uimsg);
617 zmatsuo 9292 AppendMenuW(SysMenu, MF_STRING, ID_SHOWMENUBAR, uimsg);
618 zmatsuo 10617 free(uimsg);
619 maya 3392 }
620     return 0;
621 maya 3227 }
622    
623 zmatsuo 7527 LRESULT CTEKWindow::OnChangeTBar(WPARAM wParam, LPARAM lParam)
624 maya 3227 {
625 maya 3392 BOOL TBar;
626     DWORD Style;
627     HMENU SysMenu;
628 maya 3227
629 zmatsuo 7527 Style = GetWindowLongPtr (GWL_STYLE);
630 maya 3392 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 zmatsuo 7527 SetWindowLongPtr (GWL_STYLE, Style);
643 maya 3392 ::SetWindowPos (HTEKWin, NULL, 0, 0, 0, 0,
644     SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
645     ::ShowWindow (HTEKWin, SW_SHOW);
646 maya 3227
647 maya 3392 if ((ts.HideTitle==0) && (MainMenu==NULL) &&
648     ((ts.MenuFlag & MF_NOSHOWMENU) == 0)) {
649 zmatsuo 10617 wchar_t *uimsg;
650 maya 3392 SysMenu = ::GetSystemMenu(HTEKWin,FALSE);
651 zmatsuo 9292 AppendMenuW(SysMenu, MF_SEPARATOR, 0, NULL);
652 zmatsuo 10617 GetI18nStrWW("Tera Term", "TEKMENU_SHOW_MENUBAR", L"Show menu &bar", ts.UILanguageFileW, &uimsg);
653 zmatsuo 9292 AppendMenuW(SysMenu, MF_STRING, ID_SHOWMENUBAR, uimsg);
654 zmatsuo 10617 free(uimsg);
655 maya 3392 }
656     return 0;
657 maya 3227 }
658    
659 zmatsuo 7527 LRESULT CTEKWindow::OnDlgHelp(WPARAM wParam, LPARAM lParam)
660 maya 3227 {
661 zmatsuo 8273 DWORD help_id = (wParam == 0) ? HelpId : (DWORD)wParam;
662 nmaya 10009 OpenHelpCV(&cv, HH_HELP_CONTEXT, help_id);
663 maya 3392 return 0;
664 maya 3227 }
665    
666 zmatsuo 7527 LRESULT CTEKWindow::OnGetSerialNo(WPARAM wParam, LPARAM lParam)
667 maya 3227 {
668 maya 3392 return (LONG)SerialNo;
669 maya 3227 }
670    
671     void CTEKWindow::OnFilePrint()
672     {
673 maya 3392 BOOL Sel;
674     HDC PrintDC;
675 maya 3227
676 maya 3392 HelpId = HlpTEKFilePrint;
677 maya 3227
678 maya 3392 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 maya 3227
687 maya 3392 (*TEKPrint)(&tk,&ts,PrintDC,Sel);
688 maya 3227
689 maya 3392 PrnStop();
690 maya 3227 }
691    
692     void CTEKWindow::OnFileExit()
693     {
694 maya 3392 DestroyWindow();
695 maya 3227 }
696    
697     void CTEKWindow::OnEditCopy()
698     {
699 maya 3392 (*TEKCMCopy)(&tk,&ts);
700 maya 3227 }
701    
702     void CTEKWindow::OnEditCopyScreen()
703     {
704 maya 3392 (*TEKCMCopyScreen)(&tk,&ts);
705 maya 3227 }
706    
707     void CTEKWindow::OnEditPaste()
708     {
709 doda 6440 CBStartPaste(tk.HWin, FALSE, FALSE);
710 maya 3227 }
711    
712     void CTEKWindow::OnEditPasteCR()
713     {
714 doda 6440 CBStartPaste(tk.HWin, TRUE, FALSE);
715 maya 3227 }
716    
717     void CTEKWindow::OnEditClearScreen()
718     {
719 maya 3392 (*TEKClearScreen)(&tk,&ts);
720 maya 3227 }
721    
722     void CTEKWindow::OnSetupWindow()
723     {
724 maya 3392 BOOL Ok;
725     WORD OldEmu;
726 maya 3227
727 maya 3392 HelpId = HlpTEKSetupWindow;
728     ts.VTFlag = 0;
729     ts.SampleFont = tk.TEKFont[0];
730 maya 3227
731 maya 3392 if (! LoadTTDLG()) {
732     return;
733     }
734     OldEmu = ts.TEKColorEmu;
735 zmatsuo 10150 SetDialogFont(ts.DialogFontNameW, ts.DialogFontPoint, ts.DialogFontCharSet,
736     ts.UILanguageFileW, "Tera Term", "DLG_SYSTEM_FONT");
737 maya 3392 Ok = (*SetupWin)(HTEKWin, &ts);
738     if (Ok) {
739     (*TEKResetWin)(&tk,&ts,OldEmu);
740     ChangeTitle();
741     SwitchMenu();
742     SwitchTitleBar();
743     }
744 maya 3227 }
745    
746     void CTEKWindow::OnSetupFont()
747     {
748 maya 3392 BOOL Ok;
749 maya 3227
750 maya 3392 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 maya 3227
760 maya 3392 (*TEKSetupFont)(&tk,&ts);
761 maya 3227 }
762    
763     void CTEKWindow::OnVTWin()
764     {
765 maya 3392 VTActivate();
766 maya 3227 }
767    
768     void CTEKWindow::OnWindowWindow()
769     {
770 maya 3392 BOOL Close;
771 maya 3227
772 maya 3392 HelpId = HlpWindowWindow;
773     if (! LoadTTDLG()) {
774     return;
775     }
776 zmatsuo 10150 SetDialogFont(ts.DialogFontNameW, ts.DialogFontPoint, ts.DialogFontCharSet,
777     ts.UILanguageFileW, "Tera Term", "DLG_SYSTEM_FONT");
778 maya 3392 (*WindowWindow)(HTEKWin,&Close);
779     if (Close) {
780     OnClose();
781     }
782 maya 3227 }
783    
784     void CTEKWindow::OnHelpIndex()
785     {
786 nmaya 10009 OpenHelpCV(&cv, HH_DISPLAY_TOPIC, 0);
787 maya 3227 }
788    
789     void CTEKWindow::OnHelpAbout()
790     {
791 maya 3392 if (! LoadTTDLG()) {
792     return;
793     }
794     (*AboutDialog)(tk.HWin);
795 maya 3227 }
796 zmatsuo 7527
797     LRESULT CTEKWindow::Proc(UINT msg, WPARAM wp, LPARAM lp)
798     {
799     LRESULT retval = 0;
800 zmatsuo 7783 if (msg == MsgDlgHelp) {
801 zmatsuo 8225 // HELPMSGSTRING message ��
802     // wp = dialog handle
803     // lp = initialization structure
804 zmatsuo 8273 OnDlgHelp(HelpId, 0);
805 zmatsuo 7783 return 0;
806     }
807 zmatsuo 7527 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 zmatsuo 7782 retval = OnMouseActivate((HWND)wp, LOWORD(lp), HIWORD(lp));
844 zmatsuo 7527 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 zmatsuo 7783 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 nmaya 10009 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 zmatsuo 7527 default:
930     retval = DefWindowProc(msg, wp, lp);
931     break;
932     }
933 zmatsuo 9150
934 zmatsuo 7527 return retval;
935     }

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