· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Как разместить окно по центру?

Посл.отвђт Сообщенiе


Дата: Авг 21, 2003 16:31:34

Подскажите пожалуйста простой способ как разместить окно в центре экрана или как узнать разрешение экрана.


Дата: Авг 21, 2003 17:08:03

void CenterWindow(HWND hwnd_parent, HWND hwnd_child)
{
RECT ChildRect, ParentRect;
POINT pt;
int nWidth, nHeight;
GetWindowRect(hwnd_child, &ChildRect);
GetWindowRect(hwnd_parent, &ParentRect);
nWidth = ChildRect.right - ChildRect.left;
nHeight = ChildRect.bottom - ChildRect.top;
pt.x = (ParentRect.right - ParentRect.left)/2;
pt.y = (ParentRect.bottom - ParentRect.top)/2;
ClientToScreen(hwnd_parent, &pt);
pt.x -= nWidth/2;
pt.y -= nHeight/2;
MoveWindow(hwnd_child, pt.x, pt.y, nWidth, nHeight, FALSE);
}

А потом CenterWindow(GetDesktopWindow(), hwnd);


Дата: Авг 21, 2003 17:09:31

profi_r
Размеры экрана можно узнать при помощи функции Возвращающей метрики системы.
А как по центур разместить :)) Это уже вопрос математики :)


Дата: Авг 21, 2003 17:21:38

А я так и подумал. Просто вдруг есть более простой способ или свойство у окна...

.ELSEIF uMsg == WM_CREATE
;center window
invoke GetSystemMetrics,SM_CXFULLSCREEN
shr eax,1
mov ecx,WinSX
shr ecx,1
sub eax,ecx
mov wrect.left,eax
invoke GetSystemMetrics,SM_CYFULLSCREEN
shr eax,1
mov ecx,WinSY
shr ecx,1
sub eax,ecx
invoke MoveWindow,hWnd,wrect.left,eax,WinSX,WinSY,TRUE


Дата: Авг 22, 2003 02:15:04

profi_r
или свойство у окна
Есть, конечно! DS_CENTER, но только для диалоговых шаблонов.


Дата: Авг 22, 2003 11:23:53

Вот, пожалуй самый простой способ узнать разрешение экрана и расположить окно по центру:

.data
WndX dd 640 ;здесь должны быть размеры
WndY dd 480 ;вашего окна

.data?
rcScreen RECT<>
hWnd dd ?

.code
invoke GetDesktopWindow
invoke GetClientRect,eax,offset rcScreen

;вот в структуре RECT в полях right и bottom находятся
;соответственно ширина и высота экрана

mov eax,rcScreen.right ;получаем размеры
mov edx,rcScreen.bottom
sub eax,WndX ;получаем разницу между размерами окна
sub edx,WndY ;и размерами экрана
shr eax,1 ;делим всё на 2
shr edx,1

;в eax и edx мы получили координаты верхней левой точки
;окна. Теперь передаём всё в MoveWindow

invoke MoveWindow,hWnd,eax,edx,WndX,WndY,TRUE


Дата: Авг 22, 2003 13:24:05

Спасибо SolidCode - так конечно лучше, еще + :

invoke CreateWindowEx, ... eax, edx, WinSX, WinSY, ...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066