Я строю свой первый проект на 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 ().
Вы застряли, потому что вы хотите знать, какая кнопка была нажата. Это напоминает мне некоторые консольные программы, работающие с пользовательским вводом.
Это не так, как с GUI. Что вы должны сделать, это код, что делать когда кнопка нажата. Это event drived programming
,
В стандартном приложении Win32 «событие» для нажатия кнопки WM_COMMAND
,
Для отображения HWND в класс C ++ с простым отображением между WM_MESSAGE_X и функцией-членом OnMessageX, см., Например, https://stackoverflow.com/a/20356046/1374704
Других решений пока нет …