Ich muss einige Steuerelemente in einem MFC-Dialog dynamisch erstellen. Die Erstellung funktioniert so weit gut, aber die dynamisch erstellten Steuerelemente sehen anders aus als die mit dem Ressourceneditor erstellten Steuerelemente. Einige Steuerelemente verhalten sich sogar anders. Ich denke, dass ich einige Initialisierungen vermisse, die der generierte Code durchführt.
Derzeit erstelle ich nur CStatic
y CEdit
Kontrollen. Beide verwenden nicht die Standard-Windows-Schriftart, wenn ich sie dynamisch erstelle (die Schrift sieht eher wie die Standardschriftart aus, die vor Windows 95 verwendet wurde, wenn ich mich richtig erinnere).
Auch die CEdit
Steuerelement verhält sich anders, als wenn ich es mit dem Ressourceneditor erstelle. Das dynamisch erstellte Steuerelement scheint die Textlänge auf die sichtbare Größe zu begrenzen. Ich kann einen längeren Text einstellen mit SetWindowText()
und lesen Sie den vollständigen Text wieder ein mit GetWindowText()
aber der Benutzer kann keinen Text eingeben, der länger als die angezeigte Größe ist. Die Website CEdit
Steuerelement, das mit dem Ressourcen-Editor erstellt wurde, verhält sich anders: Wenn der Benutzer einen Text eingibt, der länger ist als angezeigt werden kann, wird der eingegebene Text innerhalb des Steuerelements "gescrollt" (keine Bildlaufleisten, da es sich nur um ein einzeiliges Steuerelement handelt).
Ich habe versucht, dieses Problem durch den Aufruf von SetLimitText()
auf das Steuerelement, aber das hat das Verhalten nicht geändert.
Die Steuerelemente werden in Arrays gespeichert, die in der Dialogklasse definiert sind:
CStatic** m_pLabels;
CEdit** m_pEdits;
Die Erstellung der Steuerelemente erfolgt in der OnInitDialog()
Methode der Dialog-Klasse:
for (int i = 0; i < max; i++)
{
m_pLabels[i] = new CStatic();
m_pLabels[i]->Create("key", WS_CHILD | WS_VISIBLE | SS_RIGHT,
CRect(10, 10 + i * 30, 130, 35 + i * 30), this);
m_pEdits[i] = new CEdit();
m_pEdits[i]->CreateEx(WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_BORDER,
CRect(133, 10 + i * 30, 350, 35 + i * 30), this, i + 100);
m_pEdits[i]->SetLimitText(499);
m_pEdits[i]->SetWindowText("value to be edited");
}
Vielen Dank für Ihre Hilfe!