VS Tipps & Tricks: Der unbekannte CString Konstruktor…

CString nimmt natürlich auch in einem seiner Konstruktoren einen LPCTSTR . Dieser Konstruktor hat aber noch eine versteckt eingebaute Funktion. Man kann CString auch mit MAKEINTRESOURCE(id) verwendet. Aus der Dokumentation geht dies nicht eindeutig hervor, aber zumindest findet man es am Rande erwähnt.
Ist also das High-WORD des LPCTSTR gleich NULL dann wird das LOWORD verwendet um die entsprechende String-Ressource zu laden.
Ist die Ressource nicht vorhanden wird in der Debugausgabe ein entsprechender Trace erzeugt.

Benötigt man also temporär eine String Variable so kann man direkt in einem Statement die entsprechende String-Resource laden:

CString strMyText(MAKEINTRESOURCE(IDS_MY_STRING));
strMyText += strSomeOther;
strMyText += CString(MAKEINTRESOURCE(IDS_MY_TEXT_TO_APPEND));

Vista: Wo ist bitte die Option „Unterstrichene Buchstaben für Tastatur Navigation ausblenden“ geblieben

Ich bin Tastatur Fan. Wenn ich es vermeiden kann benutze ich nicht die Maus. Aus diesem Grund möchte ich natürlich auch immer die Acceleratoren (unterstrichenen Buchstaben) in Menüs oder Dialogen sehen.
Leider ist seit Windows XP die Standardeinstellung so, dass man erst durch Drücken der ALT-Taste die Acceleratoren sichtbar macht.

Unter XP findet man das ganze unter

  • Systemsteuerung -> Darstellung und Design -> Anzeige -> Darstellung -> Effekte:
    Unterstrichene Buchstaben für Tastatur Navigation ausblenden (mit ALT-Taste einblenden)

Leider hat ist diese Option unter Windows Vista nicht mehr dort zu finden.
Dank Windows Vista Suche nach „Tastenkombination“ führte mich das direkt zu:

  • Systemsteuerung -> Erleichterte Bedienung -> Center für erleichterte Bedienung -> Bedienung der Tastatur erleichtern:
    Tastenkombinationen und Zugriffstasten unterstreichen

Slow DrawText performance in Vista and Windows 7. Please comment…

Sorry for blogging in English. I know that I am breaking my own rules 😉

Reasons for this article:
In the last years I found it more an more complicated to get bugs fixed in current software produced by Microsoft. My experience showed me, that the Microsoft product teams always look for new versions and new features and the Microsoft support teams and engineers don’t produce enough pressure that well known bugs get fixed in the currently used software products.

The reason why the Microsoft support rejected a request for a fix was very often that not enough customers are affected by the problem or bug. And this is often a problem for me and my company. We are just a small ISV so we can’t point to millions of affected users. And yes I know that hotfixes are expensive.
So usually we have to be flexible and have to find work arrounds.
But my feeling is that there would be enough impact and pressure for a hotfix, if it would be known to the public what problems exist and that there are others who have a request to get a special problem fixed.
Also a lot of programmers tend to avoid the creation of a support request, because the experience  shows: You put energy, time (and money) into a support request and the answers are in most cases: Will not get fixed, by design, and so on…

Another experience in the last years was, that even being an MVP doesn’t help to get anything fixed by Microsoft even if a lot of MVPs point out that there is a real need for a change or fix. 

So I just want to choose a new way, because there is no way to get votes of other people to a standard bug in a Microsoft product like it is possible on Microsoft Connect. But Connect is absolutely worthless if the product is already shipped!
I want to collect votes for this problem via my blog. I also informed the Microsoft support engineer who cares about the current incident.

If you agree and if you see a larger problem in this bug too, or if you have the feeling or knowledge that it has impact on your own software, than please write a comment to this blog article. Please leave your real email address or homepage URL. The email address will not be visible to the public, and I will forward it only to Microsoft if the poster agrees.

