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));
Schreibfaule Programmierer verpacken das noch in ein Makro:
Ich würde es alleine der Konformität wegen so machen:
Dafür sagt die MSDN bei MAKEINTRESOURCE eindeutig:
The return value should be passed only to functions which explicitly indicate that they accept MAKEINTRESOURCE as a parameter. For example, the resource management functions allow the return value of MAKEINTRESOURCE to be passed as the lpType or lpName parameters.
@msdn: Ich verstehe Deinen Einwand nicht.
Und warum soll man es eben nicht im CString Konstruktor benutzen?
1. Es ist dokumentiert, wenn auch nur im Beispiel und Nebensatz.
2. Es ist eine Funktion, die die MFC seit der frühesten Version hat.