Wątek przeniesiony 2017-02-07 08:56 z C/C++ przez kq.

Plik z czcionką używaną przez program jest niemożliwy do skasowania

0

Ostatnio pojawił się u mnie następujący problem:
Wysłałem mój program koledze do testów, po jego zamknięciu chciał usunąć cały folder, lecz nie było to możliwe ze względu na to, że Windows nie pozwalał na usunięcie jednego pliku - pliku czcionki. Spróbowałem powtórzyć wszystkie czynności u mnie i faktycznie, występuje taki błąd:
błąd
Poniżej załączam kod odpowiedzialny za czcionkę:

HFONT font( int size )
{
	LOGFONT lf = {};
	lf.lfHeight = size;
	strcpy(lf.lfFaceName, "Lato");
	return CreateFontIndirect(&lf);
}

//...

AddFontResource("Lato.ttf");
HFONT hFont = font(-13);
HFONT hFont2 = font(-80);
HFONT hFont3 = font(-20);

SendMessage( hStatic, WM_SETFONT, (WPARAM)hFont, false );
//itd.

Jak mogę to naprawić?

1

To nie problem C++, tylko systemu. Wg szybkiego googlowania dopiero po reboocie będzie to możliwe (a jak nie, to po reboocie w safe mode).

0

To mam mówić użytkownikom "resetujcie komputery przed skasowaniem"?
Trochę bez sensu :-)
Jak inne aplikacje to robią?

2

Nie jestem pewien, ale podejrzewam, że:

  • nie używają customowych fontów,
  • jak już używają to:
  • olewają dodany font i zostawiają go w systemie,
  • zostawiają task po restarcie do usunięcia zbędnego fontu

Jeśli jest jakoś inaczej to chętnie się dowiem :​)

0

No dobra, trudno, to pozostało mi jeszcze jedno pytanie w tym temacie, mianowicie - u mnie polskie znaki wyświetlają się normalnie w programie, natomiast u kolegi jest np. "³" zamiast "ł", "ê" zamiast "ę" i inne podobne kwiatki. Czego to może być wina? Czyżby znów czcionka?

2

Użyj AddFontResourceEx z flagą FR_PRIVATE.
Nie zapomnij o RemoveFontResourceEx.

https://msdn.microsoft.com/pl-pl/library/windows/desktop/dd183327%28v=vs.85%29.aspx

W twoim kodzie też brakuje RemoveFontResource.

0

Zainstaluj sobie Unlockera i problem z głowy w tej sprawie i w przyszłości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1