簡體   English   中英

C++ MFC,使用 ID 變量獲取 GUI 控制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM