Форум программистов, компьютерный форум CyberForum.ru

GetWindowRect() Почему возвращается не тот размер окна? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
returnless
25 / 25 / 3
Регистрация: 05.08.2012
Сообщений: 83
03.09.2012, 18:55     GetWindowRect() Почему возвращается не тот размер окна? #1
почему возвращается не тот размер окна что я задавал ранее? 800х600 задавал 806х625 вернула ф-я.
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int GetWidth() 
    {
        RECT r;
        GetWindowRect(WindowHandle, &r);
        return r.right - r.left;
    };
 
    int GetHeight() 
    {
        RECT r;
        GetWindowRect(WindowHandle,&r);
        return r.bottom - r.top;    
    };
окно создается так
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
GameWindow :: GameWindow()
{
 
        const char* ClassName = "GameWindowClass";
        const char* WindowTitle = "GameWindow";
        const int Width = 800;
        const int Height = 600;
 
        HINSTANCE m_hInstance = GetModuleHandle(NULL);
 
        SelfWindow = this;
        WNDCLASSEX wc = {   sizeof(wc), CS_OWNDC | CS_HREDRAW | CS_VREDRAW,
                            WndProc, 0, 0, m_hInstance, NULL, NULL, NULL, NULL, ClassName, NULL };
 
        RegisterClassEx(&wc);
 
        int x = (GetSystemMetrics(SM_CXSCREEN) - Width)  / 2;
        int y = (GetSystemMetrics(SM_CYSCREEN) - Height) / 2;
 
        RECT rc;
        rc.left                 = x;
        rc.right                = x + Width;
        rc.top                  = y;
        rc.bottom               = y + Height;
 
        int Style       = WS_CAPTION | WS_MINIMIZEBOX; // | WS_SYSMENU
        int ExStyle     = WS_EX_APPWINDOW;
 
        AdjustWindowRectEx (&rc, Style, FALSE, ExStyle);
 
        WindowHandle = CreateWindowEx ( ExStyle, ClassName, WindowTitle, Style,
                                        rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top,
                                        NULL, NULL, m_hInstance, NULL);
 
        ShowWindow ( WindowHandle, SW_SHOWDEFAULT );
        SetForegroundWindow ( WindowHandle );
        SetFocus ( WindowHandle );
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2012, 18:55     GetWindowRect() Почему возвращается не тот размер окна?
Посмотрите здесь:

C++ Размер окна
C++ Размер DOS-окна
Размер окна C++
Почему не возвращается значение через указатель из метода класса? C++
C++ Почему перегруженные шаблоны функций должны возвращать один и тот же тип?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
03.09.2012, 18:59     GetWindowRect() Почему возвращается не тот размер окна? #2
попробуй менять экран и мерять его
*W=GetSystemMetrics(SM_CXSCREEN);
*H=GetSystemMetrics(SM_CYSCREEN);
returnless
25 / 25 / 3
Регистрация: 05.08.2012
Сообщений: 83
03.09.2012, 19:10  [ТС]     GetWindowRect() Почему возвращается не тот размер окна? #3
попробуй менять экран и мерять его
*W=GetSystemMetrics(SM_CXSCREEN);
*H=GetSystemMetrics(SM_CYSCREEN);
w=1600
h = 900
это размеры текущего видео режима экрана к окну это не имеет отношения. ктому же я не меняю видео режим, просто окно создаю и там все рисую.

мне для перспективной матрицы нужны текущие размеры окна
C++
1
2
3
4
5
6
7
8
9
            //perspective = GLPerspectiveProjection(60.0f, 1.33f, 0.1f, 100.0f);
            perspective = GLOrthographicProjection(0, GetWidth() , 0, GetHeight(), 0,100);
            //perspective = Matrix4D_Identity;
            xcenter = GetWidth() /2;
            ycenter = GetHeight() /2;
            
            glMatrixMode(GL_PROJECTION_MATRIX);
            perspective = transpose(perspective);
            glLoadMatrixf( (float*) &perspective);
а ф-ии фигней страдают( вот, от куда 806 и 625 берутся Оо?
returnless
25 / 25 / 3
Регистрация: 05.08.2012
Сообщений: 83
03.09.2012, 19:45  [ТС]     GetWindowRect() Почему возвращается не тот размер окна? #4
обнаружилась засада.
В любом окне для Win32 имеется понятие о двух областях. Первая область - это область всего окна. Во всю область окна входит клиентская часть и не клиентская часть. Заголовок окна, строка меню, меню окна, минимизирующие и максимизирущие кнопки, границы являются неклиентской областью.
поправил теперь норм.
Изображения
 
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1787
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
03.09.2012, 21:37     GetWindowRect() Почему возвращается не тот размер окна? #5
GetClientRect(&rc) возвращает размер клиентской части окна
(rc.right - ширина, rc.bottom - высота).
GetWindowRect(&rc) возвращает координаты всего окна
(rc.top,rc.left)-левая верхняя точка,
(rc.bottom,rc.right)-правая нижняя точка.

Вопрос: А как теперь получить координаты клиентской части?
returnless
25 / 25 / 3
Регистрация: 05.08.2012
Сообщений: 83
04.09.2012, 05:08  [ТС]     GetWindowRect() Почему возвращается не тот размер окна? #6
>А как теперь получить координаты клиентской части?
Отправить запрос в саппорт майкрософта пускай разродятся координатами.

Не по теме:

ну или повычитать структуры друг из друга

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2012, 10:29     GetWindowRect() Почему возвращается не тот размер окна?
Еще ссылки по теме:

C++ Почему вызывается не тот метод?
Почему в функцию можно передавать аргументы с амперсандом или без него и результат тот же самый? C++
C++ Почему авторы диалоговых окон стараются сделать свои окна максимально похожими на стандартные окна?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1787
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
04.09.2012, 10:29     GetWindowRect() Почему возвращается не тот размер окна? #7
Цитата Сообщение от returnless Посмотреть сообщение
повычитать структуры друг из друга
Не получится. Поскольку они в разных координатах.
Первый - в относительных, второй - в абсолютных.
Тупой способ известен - узнать размер заголовка, тулбара и т.д.
и только потом повычитать. Но уж очень геморройно....
Yandex
Объявления
04.09.2012, 10:29     GetWindowRect() Почему возвращается не тот размер окна?
Ответ Создать тему
Опции темы

Текущее время: 13:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru