преобразование пикселей в диалоговые единицы
Есть MDIChild-окно, на котором я размещаю некоторый диалог. Нужно, чтобы размер окна подстравался под размер диалога (и наоборот при изменении размера окна).
Получаю высоту заголовка и ширину рамок после чего изменяю размер MDIChild:
CRect rect;
int captionHeight = GetSystemMetrics(SM_CYCAPTION);
int borderHeight = GetSystemMetrics(SM_CXBORDER);
m_MultyDlg->GetWindowRect(rect);
ScreenToClient(&rect);
SetWindowPos(NULL, NULL, NULL,
rect.Width()+borderHeight*2,
rect.Height()+captionHeight+borderHeight,
SWP_NOMOVE|SWP_NOZORDER);
Как перевести captionHeight и borderHeight в диалоговые единицы? И еще вот вопросец - вышеописанное окно имеет неприятные бордеры. Тоесть как у блокнота, только вместо текста у меня диалог. Как решить эту проблему?
И вообще правильно-ли я делаю - использую диалоговые окна со своими классами, потом их вставляю в дочерние окна (CMDIChildWnd) и только после этого получаю приложение с MDI-интерфейсом. Хотелось-бы, чтобы диалоговые окна имели преимущетва MDI и в тоже время рисовать все ручками на CMDIChildWnd тоже не хочется...
Рисуй на CView субклассированых окнах.
Правда, есть ещё "точки на дюйм". Но это используется при выводе изображения в "реальных" единицах - см. мм. Для вывода на экран традиционно используется 96 "точек на дюйм".
Размер единицы измерения dialog unit можно получить при помощи функции GetDialogBaseUnits:
DWORD WINAPI GetDialogBaseUnits(void);
Младшее слово возвращаемого значения представляет собой ширину в пикселях диалоговой единицы длины, старшее - высоту.