Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Julia_Mit
1 / 1 / 0
Регистрация: 19.04.2015
Сообщений: 45
1

Установка координат в файле ресурсов

24.04.2015, 21:20. Просмотров 892. Ответов 2
Метки нет (Все метки)

Всем здрасти! Подскажите пожалуйста, как сделать задуманное. Хочу, чтобы диалоговое окно создавалось (размещалось) посередине моего основного окна, как рассчитать и задать эти параметры в файле ресурса?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2015, 21:20
Ответы с готовыми решениями:

Работа в файле ресурсов
Всем доброго времени суток! есть такая проблемка: есть код в файле ресурсов...

Изменение ресурсов в файле .exe .dll
Не знаю есть ли кто ни будь понимающий, но задам вопрос. Потратил много времени...

Как сделать меню для окна в файле ресурсов?
Добрый вечер! Как сделать меню для окна в файле ресурсов? Целый день бьюсь,...

Установка ресурсов от строки
Есть у меня главное активити: public class MainActivity extends...

Ошибка в файле ресурсов
Имеем следующий файл ресурсов: #define IDD_DLG1 1000 #define IDC_BTN1 1001...

2
zenden2k
43 / 28 / 12
Регистрация: 21.04.2015
Сообщений: 82
24.04.2015, 23:33 2
Лучший ответ Сообщение было отмечено Julia_Mit как решение

Решение

В файле ресурса никак нельзя. Можно только посередине экрана (в параметрах диалога свойство Center=True или DS_CENTER).

В MFC/WTL это делается легко:
C++
1
dialog.CenterWindow(parent);
Вот вам функция CenterWindow, выдранная из atlwin.h:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
BOOL CenterWindow(HWND m_hWnd, _Inout_opt_ HWND hWndCenter = NULL)
    {
        ATLASSERT(::IsWindow(m_hWnd));
 
        // determine owner window to center against
        DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE);
        if(hWndCenter == NULL)
        {
            if(dwStyle & WS_CHILD)
                hWndCenter = ::GetParent(m_hWnd);
            else
                hWndCenter = ::GetWindow(m_hWnd, GW_OWNER);
        }
 
        // get coordinates of the window relative to its parent
        RECT rcDlg;
        ::GetWindowRect(m_hWnd, &rcDlg);
        RECT rcArea;
        RECT rcCenter;
        HWND hWndParent;
        if(!(dwStyle & WS_CHILD))
        {
            // don't center against invisible or minimized windows
            if(hWndCenter != NULL)
            {
                DWORD dwStyleCenter = ::GetWindowLong(hWndCenter, GWL_STYLE);
                if(!(dwStyleCenter & WS_VISIBLE) || (dwStyleCenter & WS_MINIMIZE))
                    hWndCenter = NULL;
            }
 
            // center within screen coordinates
            HMONITOR hMonitor = NULL;
            if(hWndCenter != NULL)
            {
                hMonitor = ::MonitorFromWindow(hWndCenter, MONITOR_DEFAULTTONEAREST);
            }
            else
            {
                hMonitor = ::MonitorFromWindow(m_hWnd, MONITOR_DEFAULTTONEAREST);
            }
            ATLENSURE_RETURN_VAL(hMonitor != NULL, FALSE);
 
            MONITORINFO minfo;
            minfo.cbSize = sizeof(MONITORINFO);
            BOOL bResult = ::GetMonitorInfo(hMonitor, &minfo);
            ATLENSURE_RETURN_VAL(bResult, FALSE);
 
            rcArea = minfo.rcWork;
 
            if(hWndCenter == NULL)
                rcCenter = rcArea;
            else
                ::GetWindowRect(hWndCenter, &rcCenter);
        }
        else
        {
            // center within parent client coordinates
            hWndParent = ::GetParent(m_hWnd);
            ATLASSERT(::IsWindow(hWndParent));
 
            ::GetClientRect(hWndParent, &rcArea);
            ATLASSERT(::IsWindow(hWndCenter));
            ::GetClientRect(hWndCenter, &rcCenter);
            ::MapWindowPoints(hWndCenter, hWndParent, (POINT*)&rcCenter, 2);
        }
 
        int DlgWidth = rcDlg.right - rcDlg.left;
        int DlgHeight = rcDlg.bottom - rcDlg.top;
 
        // find dialog's upper left based on rcCenter
        int xLeft = (rcCenter.left + rcCenter.right) / 2 - DlgWidth / 2;
        int yTop = (rcCenter.top + rcCenter.bottom) / 2 - DlgHeight / 2;
 
        // if the dialog is outside the screen, move it inside
        if(xLeft + DlgWidth > rcArea.right)
            xLeft = rcArea.right - DlgWidth;
        if(xLeft < rcArea.left)
            xLeft = rcArea.left;
 
        if(yTop + DlgHeight > rcArea.bottom)
            yTop = rcArea.bottom - DlgHeight;
        if(yTop < rcArea.top)
            yTop = rcArea.top;
 
        // map screen coordinates to child coordinates
        return ::SetWindowPos(m_hWnd, NULL, xLeft, yTop, -1, -1,
            SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
    }
0
Digit@ll
Brainsbreaker
888 / 366 / 51
Регистрация: 01.02.2011
Сообщений: 1,586
24.04.2015, 23:47 3
zenden2k, тоже только что искал и уже думал, что нельзя. Именно там, как ты написал и можно: Center = False, внизу искомые координаты X, Y. И понятное дело, что основное окно тогда должно быть не масштабируемым.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2015, 23:47

Получить информацию о файле из ресурсов
В ресурсах программы лежит exe. Извлекаю его так:...

Описание диалогового окна в файле ресурсов
Я прохожу щас тему в Win32 описание диалоговых окон и вот компилятор dewcpp...

Установка координат курсора
Подскажите, пожалуйста, каким образом можно установить координаты указателя...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru