banderas de formato de cadena
Utilizando MeasureString() de GDI+, puede medir la longitud de una cadena, pero el resultado de la medición deja algunos píxeles de espacio en blanco al principio. Se dice que se deja para caracteres en cursiva. sexto de ellos.
No quiero que deje este espacio en blanco. Alguien me dijo que este método se puede utilizar para medir la longitud exacta sin este espacio en blanco:
graph.MeasureString(wstr). , num , &Font, ptf, StringFormat::GenericTypographic(), &rcfLay);
Lo probé y funcionó muy bien, y medí la longitud exacta excluyendo el espacio en blanco inicial. Pero lo extraño es que no funciona cuando uso código como este:
StringFormat sf;
sf.GenericTypographic();
graph. MeasureString(wstr, num, &Font, ptf, &sf, &rcfLay);
El código anterior define sf, luego ejecuta sf.GenericTypographic() y luego lo usa en la medición. ¿Hay alguna diferencia entre esto y? ¿El método introducido por el internauta? Pero el suyo puede eliminar espacios en blanco, el mío no.
Originalmente, bastaría con seguir la introducción de este internauta. Pero hay otro problema, es que cuando mido tengo que incluir el último espacio. Para lograr esto, debes definir esto:
sf.SetFormatFlags(StringFormatFlagsMeasureTrailingSpaces);
Después de definir esto, la longitud medida puede incluir el último espacio de la cadena, pero. el problema es: si desea eliminar los espacios iniciales, debe usar StringFormat::GenericTypographic() directamente en la expresión de medición, y si desea incluir el último espacio en el rango de medición, primero debe definir un sf, luego ejecutar:
sf.SetFormatFlags(StringFormatFlagsMeasureTrailingSpaces);
Finalmente, use &sf en la medición
¿Qué debo hacer si quiero tener ambos?
Resuelto, resulta que esto funciona:
StringFormat *psf = (StringFormat *)StringFormat::GenericTypographic();
(*psf).SetFormatFlags (StringFormatFlagsMeasureTrailingSpaces);
La razón es que StringFormat::GenericTypographic() devuelve const StringFormat *, que es un tipo de puntero.