Как и другие уже упомянутые ответы, Observable еще не определена в конструкторе. Конструктор должен использоваться только для DI или присвоений imho.
Я бы предложил не передавать наблюдаемое как входные данные вашим дочерним компонентам, а передавать его как «просто» массив. Это сделает ваше приложение быстрее, проще в работе и проще в тестировании. Чтобы передать его как массив, используйте канал async
.
<pv-family-list [planMembers]="planMembers$ | async"><pv-family-list/>
[РЕДАКТИРОВАНИЕ, после того, как перечитано] я почти положителен, что изменение на "Большие шрифты" не вызывает изменение DPI, скорее это - установка темы. Необходимо смочь проверить путем применения "Больших шрифтов" изменение и затем открытия усовершенствованных свойств дисплея, где установка DPI живет, это должно было остаться на уровне 96 точек на дюйм.
Возможно, попытайтесь изменить non-reboot-requiring настройки (разрешение, возможно) и затем посмотрите, можно ли обнаружить изменение. Если Вы можете, Ваш ответ быть, вероятно, что Вы не можете обнаружить изменение DPI до окончания перезагрузки.
При вызове GetDeviceCaps () на Настольном DC Вы, возможно, используете DC, который мог бы кэшироваться MFC и поэтому содержит устаревшую информацию? Вы делаете GetDeviceCaps () вызовом синхронно из Вашего обработчика OnSettingsChange? Я видел, как или или обе из этих вещей мог бы получить Вас устаревшее версия DPI.
Raymond Chen записал об этом, и его решение было похоже на это (Обратите внимание, что я добавил:: операторы, чтобы не называть обертки MFC API):
int GetScreenDPI()
{
HDC hdcScreen = ::GetDC(NULL);
int iDPI = -1; // assume failure
if (hdcScreen) {
iDPI = ::GetDeviceCaps(hdcScreen, LOGPIXELSX);
::ReleaseDC(NULL, hdcScreen);
}
return iDPI;
}
У меня есть догадка, WM_THEMECHANGED будет заботиться о Вас. Это не имеет никакого вывода подсказок о том, что изменилось, все же. Необходимо будет использовать OpenThemeData и начальные установки кэша, затем выдержать сравнение каждый раз, когда Вы получаете сообщение.
Вы, вероятно, не должны заботиться о том, что изменилось, хотя, разве у Вас не может быть стандартной программы расположения общего назначения, которая корректирует Ваш form/dialog/whatever путем принятия всего во внимание и принимает запуск с нуля?
Какую проблему Вы пытаетесь решить?
См. http://msdn.microsoft.com/en-us/library/ms701681 (По сравнению с 85) .aspx, это объяснено там (кавычка: "Если Вы не отменяете масштабирование точек на дюйм, этот вызов возвращает значение по умолчанию 96 точек на дюйм".)
Я не думаю дисплей изменения DPI, когда размер шрифта изменяется. Windows, вероятно, просто отправляет WM_PAINT
и WM_NCPAINT
сообщения ко всем открытым окнам, и они перерисовывают себя с помощью тока (теперь большой) системный шрифт.
Посмотрите на эти значения в реестре:
Тема Windows XP HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ ThemeManager \ SizeName Возможные значения: NormalSize, LargeFonts и ExtraLargeFonts. Эти значения не зависят от языка .
Классическая тема Windows HKCU \ Панель управления \ Внешний вид \ Текущий Возможные значения: Windows Classic, Windows Classic (большой), Windows Classic (очень большой), Windows Standard, Windows Standard (большой), Windows Standard (очень большой). Обратите внимание, что эти значения зависят от языка .
Windows Vista не поддерживает эту функцию. Если нам нужен более крупный шрифт, просто измените параметр DPI. В этом случае GetDeviceCaps должен работать.
Надеюсь, это поможет.