Я пытаюсь имитировать c поведение CString::LoadString(HINSTANCE hInst, DWORD id, WORD langID)
без введения зависимости от MF C в мое приложение. Итак, я прошел через источник. Первое, что он делает, это немедленно вызывает AtlGetStringResourceImage(hInst, id, langID)
, а затем он, в свою очередь, содержит следующую строку кода:
hResource = ::FindResourceExW(hInst, (LPWSTR)RT_STRING, MAKEINTRESOURCEW((id>>4)+1), langID);
(это не дословно, но я обрезал некоторые неважные вещи).
Что означает смещение идентификатора на 4 и добавление 1? Согласно документации FindResourceEx, вы должны передать MAKEINTRESOURCE(id)
, и я не могу найти пример кода, который манипулирует идентификатором, прежде чем передать его в MAKEINTRESOURCE
. В то же время, если я вызову код MAKEINTRESOURCE(id)
, он не будет работать и FindResourceEx
вернет ноль, тогда как если я использую вышеупомянутые shift + add, то он будет работать.
Может кто-нибудь объяснить это?