Общая идея верна, но если вы передаете дескриптор окна, которое вы создаете как владелец, то оно еще не будет инициализировано.
Для диагностики рассмотрите возможность создания переменных для храненияфункция API возвращает значения и проверяет их в отладчике.
Также удобнее и менее подвержено ошибкам инициализировать структуру до нуля, вместо того, чтобы явно обнулять ненужные элементы, например:
OPENFILENAME ofn = { 0 };