2010-04-03 14 views
5

Pracuję nad aplikacją MFC, która przez lata była dość niechlujna i nad różnymi zespołami programistów. Plik resource.h, który zawiera wszystkie mapowania poleceń/wiadomości, z czasem znacznie się powiększył i ma wiele problemów (takich jak duplikaty identyfikatorów). Nie jestem biegły w MFC, więc pytanie może wydawać się dość głupie ...MFC zasób resource.h/ID wiadomości

Dokumenty MSDN nie powinny być mniej niż WM_USER i WM_APP. Widziałem, że większość identyfikatorów poleceń w resource.h generowanych przez Visual Studio zaczyna się około 100. Czy nie powinno to powodować zakłóceń w komendach i komunikatach MFC/Windows, które pokrywają się z identyfikatorami zdefiniowanymi w aplikacji? Na przykład mam identyfikator polecenia:

#define ID_MY_ID 101 

i istnieje polecenie systemu Windows, które ma ten sam identyfikator. Gdy MC wysyła to polecenie do aplikacji, jest ono obsługiwane jak aplikacja o nazwie ID_MY_ID, a aplikacja podejmuje niepotrzebne działania. Czy to możliwy scenariusz?

Czy istnieje również narzędzie innej firmy, które pomaga profilować zasoby projektu?

Aktualizacja 1:

New pojawił się pytanie: Co jest preferowanym sposobem dodawania nowych poleceń niestandardowych klas aplikacji? Jak zrozumiałem, zanim zostały dodane w następujący sposób: dodaj identyfikator polecenia do pliku resouce.h, a następnie dodaj program obsługi map wiadomości do klasy obsługi.

Odpowiedz

7

Jesteś mieszania dwóch rzeczy:

  1. identyfikatory wiadomości. Te muszą być większe niż WM_USER. Identyfikatory wiadomości nie są zdefiniowane w pliku resource.h. Z Twojego opisu wynika, że ​​nie korzystasz z prywatnych wiadomości dotyczących aplikacji.
  2. Identyfikatory poleceń. Twoja aplikacja nie może mieć duplikatów identyfikatorów poleceń. Wartości identyfikatora komendy nie powinny również kolidować ze standardowymi identyfikatorami MFC zdefiniowanymi w afxres.h. Te identyfikatory komend zaczynają się od 0xE100, więc jest mało prawdopodobne, aby wartości w zasobie resource.h. Kompilator zasobów wygeneruje błąd dla duplikatów identyfikatorów w pliku rc

Prawdopodobnie nie ma potrzeby ręcznego edytowania zasobu.

Polecam użyć narzędzia "Symbole zasobów" (kliknij prawym przyciskiem myszy zasoby w widoku zasobów i wybierz z menu podręcznego, zakładam, że używasz VC++), aby usunąć wszystkie nieużywane identyfikatory z resource.h.

+0

część problemu polega na tym, że identyfikatory zostały dodane ręcznie do resource.h, a procedury obsługi komend zostały również dodane ręcznie do map wiadomości. Tak więc kompilator zasobów prawdopodobnie nie będzie narzekał na takie duplikaty. Również narzędzie "symbole zasobów" zaznacza takie ręcznie dodane polecenia jako nieużywane, chociaż są one faktycznie używane. –

+2

Narzędzie "symbole zasobów" oznacza tylko polecenia jako nieużywane, jeśli nie zostały znalezione w pliku zasobów (.rc). Nie monitoruje, czy są one używane w kodzie. – djeidot

1

Wiadomości polecenia są wysyłane w WM_COMMAND z identyfikatorem polecenia w parametrze, więc nie będzie kolidować z innymi wiadomościami.

1

Generalnie nie ma potrzeby ręcznego wprowadzania lub edycji identyfikatorów w zasobach (identyfikatory automatycznie przypisywane przez VS w prawidłowy sposób). W niektórych przypadkach wymagana jest ręczna ingerencja w identyfikatory, ale możesz zacząć od założenia, że ​​praca poprzednich zespołów programistów dysponujących zasobami była właściwa. Jeśli więc nie napotkasz problemu ze względu na zasoby, zachowaj je nietknięte (IMHO).

"Dokumenty MSDN wspominają, że identyfikatory poleceń i identyfikatory wiadomości nie powinny być odpowiednio mniejsze niż WM_USER i WM_APP." - Wygląda na to, że coś pomieszałeś.

+0

Problem polega na tym, że to założenie nie jest poprawne. Plik resource.h był edytowany ręcznie wiele razy i z jakiegoś powodu również dostępne są identyfikatory wiadomości! Dlatego zacząłem o nie pytać wraz z identyfikatorami poleceń. Nie mam pojęcia, dlaczego zostały tam umieszczone ...być może, aby wszystkie identyfikatory komend były w jednym miejscu. –

+0

Identyfikatory poleceń i identyfikatory wiadomości to różne rzeczy. Jeśli chodzi o identyfikatory poleceń, resource.h jest właściwym miejscem do przechowywania (jak zostało to odnotowane). Jeśli chodzi o prywatne wiadomości - wyodrębnij je do osobnego miejsca, usuń nieużywane, sprawdź zakres identyfikatorów pod kątem poprawności, przenieś je do odpowiednich miejsc (najczęściej do sorcowania plików .cpp i .h z kodem klas okna dla okien przetwarzających te wiadomości). – VitalyVal