Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Michail97
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 384

Невидимое временное окно разместить по центру окна

27.11.2017, 22:20. Показов 3566. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, не могу понять 2 вещи.
1. Как сделать так чтобы окно было невидимым( понятное дело при первом вызове можно не вызывать функцию ShoWwindow, однако по условию требуется по нажатию правой кнопки мыши, чтоб оно снова стало невидимым.
2. Как разместить окно по центру окна и чтобы оно не меняло своё положение при перерисовке. При сообщении WM_MOVE всё логично, но при WM_SIZE я чего-то не понимаю.
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
89
90
91
92
93
94
95
96
97
98
99
100
/*
Задание №7
в центре рабочей области окна располагается невидимое окно без заголовка размеров в 1/4 площади
рабочей области. После нажатия левой кнопки мыши над рабочей областью любого из окон окно без заголовка
должно стать видимым, а после нажатия правой невидимым.*/
#include <windows.h>
/*------------------------------------*/
HINSTANCE hInst = NULL;
LPCTSTR lpszMainClass = "MainClass";
LPCTSTR lpszPoppupClass = "PoppupClass";
LPCSTR  Caption = "Assignment_7";
 HWND hwnd[4];//
/*------------------------------------*/
BOOL RegClass( WNDPROC, LPCSTR, UINT );
/*------------------------------------------------------*/
LRESULT CALLBACK MainProc( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK PoppupProc( HWND, UINT, WPARAM, LPARAM );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow )
{
    hInst = hInstance;
    HWND hWnd = NULL;
    MSG message;
    if (!RegClass( MainProc, lpszMainClass, COLOR_3DHIGHLIGHT ))
        return FALSE;
    if (!RegClass( PoppupProc, lpszPoppupClass, COLOR_DESKTOP ))
        return FALSE;
    if( ( hWnd = CreateWindow( lpszMainClass, Caption, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL  )) == NULL )
        return FALSE;
    ShowWindow( hWnd, nCmdShow );
    while( GetMessage( &message, NULL, 0, 0 ) )
    {
        DispatchMessage( &message );
    }
    return message.wParam;
}
 
BOOL RegClass( WNDPROC proc,  LPCSTR lpszClassName , UINT  hbrBackGround )
{
   WNDCLASS class_new;
   class_new.cbClsExtra = class_new.cbWndExtra = 0;
   class_new.hbrBackground = ( HBRUSH )( hbrBackGround + 1 );
   class_new.hCursor = LoadCursor( NULL, IDC_ARROW );
   class_new.hIcon = LoadIcon( NULL, IDI_APPLICATION );
   class_new.hInstance = hInst;
   class_new.lpfnWndProc = proc;
   class_new.lpszClassName = lpszClassName;
   class_new.lpszMenuName = NULL;
   class_new.style = CS_VREDRAW | CS_HREDRAW;
   return (  RegisterClass( &class_new) != 0 );
}
LRESULT CALLBACK MainProc( HWND hWnd, UINT messages,
                         WPARAM wParam, LPARAM lParam)
{
    static short x, y,  cx, cy, width, height;
    static  HWND hwndPoppup;
    switch ( messages )
    {
    case WM_CREATE:
    {
        if( ( hwndPoppup = CreateWindow( lpszPoppupClass, Caption, WS_POPUPWINDOW | WS_VISIBLE, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, hWnd, NULL, hInst, NULL  )) == NULL )
                MessageBox( hWnd, "Не удалось создать временное окно", "Ошибка", MB_OK | MB_ICONSTOP );
 
        return 0;
    }
    case WM_MOVE:
        {
            x = LOWORD( lParam );
            y = HIWORD( lParam );
            x += cx/4;
            y += cy/4;
            if( IsWindow( hwndPoppup))
                MoveWindow(hwndPoppup, x, y, width, height, TRUE  );
            return 0;
        }
    case WM_SIZE:
        {
 
            cx = LOWORD( lParam );
            cy = HIWORD( lParam );
            width = cx/2;
            height = cy/2;
            if( IsWindow( hwndPoppup))
                MoveWindow(hwndPoppup, x, y, width, height, TRUE  );
            return 0;
        }
    case WM_DESTROY:
        {
        PostQuitMessage(0);
        return 0;
        }
    }
    return DefWindowProc(hWnd, messages, wParam, lParam);
}
LRESULT CALLBACK PoppupProc( HWND hWnd, UINT messages, WPARAM wParam, LPARAM lParam )
{
 
    return DefWindowProc( hWnd, messages, wParam, lParam );
 
 
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2017, 22:20
Ответы с готовыми решениями:

Главное окно скрыто... как развернуть все Второстепенные окна после сворачивания(разворачивается только главное невидимое
Главное окно скрыто... как развернуть все Второстепенные окна после сворачивания(разворачивается только главное невидимое)) ) и как можно...

Свёрнутое окно по центру окна
Центр рабочей области окна занимает временное окно размером в 1/4S области в свёрнутом состоянии. После нажатия левой клавиши мыши нд...

невидимое окно и код
мне нужно чтобы окно программы было невидимое и при этом проверила файл по пути 'C/Windows/pb.exe(читы свои хочу делать и чтобы переслать...

2
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
28.11.2017, 12:05
Лучший ответ Сообщение было отмечено Michail97 как решение

Решение

Цитата Сообщение от Michail97 Посмотреть сообщение
Как разместить окно по центру окна и чтобы оно не меняло своё положение при перерисовке.
C++
1
2
3
4
5
HWND hWnd = CreateWindow(wc.lpszClassName, "Test",
    WS_SYSMENU | WS_MINIMIZEBOX,
    (GetSystemMetrics(SM_CXSCREEN) - 1024) / 2,
    (GetSystemMetrics(SM_CYSCREEN) - 576) / 2,
1024, 576, nullptr, nullptr, hInstance, 0);
1
 Аватар для Michail97
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 384
28.11.2017, 13:17  [ТС]
_lunar_, видимо, вы меня неправильно поняли. Я не имею в виду окно рабочего стола, а обычное перекрывающееся окно, по центру которого должно располагаться временное окно, и не изменять своего положения при перемещении перекрывающегося окна

Добавлено через 38 минут
_lunar_, проблему центра решил осталось только понять, как его делать невидимым и видимым
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
case WM_MOVE:
        {
            x = LOWORD( lParam );
            y = HIWORD( lParam );
            if( IsWindow( hwndPoppup))
                MoveWindow(hwndPoppup, x + cx/4, y + cy/4, width, height, TRUE  );
            return 0;
        }
    case WM_SIZE:
        {
 
            cx = LOWORD( lParam );
            cy = HIWORD( lParam );
            width = cx/2;
            height = cy/2;
 
 
            /*char buff[100];
            sprintf( buff, "[%hd][%hd][%hd][%hd]", x, y, width, height );
            MessageBox( NULL, buff, "Сведения", MB_OK );*/
            if( IsWindow( hwndPoppup))
                MoveWindow(hwndPoppup, x + cx/4, y + cy/4, width, height, TRUE  );
 
            return 0;
        }
Добавлено через 26 минут
_lunar_, вроде работает, делал быстро: времени в обрез. Посмотрите, если что изменить
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
Задание №7
в центре рабочей области окна располагается невидимое окно без заголовка размеров в 1/4 площади
рабочей области. После нажатия левой кнопки мыши над рабочей областью любого из окон окно без заголовка
должно стать видимым, а после нажатия правой невидимым.*/
#include <windows.h>
#include <stdio.h>
/*------------------------------------*/
HINSTANCE hInst = NULL;
LPCTSTR lpszMainClass = "MainClass";
LPCTSTR lpszPoppupClass = "PoppupClass";
LPCSTR  Caption = "Assignment_7";
 HWND hwnd[4];//
/*------------------------------------*/
BOOL RegClass( WNDPROC, LPCSTR, UINT );
/*------------------------------------------------------*/
LRESULT CALLBACK MainProc( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK PoppupProc( HWND, UINT, WPARAM, LPARAM );
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow )
{
    hInst = hInstance;
    HWND hWnd = NULL;
    MSG message;
    if (!RegClass( MainProc, lpszMainClass, COLOR_3DHIGHLIGHT ))
        return FALSE;
    if (!RegClass( PoppupProc, lpszPoppupClass, COLOR_DESKTOP ))
        return FALSE;
    if( ( hWnd = CreateWindow( lpszMainClass, Caption, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInst, NULL  )) == NULL )
        return FALSE;
    ShowWindow( hWnd, nCmdShow );
    while( GetMessage( &message, NULL, 0, 0 ) )
    {
        DispatchMessage( &message );
    }
    return message.wParam;
}
 
BOOL RegClass( WNDPROC proc,  LPCSTR lpszClassName , UINT  hbrBackGround )
{
   WNDCLASS class_new;
   class_new.cbClsExtra = class_new.cbWndExtra = 0;
   class_new.hbrBackground = ( HBRUSH )( hbrBackGround + 1 );
   class_new.hCursor = LoadCursor( NULL, IDC_ARROW );
   class_new.hIcon = LoadIcon( NULL, IDI_APPLICATION );
   class_new.hInstance = hInst;
   class_new.lpfnWndProc = proc;
   class_new.lpszClassName = lpszClassName;
   class_new.lpszMenuName = NULL;
   class_new.style = CS_VREDRAW | CS_HREDRAW;
   return (  RegisterClass( &class_new) != 0 );
}
LRESULT CALLBACK MainProc( HWND hWnd, UINT messages,
                         WPARAM wParam, LPARAM lParam)
{
    static short x, y,  cx, cy, width, height;
    static  HWND hwndPoppup;
    switch ( messages )
    {
    case WM_CREATE:
    {
        if( ( hwndPoppup = CreateWindow( lpszPoppupClass, Caption, WS_POPUPWINDOW , CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, hWnd, NULL, hInst, NULL  )) == NULL )
                MessageBox( hWnd, "Не удалось создать временное окно", "Ошибка", MB_OK | MB_ICONSTOP );
 
        return 0;
    }
    case WM_MOVE:
        {
            x = LOWORD( lParam );
            y = HIWORD( lParam );
            if( IsWindow( hwndPoppup))
                MoveWindow(hwndPoppup, x + cx/4, y + cy/4, width, height, TRUE  );
            return 0;
        }
    case WM_SIZE:
        {
 
            cx = LOWORD( lParam );
            cy = HIWORD( lParam );
            width = cx/2;
            height = cy/2;
            /*char buff[100];
            sprintf( buff, "[%hd][%hd][%hd][%hd]", x, y, width, height );
            MessageBox( NULL, buff, "Сведения", MB_OK );*/
            if( IsWindow( hwndPoppup))
                MoveWindow(hwndPoppup, x + cx/4, y + cy/4, width, height, TRUE  );
 
            return 0;
        }
    case WM_LBUTTONDOWN:
        {
 
            SetWindowPos( hwndPoppup, HWND_BOTTOM,  x + cx/4, y + cy/4, width, height, SWP_SHOWWINDOW );
            return 0;
        }
     case WM_RBUTTONDOWN:
        {
            SetWindowPos( hwndPoppup, HWND_TOP, x + cx/4, x + cx/4, width, height, SWP_HIDEWINDOW );
            return 0;
        }
    case WM_DESTROY:
        {
        PostQuitMessage(0);
        return 0;
        }
    }
    return DefWindowProc(hWnd, messages, wParam, lParam);
}
LRESULT CALLBACK PoppupProc( HWND hWnd, UINT messages, WPARAM wParam, LPARAM lParam )
{
 
    switch( messages )
    {
 
    case WM_RBUTTONDOWN:
        {
            SetWindowPos( hWnd, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW  | SWP_NOMOVE | SWP_NOSIZE );
            return 0;
        }
        default: return DefWindowProc( hWnd, messages, wParam, lParam );
    }
 
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2017, 13:17
Помогаю со студенческими работами здесь

Постоянно переключается на невидимое окно
Установлена программа онлайн консультант Jivosite, при автозапуске(когда включается windows) она сразу же открывает дополнительное...

Как открыть невидимое окно?
Доброго времени суток, перешел с WinForms на wpf и столкнулся с проблемой. Как в wpf открыть скрытое окно? В формах было...

Окно WPF, невидимое при скриншоте
Здравствуйте. Существует ли возможность сделать так, чтобы определенное wpf окно было невидимым на скриншоте экрана, также как не видно...

Как создать невидимое окно на главной странице???
Использую шаблон FullScreen 3, фишка шаблона в том, что фоном сайта используются фотографии, поверх которых размещаются окна (страницы)...

Как сделать окно невидимое при подключении dll к проекту?
Всем привет. В шапке наверное неудачно написал, но сейчас разъясню вопрос. Делаю вспомогательную библиотеку. Мне нужно в ней реализовать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru