Я только начинаю экспериментировать с win32 и столкнулся с проблемой.
BOOL CALLBACK UnsavedChangesProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HWND dHandle = GetActiveWindow();
switch (msg)
{
case WM_INITDIALOG:
MessageBox(NULL, "In InitDialog", 0, 0);
SetDlgItemText(dHandle, 1004, ("There are unsaved changes to \""));
char error[10];
sprintf_s(error, "%d", GetLastError());
MessageBox(NULL, error, 0, 0);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDSAVE:
DoFileSave(hwnd);
EndDialog(hwnd, TRUE);
PostQuitMessage(0);
break;
case IDEXIT:
EndDialog(hwnd, TRUE);
PostQuitMessage(0);
break;
}
break;
case WM_CLOSE:
EndDialog(hwnd, FALSE);
break;
default:
return FALSE;
}
return TRUE;
}
GetLastError () возвращает 1421, идентификатор элемента управления не найден, но идентификатор (1004) определенно соответствуетна статический контроль я пытаюсь изменить.Я также попытался вызвать функцию с именем элемента управления (IDC_STATIC_UNSAVED), но безуспешно.Странная часть в том, что если я переместу вызов функции туда, где объявлен dHandle (или избавлюсь от dHandle и просто вызову GetActiveWindow () внутри функции), текст изменится, но он будет мерцать, потому что функция вызывается каждый раз, когда сообщениецикл повторяется.
Есть ли простая причина, по которой это не должно работать, что я пропускаю?Любая помощь будет оценена.
Редактировать: Вот изображение символов ресурсов: Символы ресурсов А вот изображение шаблона диалога: Шаблон диалога Примечаниечто все остальные элементы управления работают должным образом.