5 Stimmen

Wie kann man den vom Ressourcen-Editor verwendeten Stil wiederherstellen, wenn man MFC-Steuerelemente dynamisch erstellt?

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!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X