Как использовать диалог в качестве основного окна приложенияВ некоторых случаях дилоговые окна можно использовать как главное окно приложения. При разработке такого приложения следует придерживаться следующих соглашений:
В качестве главного окна приложения можно
создавать как модальное, так и немодальное
диалоговое окно. При этом нет никакой
необходимости иметь перекрываемое окно, которое
выступает в роли владельца диалогового окна.
Память для окошек редактирования (edit controls)
созданных с флагом DS_LOCALEDIT, и статических
элементов управления будет браться из
динамической памяти (heap), которая представлена в
виде hInstance, переданной в вызов CreateDialog() или DialogBox(). Пример кода BOOL WINAPI GenericDlgProc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
RECT rect ;
switch (msg) {
case WM_INITDIALOG:
hIcon = LoadIcon(); // Загружаем иконку, которая будет отображена
// при минимизации.
return TRUE ;
case WM_ERASEBKGND:
if (IsIconic(hwnd) && hIcon) {
SendMessage( hwnd, WM_ICONERASEBKGND, wParam, 0L );
return TRUE;
}
break;
case WM_QUERYDRAGICON:
return (hIcon);
case WM_PAINT: {
PAINTSTRUCT ps;
BeginPaint( hwnd, &ps );
if (IsIconic(hwnd)) //*** Если свёрнуто в иконку,
// то рисуем иконку.
{
if (hIcon) {
//правильно центрируем иконку...
GetClientRect(hwnd, &rect) ;
rect.left = (rect.right - GetSystemMetrics(SM_CXICON))
>> 1;
rect.top = (rect.bottom - GetSystemMetrics(SM_CYICON))
>> 1;
DrawIcon( ps.hdc, rect.left, rect.top, hIcon );
}
}
EndPaint( hwnd, &ps );
}
break;
}
return FALSE;
} //*** GenericDlgProc
Вышеприведённый пример предполагает, что диалоговое окно принадлежит предопределённому классу диалога. Для private классов диалога нет необходимости вручную рисовать иконку при минимизации. Можно указать иконку при регистрации класса диалога. Незабудьте установить поле cbWndExtra в DLGWINDOWEXTRA. При минимизации диалога, иконка будет нарисована автоматически.
|