static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { RECT rc; HMENU hmenu; switch (msg) { case WM_CREATE: hmenu = GetSystemMenu(hWnd, FALSE); InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING, IDM_TRACE1, trace1); InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING, IDM_TRACE2, trace2); InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); InsertMenu(hmenu, 3, MF_BYPOSITION | MF_STRING, IDM_TRACEEN, traceen); InsertMenu(hmenu, 4, MF_BYPOSITION | MF_STRING, IDM_TRACEFH, tracefh); InsertMenu(hmenu, 5, MF_BYPOSITION | MF_STRING, IDM_TRACECL, tracecl); InsertMenu(hmenu, 6, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); CheckMenuItem(hmenu, IDM_TRACE1, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); CheckMenuItem(hmenu, IDM_TRACE2, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); CheckMenuItem(hmenu, IDM_TRACEEN, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); GetClientRect(hWnd, &rc); hView = CreateWindowEx(WS_EX_CLIENTEDGE, ClassEdit, NULL, WS_CHILD | WS_VISIBLE | ES_READONLY | ES_LEFT | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 0, 0, rc.right, rc.bottom, hWnd, (HMENU)IDC_VIEW, g_hInstance, NULL); if (!hView) { break; } SendMessage(hView, EM_SETLIMITTEXT, (WPARAM)VIEW_BUFFERSIZE, 0); hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH, viewfont); if (!hfView) { break; } SendMessage(hView, WM_SETFONT, (WPARAM)hfView, MAKELPARAM(TRUE, 0)); hBrush = CreateSolidBrush(VIEW_BGCOLOR); SetFocus(hView); return(TRUE); case WM_SYSCOMMAND: switch(wp) { case IDM_TRACE1: tracewin.en ^= 1; hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACE1, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACE2: tracewin.en ^= 2; hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACE2, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACEEN: tracewin.en ^= 4; hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACEEN, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACEFH: if (tracewin.tf != NULL) { textfile_close(tracewin.tf); tracewin.tf = NULL; } else { tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), 0x800); } hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACEFH, (tracewin.tf)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACECL: View_ClrString(); break; default: return(DefWindowProc(hWnd, msg, wp, lp)); } break; case WM_MOVE: if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { GetWindowRect(hWnd, &rc); tracecfg.posx = rc.left; tracecfg.posy = rc.top; } break; case WM_SIZE: // window resize if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { GetWindowRect(hWnd, &rc); tracecfg.width = rc.right - rc.left; tracecfg.height = rc.bottom - rc.top; } MoveWindow(hView, 0, 0, LOWORD(lp), HIWORD(lp), TRUE); View_ScrollToBottom(hView); break; case WM_SETFOCUS: SetFocus(hView); return(0L); case WM_CTLCOLORSTATIC: case WM_CTLCOLOREDIT: SetTextColor((HDC)wp, VIEW_FGCOLOR); SetBkColor((HDC)wp, VIEW_BGCOLOR); return((LRESULT)hBrush); case WM_CLOSE: break; case WM_DESTROY: if (hBrush) { DeleteObject(hBrush); } if (hfView) { DeleteObject(hfView); } break; #if 0 case WM_ENTERSIZEMOVE: winloc_movingstart(); break; case WM_MOVING: winloc_movingproc((RECT *)lp); break; case WM_ERASEBKGND: return(FALSE); #endif default: return(DefWindowProc(hWnd, msg, wp, lp)); } return(0L); }
/** * Windows プロシージャ (WindowProc) を提供します * @param[in] message 処理される Windows メッセージを指定します * @param[in] wParam メッセージの処理に使用する追加情報を提供します * @param[in] lParam メッセージの処理に使用する追加情報を提供します * @return 戻り値は、メッセージによって異なります */ LRESULT CTraceWnd::WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam) { switch (nMsg) { case WM_CREATE: return OnCreate(reinterpret_cast<LPCREATESTRUCT>(lParam)); case WM_SYSCOMMAND: OnSysCommand(wParam, lParam); return DefWindowProc(nMsg, wParam, lParam); case WM_ENTERMENULOOP: OnEnterMenuLoop(wParam); break; case WM_MOVE: if (!(GetStyle() & (WS_MAXIMIZE | WS_MINIMIZE))) { RECT rc; GetWindowRect(&rc); tracecfg.posx = rc.left; tracecfg.posy = rc.top; } break; case WM_SIZE: // window resize if (!(GetStyle() & (WS_MAXIMIZE | WS_MINIMIZE))) { RECT rc; GetWindowRect(&rc); tracecfg.width = rc.right - rc.left; tracecfg.height = rc.bottom - rc.top; } m_wndView.MoveWindow(0, 0, LOWORD(lParam), HIWORD(lParam)); break; case WM_SETFOCUS: m_wndView.SetFocus(); break; case WM_CTLCOLORSTATIC: case WM_CTLCOLOREDIT: SetTextColor((HDC)wParam, VIEW_FGCOLOR); SetBkColor((HDC)wParam, VIEW_BGCOLOR); return reinterpret_cast<LRESULT>(m_hBrush); case WM_CLOSE: break; case WM_DESTROY: if (m_hBrush) { ::DeleteObject(m_hBrush); m_hBrush = NULL; } if (m_hFont) { ::DeleteObject(m_hFont); m_hFont = NULL; } break; #if 0 case WM_ENTERSIZEMOVE: winloc_movingstart(); break; case WM_MOVING: winloc_movingproc((RECT *)lParam); break; case WM_ERASEBKGND: break; #endif default: return DefWindowProc(nMsg, wParam, lParam); } return FALSE; }
static LRESULT CALLBACK traceproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { RECT rc; switch(uMsg) { case WM_CREATE: return onCreate(hWnd); case WM_SYSCOMMAND: return onSysCommand(hWnd, wParam, lParam); case WM_MOVE: if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { GetWindowRect(hWnd, &rc); tracecfg.posx = rc.left; tracecfg.posy = rc.top; } break; case WM_SIZE: // window resize if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { GetWindowRect(hWnd, &rc); tracecfg.width = rc.right - rc.left; tracecfg.height = rc.bottom - rc.top; } MoveWindow(s_hView, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE); View_ScrollToBottom(s_hView); break; case WM_SETFOCUS: SetFocus(s_hView); return(0L); case WM_CTLCOLORSTATIC: case WM_CTLCOLOREDIT: SetTextColor((HDC)wParam, VIEW_FGCOLOR); SetBkColor((HDC)wParam, VIEW_BGCOLOR); return((LRESULT)s_hBrush); case WM_CLOSE: break; case WM_DESTROY: if (s_hBrush) { DeleteObject(s_hBrush); } if (s_hfView) { DeleteObject(s_hfView); } break; #if 0 case WM_ENTERSIZEMOVE: winloc_movingstart(); break; case WM_MOVING: winloc_movingproc((RECT *)lParam); break; case WM_ERASEBKGND: return FALSE; #endif default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return FALSE; }