gpt4 book ai didi

c++ - 如何根据接收到的值获取变量名?

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:25 31 4
gpt4 key购买 nike

我有一个 MFC 项目。每个按钮、列表控件等都有其唯一的 ID,例如

#define IDC_LOGIN_BUTTON 1
#define IDC_EDIT_USERNAME 2

UI 上有数百个项目。我可以使用 hooker 函数来接收来自用户按钮单击的 Windows 消息。但是我怎么知道是哪个项目触发了这条消息呢?例如(伪代码):

#define PRINTAPI(x) std::cout << #x << std::endl;

int nRet = receiveWindowsNotificationCode();
switch(nRet):
{
case IDC_LOGIN_BUTTON :
PRINTAPI(IDC_LOGIN_BUTTON );
break;
case IDC_EDIT_USERNAME :
PRINTAPI(IDC_EDIT_USERNAME );
break;
.....

}

由于我在这个 UI 上有数百个项目,如果我使用 switch case,它会很长。有更好的解决方案吗?

最佳答案

没有简单的解决方案。

但是有一个几乎简单的解决方案:

您编写一个小工具,将包含所有 ID 列表的文件作为输入:

IDC_LOGIN_BUTTON
IDC_EDIT_USERNAME
...

该工具将读取该文件并生成相应的 C++ 源代码,在文件 cases_auto.inc 中,例如:

// automatically generated code
case IDC_LOGIN_BUTTON :
PRINTAPI(IDC_LOGIN_BUTTON );
break;
case IDC_EDIT_USERNAME :
PRINTAPI(IDC_EDIT_USERNAME );
break;
...

然后而不是写:

int nRet = receiveWindowsNotificationCode();
switch(nRet):
{
case IDC_LOGIN_BUTTON :
PRINTAPI(IDC_LOGIN_BUTTON );
break;
case IDC_EDIT_USERNAME :
PRINTAPI(IDC_EDIT_USERNAME );
break;
.....

}

你写:

int nRet = receiveWindowsNotificationCode();
switch(nRet):
{
#include "cases_auto.inc"
}

稍微难点:

您的工具可以直接解析包含 #define IDC_...

的 .h 文件
#define IDC_LOGIN_BUTTON 1
#define IDC_EDIT_USERNAME 2

该工具应少于 20 行 C 代码。您也可以使用脚本语言代替 C 或 C++。

关于c++ - 如何根据接收到的值获取变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42653973/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com