gpt4 book ai didi

c++ - MFC - 控件不是直接创建的

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

我创建了一个 clss 名称 NRGroupBox 来管理自定义 GroupBox 样式。我有一些 helper 在组框中添加控件:

NRGroupBox
{
...
NRButton * CreateButton(std::string id, CRect position, std::string content);
NREdit * CreateEdit(std::string id, CRect position);
NRStatic * CreateStatic(std::string id, CRect position, std::string text);
NRComboBox * CreateComboBox(std::string id, CRect position);
...
std::map<std::string, NREdit * > edits;
std::map<std::string, NRStatic * > labels;
std::map<std::string, NRButton * > buttons;
std::map<std::string, NRComboBox * > comboBoxes;
...
}

这是其中一个辅助函数的代码:(这四个函数非常相似)

NREdit * NRGroupBox::CreateEdit(std::string id, CRect position)
{
if(!edits.count(id))
{
NREdit * buff = new NREdit();
buff->Create(WS_CHILD | WS_VISIBLE, position, this, editIds++);
buff->MoveWindow(position);
edits[id] = buff;
}

return edits[id];
}

我的问题是,当我调用此函数时,编辑框不显示,我需要在 CreateEdit 函数之外调用 MoveWindow。我不明白为什么我需要这样做。

这是我想如何使用 NRGroupBoxCreateEdit 函数的示例。

BOOL ConfigWindow::OnInitDialog()
{
if(!CDialog::OnInitDialog())
{
NRthrow("Impossible de créer la fenêtre");
return FALSE;
}

MoveWindow(0,0,800,800);

ShowWindow(SW_SHOW);

groupBox = new NRGroupBox();
groupBox->Create("Test GroupBox", CRect(0,0,500,500), this);
groupBox->SetNRStyle();

bouton = groupBox->CreateButton("bouton", CRect(230,60,100,20), "Test Bouton");
label = groupBox->CreateStatic("label", CRect(10,60,100,20), "Test label");
editBox = groupBox->CreateEdit("editBox", CRect(120,60,100,20));

// Actually I need those lines, but I don't want to need it.
//editBox->MoveWindow(120,60,100,20);
bouton->MoveWindow(230,60,100,20);
label->MoveWindow(10,60,100,20);

NRDebug::Notice("Création d'une fenêtre de Paramétrage");


return TRUE;
}

谢谢你的帮助

最佳答案

CRect(120,60,100,20)

你的坐标顺序错误,右 < 左和底 < 顶

关于c++ - MFC - 控件不是直接创建的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24692727/

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