【问题标题】:How can I make a button in MFC do something different based on what previous button was clicked?如何使 MFC 中的按钮根据单击的上一个按钮执行不同的操作?
【发布时间】:2014-11-07 17:43:30
【问题描述】:

所以我在 Visual Studio 2012 中有一个带有 MFC GUI 的 C++ 程序。我没有构建此代码的基础,我正在修改包含 GUI 的预先存在的代码。

程序以所有按钮开始,但 2 显示为灰色。我想做的是将灰色按钮链接到不同的功能,具体取决于我单击的两个非灰色按钮中的哪一个。现在,按钮通过两步过程链接到功能。我很确定我想保留第一步并修改第二步,但如果我错了,这两个都是。

第 1 步:

void CTCPClientDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_VERSION, m_Version);
    DDX_Control(pDX, IDC_OPTIMIZE, m_Optimize);
    DDX_Control(pDX, IDC_NORMALIZED_SPECTRUM, m_Normalize);
    DDX_Control(pDX, IDC_AQUIRE, m_Acquire);
    DDX_Control(pDX, IDC_DISCONNECT, m_Disconnect);
    DDX_Control(pDX, IDC_ASD_CONNECT, m_Connect1);
    DDX_Control(pDX, IDC_OCEAN_CONNECT, m_Connect2);
}

第 2 步:

BEGIN_MESSAGE_MAP(CTCPClientDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_VERSION, OnVersion)
    ON_BN_CLICKED(IDC_OPTIMIZE, OnOptimize)
    ON_BN_CLICKED(IDC_NORMALIZED_SPECTRUM, OnNormalize)
    ON_BN_CLICKED(IDC_AQUIRE, OnAcquire)
    ON_BN_CLICKED(IDC_DISCONNECT, OnDisconnect)
    ON_BN_CLICKED(IDC_CONNECT_1, OnConnect1)
    ON_BN_CLICKED(IDC_CONNECT_2, OnConnect2)
END_MESSAGE_MAP()

这些在代码开头附近一个接一个。 Connect1 和 Connect2 是开始可单击的两个按钮,然后我希望其他按钮在单击它们后链接到不同的功能(所以说如果我单击 Connect2 则版本将转到 OnVersion2 等)。似乎如果我可以为 OnConnect1 和 OnConnect2 函数中的其他按钮声明 ON_BN_CLICKED 我会很好,但我不确定该怎么做。我也可能专注于完全错误的位置,因此我们将不胜感激。

编辑:忘了提我知道我可以只设置一个变量,设置为 0 或 1 或其他任何值,并让每个函数由 if 语句分割。但是我想知道是否可以不这样做,似乎完全只有两个独立的功能会更干净。我已经在用变量设置它,但如果可能的话想改变它。

【问题讨论】:

  • 嗯,就这样吧。或者你不知道该怎么做?有一个变量来说明版本按钮是否应该转到 OnVersion1OnVersion2 并让您的 OnVersion 方法检查变量以决定下一步做什么。

标签: c++ visual-studio-2012 button user-interface mfc


【解决方案1】:

ON_BN_CLICKED 是在编译时定义的表的一部分,其中列出了按钮 ID 和功能。这不能在运行时更改。只需在 OnConnect1 消息处理程序中使用布尔变量在代码中执行此操作即可。

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多