Example #1
0
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);
}
Example #2
0
/**
 * 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;
}
Example #3
0
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;
}