Как получить доступ к wm_command вне оконной функции

Я строю свой первый проект на C++, используя классы (пытаясь получить больше опыта), и теперь я застрял. Мне нужно определить, какая кнопка была нажата из моего приложения калькулятора. Мой проект настроен так:

Windows.cpp

// Windows.cpp
#include <Windows.h>
#include <wchar.h>
#include "Resource.h"
#include "Application.h"

int WINAPI wWinMain(...)
{
    // after register class and create/show/update window ( winMain() )
    Application App(hwnd);
    App.Go();

    // Main message loop, etc.
    MSG msg;
    ZeroMemory(&msg,sizeof(msg));
    while(msg.message != WM_QUIT)
    {
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    }
    return 0;
}

Application.h

 #pragma once
 #include "Calculator.h"

class Application
{
public:
    Application(HWND hwnd);
    ~Application();
    void Go();

private:
    void Run();

private:
    Calculator calc;
};

Application.cpp:

// Application.cpp

#include "Application.h"

Application::Application(HWND hwnd)
: calc(hwnd)
{}
Application::~Application()
{}
void Application::Go()
{
    calc.Initiate(); // This function shows all my button controls for my calculator
    Run();
}

void Application::Run()
{
    // This is where i want to determine which button was pressed(if any)
    if(buttonONEwasPRESSED) { /* do stuff */ } // etc
}

Я думал о добавлении функции в класс Calculator, чтобы определить, была ли нажата кнопка, но я не уверен, как получить доступ к wm_command или есть другой способ. Тогда я мог бы просто вызвать calc.IsButtonPressed().

1 ответ

Вы застряли, потому что вы хотите знать, какая кнопка была нажата. Это напоминает мне некоторые консольные программы, работающие с пользовательским вводом.

Это не так, как с GUI. Что вы должны сделать, это код, что делать, когда нажата кнопка. Это event drived programming,

В стандартном приложении Win32 "событие" для нажатия кнопки WM_COMMAND,

Чтобы отобразить HWND в класс C++ с помощью простого сопоставления между WM_MESSAGE_X и функцией-членом OnMessageX, см., Например, /questions/6426676/win32-c-sozdat-okno-i-protseduru-vnutri-klassa/6426683#6426683

Другие вопросы по тегам