Beispiel #1
0
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static int nWidth, nHeight;

    switch (iMsg)
    {
        case WM_CREATE:
        {
            SpiderWnd.Create(hwnd, 0, WS_CHILD | WS_VISIBLE, 0, 0, 100, 100);
            dwDifficulty = IDC_DIF_ONECOLOR;
            CreateSpider();

            SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER);

            dwAppStartTime = GetTickCount();

            return 0;
        }

        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;

        case WM_SIZE:
            nWidth  = LOWORD(lParam);
            nHeight = HIWORD(lParam);

            MoveWindow(SpiderWnd, 0, 0, nWidth, nHeight, TRUE);
            return 0;

        case WM_GETMINMAXINFO:
        {
            MINMAXINFO *mmi;

            mmi = (MINMAXINFO *)lParam;
            mmi->ptMinTrackSize.x = NUM_STACKS * __cardwidth + (NUM_STACKS + 3) * X_BORDER + 12; // Border left and right of 6px
            mmi->ptMinTrackSize.y = GetSystemMetrics(SM_CYCAPTION) +
                                    GetSystemMetrics(SM_CYMENU) +
                                    2 * Y_BORDER +
                                    3 * __cardheight +
                                    6 * yRowStackCardOffset;
            return 0;
        }

        case WM_COMMAND:
            switch (LOWORD(wParam))
            {
                case IDM_GAME_NEW:
                    NewGame();
                    return 0;

                case IDM_GAME_DECK:
                    ShowDeckOptionsDlg(hwnd);
                    return 0;

                case IDM_HELP_CONTENTS:
                    WinHelp(hwnd, szHelpPath, HELP_CONTENTS, 0);//HELP_KEY, (DWORD)"How to play");
                    return 0;

                case IDM_HELP_ABOUT:
                    MessageBox(hwnd, MsgAbout, szAppName, MB_OK|MB_ICONINFORMATION);
                    return 0;

                case IDM_GAME_EXIT:
                    PostMessage(hwnd, WM_CLOSE, 0, 0);
                    return 0;
            }

            return 0;

        case WM_CLOSE:
            if (fGameStarted == false)
            {
                DestroyWindow(hwnd);
                return 0;
            }
            else
            {
                int ret;

                ret = MessageBox(hwnd, MsgQuit, szAppName, MB_YESNO|MB_ICONQUESTION);
                if (ret == IDYES)
                {
                    WinHelp(hwnd, szHelpPath, HELP_QUIT, 0);
                    DestroyWindow(hwnd);
                }
            }
            return 0;
    }
    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}
Beispiel #2
0
//-----------------------------------------------------------------------------
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static int nWidth, nHeight, nStatusHeight;

    switch(iMsg)
    {
    case WM_CREATE:
    {
        int parts[] = { 100, -1 };
        RECT rcStatus;

        hwndStatus = CreateStatusWindow(WS_CHILD | WS_VISIBLE | CCS_BOTTOM | SBARS_SIZEGRIP, _T("Ready"), hwnd, 0);

        //SendMessage(hwndStatus, SB_SIMPLE, (WPARAM)TRUE, 0);

        SendMessage(hwndStatus, SB_SETPARTS, 2, (LPARAM)parts);
        SendMessage(hwndStatus, SB_SETTEXT, 0 | SBT_NOBORDERS, (LPARAM)"");

        SolWnd.Create(hwnd, WS_EX_CLIENTEDGE, WS_CHILD|WS_VISIBLE, 0, 0, 0, 0);

        CreateSol();

        // The status bar height is fixed and needed later in WM_SIZE and WM_GETMINMAXINFO
        // Force the window to process WM_GETMINMAXINFO again
        GetWindowRect(hwndStatus, &rcStatus);
        nStatusHeight = rcStatus.bottom - rcStatus.top;

        // Hide status bar if options say so
        if (!(dwOptions & OPTION_SHOW_STATUS))
        {
            ShowWindow(hwndStatus, SW_HIDE);
        }

        SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER);

        NewGame();

        dwAppStartTime = GetTickCount();

        return 0;
    }

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_SIZE:
        nWidth  = LOWORD(lParam);
        nHeight = HIWORD(lParam);

        if (dwOptions & OPTION_SHOW_STATUS)
        {
            MoveWindow(SolWnd, 0, 0, nWidth, nHeight - nStatusHeight, TRUE);
            MoveWindow(hwndStatus, 0, nHeight - nStatusHeight, nWidth, nStatusHeight, TRUE);
        }
        else
        {
            MoveWindow(SolWnd, 0, 0, nWidth, nHeight, TRUE);
        }
        //parts[0] = nWidth - 256;
        //SendMessage(hwndStatus, SB_SETPARTS, 2, (LPARAM)parts);
        return 0;

    case WM_GETMINMAXINFO:
    {
        MINMAXINFO *mmi;

        mmi = (MINMAXINFO *)lParam;
        mmi->ptMinTrackSize.x = X_BORDER + NUM_ROW_STACKS * (__cardwidth + X_ROWSTACK_BORDER) + X_BORDER;
        mmi->ptMinTrackSize.y = GetSystemMetrics(SM_CYCAPTION) +
                                GetSystemMetrics(SM_CYMENU) +
                                Y_BORDER +
                                __cardheight +
                                Y_ROWSTACK_BORDER +
                                6 * yRowStackCardOffset +
                                __cardheight +
                                Y_BORDER +
                                (dwOptions & OPTION_SHOW_STATUS ? nStatusHeight : 0);
        return 0;
    }

    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDM_GAME_NEW:
            //simulate a button click on the new button..
            NewGame();
            return 0;

        case IDM_GAME_DECK:
            ShowDeckOptionsDlg(hwnd);
            return 0;

        case IDM_GAME_OPTIONS:
            ShowGameOptionsDlg(hwnd);
            return 0;

        case IDM_HELP_CONTENTS:
            WinHelp(hwnd, szHelpPath, HELP_CONTENTS, 0);//HELP_KEY, (DWORD)"How to play");
            return 0;

        case IDM_HELP_ABOUT:
            MessageBox(hwnd, MsgAbout, szAppName, MB_OK|MB_ICONINFORMATION);
            return 0;

        case IDM_GAME_EXIT:
            PostMessage(hwnd, WM_CLOSE, 0, 0);
            return 0;
        }

        return 0;

    case WM_CLOSE:
        if (fGameStarted == false)
        {
            DestroyWindow(hwnd);
            return 0;
        }
        else
        {
            int ret;

            ret = MessageBox(hwnd, MsgQuit, szAppName, MB_YESNO|MB_ICONQUESTION);
            if (ret == IDYES)
            {
                WinHelp(hwnd, szHelpPath, HELP_QUIT, 0);
                DestroyWindow(hwnd);
            }
        }
        return 0;
    }

    return DefWindowProc (hwnd, iMsg, wParam, lParam);
}