2014-02-21 30 views
0

我正在構建我的第一個使用類的C++項目(試圖獲得更多的經驗),現在我被卡住了。我需要確定從我的計算器應用程序中按下哪個按鈕。我有我的項目設立的方式是:如何從窗口函數外部訪問wm_command

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

哪裏是你的消息循環? – crashmstr

+0

在我的wWinMain函數()中。我編輯了我的帖子。 – Vince

+0

嗯,'Run'消息只被你的程序調用一次。當時任何按鈕都不可能被按下。如果用戶稍後按下按鈕會怎麼樣?答案:窗口過程得到一個「WM_COMMAND」消息。所以在你的窗口程序中迴應它。 –

回答

0

你被卡住了,因爲你想知道哪個按鈕被按下。這讓我想起了一些處理用戶輸入的控制檯程序。

這不是如何去與GUI。你應該做的是代碼做什麼按鈕被按下。那是event drived programming

對於標準的Win32應用程序,按鈕按下的「事件」是WM_COMMAND

對於映射HWND成與WM_MESSAGE_X和OnMessageX成員函數之間很容易地映射C++類的,參見例如https://stackoverflow.com/a/20356046/1374704