Description of the bug:

On January 17th, 2009 I reported a reproducible bug in Windows Vista in the article DrawText unter Vista gegenüber XP um bis zu Faktor 50 langsamer!  (The article is written in German, you find a description in English below in the next lines)

Fact:
Windows Vista and Window 7 are up to 50 times slower in the execution of a simple DrawText function with DT_CALCRECT set compared to Windows XP.
You can find the source code for a sample code (VS-2005 MFC project) that shows the bug here:  TestDrawText.zip. If you are just interested in the executable you can find it here TestDrawTextExe.zip.

And as far as I can see the overall performance of DrawText is affected.

My request:
If you find it important that this need a fix, or if you have the feeling or the knowledge, that you software might be effected. Please leave a comment here ❗

Or feel free to vote on the bug I filed for Windows 7 on Microsoft Connect:
https://connect.microsoft.com/windows7/feedback/ViewFeedback.aspx?FeedbackID=401007

Thank you

Final Note (11.07.2009):
Read on here
http://blog.m-ri.de/index.php/2009/07/11/ausloesung-drawtext-unter-vista-gegenueber-xp-um-bis-zu-faktor-50-langsamer/

Ein Programm fast wie ‚Microsoft Live Meeting‘ für nix ;)

Microsoft SharedView 

Es ist nicht ganz so wie Live Meeting und kann auch nicht alles was Live Meeting kann (Voice Übertragung, Aufzeichnung etc.). Und die Geschwindigkeit ist auch nicht soooo der Kracher.
Aber Microsoft Shared View ist auf jeden Fall für mich eine heiße Entdeckung und ein Tipp für all diejenigen, die evtl. auch mal dem/der 80 jährigen Vater/Mutter am PC Remote unterstützend unter die Arme greifen wollen, weil der was am PC nicht versteht 😉 und gerade keinen NetViewer oder Live Meeting Account haben und es erscheint mir einfacher und effektiver als die Windows Remoteunterstützung.

Hier ein paar Features und Möglichkeiten:

  • Jeder Nutzer entscheidet welche Programme er freigibt, oder ob er gar (für einen Supportfall) den ganzen Desktop freigibt. Nicht nur derjenige, der die Session gestartet hat.
  • Jeder Nutzer verfügt automatisch über die Steuerung seiner freigegebenen Anwendung oder des freigegebenen Desktops.
  • Es ist möglich das jeder Sitzungsteilnehmer die Steuerung anfordern kann, sodass man aktiv beitragen und eingreifen kann.
  • Derjenige, der die Freigabe gestartet hat, erhält automatisch die Steuerung wieder wenn er mit der Maus klickt oder eine Taste auf der Tastatur betätigt.
  • Jeder Teilnehmer hat einen personalisierten Mauszeiger, mit dem er auf Bereiche hinweisen oder auch Bereiche hervorheben kann – ideal geeignet, um jeden Teilnehmer einzubeziehen und sicherzustellen, dass keine Details übersehen werden.
  • Und es gibt ein weiteres praktisches Feature: jeder Teilnehmer kann so genannte „Handzettel“ bereitstellen. Das sind einfach Dateien, die sich andere Teilnehmer sofort herunterladen können.
  • SharedView integriert sich in den Messenger

Mehr hier unter diesem Link:
http://www.connect.microsoft.com/site/sitehome.aspx?SiteID=94

Es lohnt sich wirklich einen Blick auf dieses Stück Software zu werfen ❗

VS Tipps & Tricks: Export/Import von Einstellungen zwischen VisualStudio 2005 und 2008

In einem meiner ersten Tipps habe ich das Thema Import und Export von Einstellungen schon behandelt schon behandelt: VS-Tipps & Tricks: Einstellungen für Visual Studio mehreren Arbeitsplätzen gleich halten.

Besonders wichtig ist das für mich immer mit den Tastatureinstellungen, die immer anpasse.

