Калькулятор среднего ватина с WIN32 API - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь сделать простой калькулятор среднего значения ватина с графическим интерфейсом, используя WIN32 API.Предполагается, что программа берет удары и время в битах и ​​делит их, чтобы получить среднее значение ватин (формула среднего уровня = число попаданий / время в битах).У меня уже есть все элементы графического интерфейса, которые мне нужны, чтобы иметь возможность получать ввод от пользователя и выводить ответ.У меня также есть эта странная проблема, когда я набираю текст в текстовые поля, а текст невидим.

#include <windows.h>
#define CALC_BUTTON 1

LRESULT CALLBACK WindowProcedure(HWND,UINT,WPARAM,LPARAM);
void AddControls(HWND);

HWND hHits,hTimesAtBat,hOut;

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR args, int ncmdshow)
{
    WNDCLASSW wc = {0};
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.hCursor = LoadCursor(NULL,IDC_ARROW);
    wc.hInstance = hInst;
    wc.lpszClassName = L"myWindowClass";
    wc.lpfnWndProc = WindowProcedure;

    if(!RegisterClassW(&wc))
        return -1;

    CreateWindowW(L"myWindowClass",L"Pedro's Batting Average Calculator",WS_OVERLAPPEDWINDOW | WS_VISIBLE ,100,100,500,500,NULL,NULL,NULL,NULL);

    MSG msg ={0};

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProcedure(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
{
    switch (msg)
    {
    case WM_COMMAND:
        switch(wp)
        {
        case CALC_BUTTON: 
        //Insert Funtionally here
            break;

        }

    case WM_CREATE:
        AddControls(hWnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProcW(hWnd,msg,wp,lp);
    }
}

void AddControls(HWND hWnd)
{
    CreateWindowW(L"Static",L"Hits:",WS_VISIBLE|WS_CHILD,150,70,98,38,hWnd,NULL,NULL,NULL); //Hits Text
    hHits = CreateWindowW(L"Edit",L"",WS_VISIBLE|WS_CHILD|WS_BORDER,200,50,98,38,hWnd,NULL,NULL,NULL); //Enter Hits

    CreateWindowW(L"Static",L"TimesAtBat:",WS_VISIBLE|WS_CHILD,100,110,98,38,hWnd,NULL,NULL,NULL); //Bats Text
    hTimesAtBat = CreateWindowW(L"Edit",L"",WS_VISIBLE|WS_CHILD|WS_BORDER,200,90,98,38,hWnd,NULL,NULL,NULL); //Enter Bats

    CreateWindowW(L"Static",L"Batting Average:",WS_VISIBLE|WS_CHILD,70,140,128,38,hWnd,NULL,NULL,NULL); //Batting Avg
    hOut = CreateWindowW(L"Edit",L"",WS_VISIBLE|WS_CHILD|WS_BORDER,200,130,98,38,hWnd,NULL,NULL,NULL);  //Answer Output

    HWND hBut = CreateWindowW(L"Button",L"Calculate",WS_VISIBLE|WS_CHILD|WS_BORDER,150,190,98,38,hWnd,(HMENU)CALC_BUTTON,NULL,NULL); //Calculate Button
}

1 Ответ

0 голосов
/ 27 августа 2018

Отсутствует break до WM_CREATE.

case WM_COMMAND:
    switch(wp)
    {
    case CALC_BUTTON: 
    //Insert Funtionally here
        break;

    }
    break; // If you omit this, it falls trough to WM_CREATE.
case WM_CREATE:
    AddControls(hWnd);
    break;

Считывание числовых значений из элемента управления редактированием может быть затруднено с помощью GetWindowTextLength, GetWindowText, _wtoi или намного проще с GetDlgItemInt (для каждого элемента управления требуется идентификатор, малое число как hMenu - 9-й аргумент в вызове CreateWindow).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...