[英]C++ MFC, Get GUI Control using a ID variable
我想知道是否有可能獲得一個帶有變量作為其 ID 的 MFC GUI 控件。 我有幾個控件我想一次更改,即 IDC_btn30、IDC_btn29 等,因此如果可能的話,這將提高代碼效率。
int days = 31;
std::string id = "IDC_btn" + days;
GetDlgItem(id)->EnableWindow(FALSE);
我這樣做的方法是創建一個頭文件,該文件將一系列控件 ID 固定映射到遞增的整數序列:
#define IDC_BUTTON1 2001
#define IDC_BUTTON2 2002
#define IDC_BUTTON3 2003
#define IDC_BUTTON4 2004
等等。
然后需要將 .rc 文件設置為包含該標頭。 在 Visual Studio 中,這是通過將其添加到 TEXTINCLUDE 2 資源來完成的。 在 AppWizard 生成的文件中,它是這樣寫的:
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
EN
添加您的標題,使其顯示:
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"#include ""myres.h""\r\n"
"\0"
EN
也可以通過 Visual Studio IDE 添加此條目,方法是切換到項目窗口中的資源視圖,右鍵單擊相應的 .rc 文件並選擇“資源包括...”。 然后應該將#include "myres.h"
添加到“只讀符號指令”部分。 其他資源編輯器可能有自己的技術來做到這一點。
還#include
窗口類的實現文件中的頭文件。
然后,您將能夠計算該范圍內的控件 ID,例如在如下循環中:
for (int n = 0; n < 4; n++)
{
GetDlgItem(IDC_BUTTON1 + n)->ShowWindow(SW_SHOW);
}
另一種不太優雅但更獨立的技術是在您的實現文件中創建一個控件 ID 數組並循環遍歷它:
static const int Controls[] =
{
IDC_FRAME1, IDC_RADIO1, IDC_RADIO2, IDC_BUTTON1, IDC_BUTTON2
};
...
for (int n = 0; n < _countof(Controls); n++)
{
GetDlgItem(Controls[n])->ShowWindow(SW_SHOW);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.