Was ich aber jetzt mit positivem Erstaunen feststellen konnte ist folgendes:
Man kann Einstellungen auch aus VS-2005 nach VS-2008 übertragen und umgekehrt ❗

Die XML Struktur des Exportformates ist nicht versioniert. Man kann direkt Einstellungen aus VS-2005 austauschen. Ideal wenn man Legacy Projekte noch behandeln muss und beide Systeme parallel fährt.

Wo bitte ist der Reset-Schalter?

In meiner Entwicklungsmaschine wollte ich Speicher ergänzen. Ist ja keine Hexerei.

  • Rechner runterfahren
  • 1GB Riegel raus 2GB Riegel rein
  • Rechner neu starten, ENTF-Taste drücken:
    BIOS meldet 1GB mehr. Schöööön
  • Rechner mit Vista neu starten
  • Tadi-Tada der Vista Sound

😯 der Bildschirm wird schwarz nachdem eben der BIOS sich noch gemeldet hat. Monitor zeigt an „Kein Signal“!

  • Monitorschalter Aus/Ein:
    wenigstens habe ich den Anmeldebildschirm, aber nur 1024×768 Auflösung
  • Anmelden, Bildschirmeinstellung kontrollieren:
    Mein schöner 22Zoll ACER LCD-Monitor wird nicht als PnP-Monitor erkannt. Maximale Auflösung 1024×768.
  • Rechner runterfahren. Speicher zurückwechseln:
    Neustart… BIOS meldet sich auf Monitor, Vista-Sound, Bildschirm wird schwarz, Monitorschalter Aus/Ein, Bild ist da. Monitor wird nicht erkannt, Auflösung nur 1024×768
  • Rechner runterfahren. VGA Kabel angeschlossen:
    Neustart… Siehe da alles OK.
  • Rechner runterfahren. DVI Kabel angeschlossen:
    Neustart… Monitor aus, wird nicht erkannt, Auflösung nur 1024×768.
  • Bei laufendem Rechner Kabel raus und wieder rein:
    Netter Hardware Erkennungssound, aber nur 1024×768 und keine PnP-Monitor Erkennung.
  • Rechner runterfahren. Anderes DVI Kabel verwenden:
    Neustart… Monitor wird nicht erkannt Auflösung nur 1024×768.
  • Rechner runterfahren. Rechner vom Netz getrennt, neu gestartet, BIOS Reset:
    Neustart… Monitor wird nicht erkannt Auflösung nur 1024×768.
  • Nochmal Speicher rein/raus:
    No avail…
  • … weitere vergebliche Versuche irgendwas zu ändern..
  • … Kollege gefragt… der sagt mir alles was rät, ich schon längst probiert habe:
    Ratlos wie ich…
  • … weitere vergebliche Versuche irgendwas zu ändern..

😕 und nun? Board kaputt? Video-Karte gelyncht? Installation futsch?

Letzter Gedanke: Im Monitor ist ja auch Software ❗

  • Rechner läuft, Monitor wird nicht als PnP-Monitor erkannt, Auflösung 1024×768
  • Netzstecker vom Monitor gezogen 10 Sekunden gewartet und wieder angeschlossen.
  • Hardware Erkennungssound von Vista…
  • HURRA ❗ Monitor wird wieder als PnP Monitor erkannt.
  • Auflösung lässt sich wieder auf 1650×1050 stellen
  • Rechnerneustart und alles ist wieder wie gewohnt, inkl. 1GB mehr Speicher:
    Martin ist wieder glücklich und erleichtert :mrgreen:

Der I/O Schalter des Monitors scheint nicht wirklich den Bildschirm ein- oder auszuschalten.
Irgendwie war die Software des Monitors durcheinander geraten…

Resultat: Eine vergeudete Stunden weil ACER den Reset-Schalter vergessen hat, oder ich zu blöd war… 😉
Passiert so etwas immer nur mir?