in tools/VerifyResources/VerifyResources.cpp [374:459]
VOID VerifyLangDialogs(PROCRES *pprocres)
{
DLGDECODE rgdecdlg[MAXLANG]; // ilocaleMac in use
for (int ilocale = 0; ilocale < iLocaleMac; ilocale++)
{
LPVOID lpv = LockResource(pprocres->rghglobSeen[ilocale]);
DLGDECODE *pdecdlg = &rgdecdlg[ilocale];
ZeroMemory(pdecdlg, sizeof(*pdecdlg));
DecodeDialog(lpv, pdecdlg);
}
// make sure all dialogs have the same number of items, style and same class
DLGDECODE *pdecdlgEng = &rgdecdlg[ILOCALE_ENG];
int citems = pdecdlgEng->pdlg->cdit;
DWORD style = pdecdlgEng->pdlg->style;
LPCTSTR lpszClass = pdecdlgEng->lpszClass;
if (lpszClass == NULL) lpszClass = L"EMPTY";
WORD wClass = pdecdlgEng->wClass;
for (int ilocale = 1; ilocale < iLocaleMac; ilocale++)
{
LPCTSTR classCmp = L"EMPTY";
wchar_t szLocale[25];
DLGDECODE *pdecdlgT = &rgdecdlg[ilocale];
LCIDToLocaleName(rglcidInUse[ilocale], szLocale, COUNTOF(szLocale), 0);
if (pdecdlgT->pdlg->cdit != citems)
{
printf("Error: dialog %ls for language %ls does not have the required number of items %d\n", pdecdlgEng->lpszTitle, szLocale, citems);
return;
}
if (pdecdlgT->lpszClass != NULL)
classCmp = pdecdlgT->lpszClass;
if (pdecdlgT->wClass != wClass || wcscmp(classCmp, lpszClass) != 0)
{
printf("Error: dialog %ls for language %ls does not have the required class %d\n", pdecdlgEng->lpszTitle, szLocale, wClass);
return;
}
// warn on style diff
if (pdecdlgT->pdlg->style != style)
{
printf("Warning: dialog %ls for language %ls does have the required style 0x%x\n", pdecdlgEng->lpszTitle, szLocale, style);
}
}
// make sure all languages have the same items
for (int i = 0; i < citems; i++)
{
int id = pdecdlgEng->rgitems[i].pitem->id;
DWORD style = pdecdlgEng->rgitems[i].pitem->style;
WORD wClass = pdecdlgEng->rgitems[i].wClass;
for (int j = 1; j < iLocaleMac; j++)
{
wchar_t szLocale[25];
DLGITEMDECODE *pdecitem = &rgdecdlg[j].rgitems[i];
LCIDToLocaleName(rglcidInUse[j], szLocale, COUNTOF(szLocale), 0);
if (pdecitem->pitem->id != id)
{
printf("Error: dialog %ls for language %ls does not have the required item %d\n", pdecdlgEng->lpszTitle, szLocale, id);
break;
}
if (pdecitem->wClass != wClass)
{
printf("Error: dialog %ls item id %d for language %ls does have the required class %d\n", pdecdlgEng->lpszTitle, id, szLocale, wClass);
break;
}
// warn on style diff
if (pdecitem->pitem->style != style)
{
printf("Warning: dialog %ls item #%d, id %d for language %ls does have the required style 0x%x\n", pdecdlgEng->lpszTitle, i, id, szLocale, style);
}
}
}
}