所以我在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语句拆分。但我想知道如果没有它,我觉得完全拥有两个独立的功能似乎更清晰。我已经在使用变量进行设置,但是如果可能的话我想改变它。
答案 0 :(得分:2)
ON_BN_CLICKED是在编译时定义的表的一部分,列出了按钮ID和函数。这不能在运行时更改。只需在OnConnect1消息处理程序中使用布尔变量在代码中执行此操作。