Решил задачу. Раньше было так:
Создавал окно, получал контекст устройства так:
CDC *pDC = GetDC();
и в него рисовал. Не работает, если монитор не подключен. Если подключен монитор, то все в порядке. Правда, нюанс — окно создавалось со свойством WS_VISIBLE. Вряд ли это влияло, но ладно — убрал это свойство.
Теперь сделал так:
// Получаю в окне указатель на контекст устройства
CDC *pDC1 = GetDC();
// Создаем контекст памяти
CMemDC memDC(*pDC, this);
CDC *pDC2 = memDC.GetDC();
И уже в pDC2 рисую. Все работает, не зависимо от того включен монитор или нет.