Ich habe einen Dialog, der eine Fortschrittsleiste hat. Ich möchte eine Methode zu diesem Dialog hinzufügen, die den Fortschrittsbalken auf das Auswahlrechteck setzt. Ich versuche folgendes:Statusleiste von Normal zu Laufschrift wechseln
void CDownloader::SetIntermediate(wstring info)
{
SetDlgItemText(IDC_DOWNLOADER_LABEL, info.c_str());
auto style = GetWindowLong(GWL_STYLE);
style &= ~(PBS_SMOOTH | PBS_SMOOTHREVERSE | PBS_VERTICAL);
style |= PBS_MARQUEE;
SetWindowLong(GWL_STYLE, style);
RECT windowRect;
GetWindowRect(&windowRect);
SetWindowPos(HWND_TOP, &windowRect,SWP_FRAMECHANGED);
HWND progress = GetDlgItem(IDC_DOWNLOADER_PROGRESS);
::SendMessage(progress, PBM_SETMARQUEE, TRUE, 100);
}
Allerdings funktioniert das nicht :(
ich die Fenster-Stil gesetzt Entfernen Stile Marquee, die mit ihm in Konflikt geraten kann, SetWindowPos mit dem Stil zu aktualisieren und die den Fortschritt auf . MARQUEE
kann ich die Fortschrittsbalken im Designer auf Marquee, kann aber nicht bac normal wechseln
Die Verwendung von SetWindowLong() zum Ändern von Style-Flags ist ein Treffer und Miss, insbesondere Progressbar gewinnt keine Preise. Die einfache Problemumgehung besteht darin, * zwei * von ihnen zu erstellen und einen davon basierend auf dem, was der Benutzer sehen soll, sichtbar zu machen. Oder einfach nur DestroyWindow + CreateWindowEx. –
Dann sollten Sie Code schreiben, um Fortschrittsbalken in Normal zu verwandeln. Das ist 'PBS_MARQUEE'-Stil entfernen,' PBS_SMOOTH' zurücksetzen und so weiter. – VTT
Sie legen die Fortschrittsbalken-Stile im * -Dialog * anstelle des Fortschrittsbalkens fest. Es sollte ':: GetWindowLong (progress, GWL_STYLE)' und ':: SetWindowLong (progress, GWL_STYLE, style);' sein. Ich glaube auch nicht, dass Sie die 'SetWindowPos' brauchen. – zett42