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

Odpowiedz Nowy wątek
2017-02-07 09:48
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ć?

edytowany 1x, ostatnio: mikson, 2017-02-07 09:48

Pozostało 580 znaków

2017-02-07 09:56
kq
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).


edytowany 1x, ostatnio: kq, 2017-02-07 09:57

Pozostało 580 znaków

2017-02-07 09:58
0

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

Pozostało 580 znaków

2017-02-07 10:01
kq
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 :​)


edytowany 1x, ostatnio: kq, 2017-02-07 10:02

Pozostało 580 znaków

2017-02-08 10:29
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?

edytowany 1x, ostatnio: mikson, 2017-02-08 10:29

Pozostało 580 znaków

2017-02-08 10:52

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

https://msdn.microsoft.com/pl[...]op/dd183327%28v=vs.85%29.aspx

W twoim kodzie też brakuje RemoveFontResource.

edytowany 1x, ostatnio: Azarien, 2017-02-08 10:53
A więc jednak problem w C++. Działa, dzięki! - mikson 2017-02-08 11:49

Pozostało 580 znaków

2017-06-09 23:08
0

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


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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