Как получить доступ к 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 ().

0

Решение

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

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

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

Для отображения HWND в класс C ++ с простым отображением между WM_MESSAGE_X и функцией-членом OnMessageX, см., Например, https://stackoverflow.com/a/20356046/1374704

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]