Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336

Выбор области на рабочем столе

31.05.2019, 10:16. Показов 1798. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Появилась у меня задача, сделать выбор области на рабочем столе.
Появились идеи, но требуется совет, что-бы впустую не потратить времени.

1) Сделать классическое окно, и при перемещении окна, транслировать картинку под нём в окно, появился бы эффект прозрачности.

2) Обрезать регионами окно, что-бы было видно что под нём.

Что лучше сделать? Или предложите свою идею.

И ещё сразу вопрос по снятии стандартных рамок. Кто что делает?

Делал так
C++
1
SetWindowLongPtr(hSelectAreaWindow, GWL_STYLE, GetWindowLongPtr(hSelectAreaWindow, GWL_STYLE) || WS_CAPTION || WS_SYSMENU);
Но почему-то, бывают такие моменты, иногда они не снимаются ... но это очень редко, и не при подвисании окна.

Переписывал ещё такие сообщения
C++
1
2
3
4
5
6
7
8
9
    case WM_NCCALCSIZE:
    case WM_NCPAINT:
    case WM_PRINT:
    case WM_PRINTCLIENT:
    case WM_NCACTIVATE:
        return 0;
 
    case WM_NCHITTEST:
        return HTCLIENT;
Но (всегда это НО :-) ) сверху почему-то остаётся закругление.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2019, 10:16
Ответы с готовыми решениями:

Распознавание окон на рабочем столе
Необходимо написать программу, которая в Виндовсе обнаруживает все окна панели, содержимое рабочего стола, количество и их тип, и выдаёт...

Список существующих окон на рабочем столе
Используя функции WINAPI создать приложение, которое выводит список всех существующих на рабочем столе окон (их заголовки). Функции: ...

Запустить прогу на другом рабочем столе
Здравствуйте! Как запустить программу на другом рабочем столе. Вот сдесь что прописывать Si.lpDesktop="default"; Запустил...

25
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
31.05.2019, 23:30
простите, не понял суть вопроса. но если вы хотите сделать окно полупрозрачным, то почему лучше не использовать SetLayeredWindowAttributes или UpdateLayeredWindow.
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
31.05.2019, 23:35  [ТС]
Если я правильно помню, SetLayeredWindowAttributes сделает всё окно + все дочерние окна прозрачными, что для меня не есть хорошо.
А мне нужно сделать только часть окна прозрачной (что-то типа как в bandicam, при выборе области съёмки).
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
31.05.2019, 23:43
Цитата Сообщение от fastb1t Посмотреть сообщение
А мне нужно сделать только часть окна прозрачной
под этим вы понимаете полную прозрачность?
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
31.05.2019, 23:46  [ТС]
Цитата Сообщение от beep7433 Посмотреть сообщение
под этим вы понимаете полную прозрачность?
Ну да.
ТО есть что-бы добиться некой рамки.
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
31.05.2019, 23:47
если я не путаю, SetLayeredWindowAttributes то что вам нужно


crKey

Type: COLORREF

A COLORREF structure that specifies the transparency color key to be used when composing the layered window. All pixels painted by the window in this color will be transparent. To generate a COLORREF, use the RGB macro.
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
31.05.2019, 23:48  [ТС]
beep7433, а что можете посоветовать о
Цитата Сообщение от fastb1t Посмотреть сообщение
по снятии стандартных рамок
как правильнее это делается?
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
31.05.2019, 23:49
Цитата Сообщение от fastb1t Посмотреть сообщение
по снятии стандартных рамок
убрать заголовок окна?
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
31.05.2019, 23:51  [ТС]
Цитата Сообщение от beep7433 Посмотреть сообщение
убрать заголовок окна?
не только заголовок, а полностью всю рамку
то есть оставить только рабочую область окна.

Добавлено через 20 секунд
см. первый пост
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
31.05.2019, 23:53
при создании окна установкой нужного стиля
https://docs.microsoft.com/en-... dow-styles

Стили окна
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 00:02  [ТС]
опять вокруг да около ...
Цитата Сообщение от fastb1t Посмотреть сообщение
см. первый пост
рамка снимается, но иногда появляется стандартная рамка (которая должна появляться при подвисании окна)
это если стили снять нужные перед показом окна, после создания
если посмотрите первый пост, то увидите ещё попытку снять рамку, обработав некоторые сообщения, но что-то я не учёл, потому-что сверху остаётся закругление, то ли ещё нужно какое-то сообщение обработать, то ли там уже используются регионы, не понятно.
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 00:14  [ТС]
Цитата Сообщение от fastb1t Посмотреть сообщение
рамка снимается, но иногда появляется стандартная рамка (которая должна появляться при подвисании окна)
вот например
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
01.06.2019, 00:14
вы создаете окно с рамками, а потом пытаетесь их убрать?
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 00:16  [ТС]
появилась белая рамка вокруг окна + заголовок сверху

Добавлено через 1 минуту
Цитата Сообщение от beep7433 Посмотреть сообщение
вы создаете окно с рамками, а потом пытаетесь их убрать?
а если создавать окно без рамок напрямую, задавая нужные стили, то рамки не исчезают ...
только так, после создания
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
01.06.2019, 00:17
покажите код создания окна плиз

CreateWindowEx( 0, ..., ...,WS_POPUP, ............ ) ;
так вас устроит?
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 00:19  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    CreateWindowEx (
                    0,
                    szWindowClassName,
                    szWindowTitle,
                    WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX & ~WS_THICKFRAME,
                    (GetSystemMetrics (SM_CXSCREEN) >> 1) - (iWindowWidth>> 1),
                    (GetSystemMetrics (SM_CYSCREEN) >> 1) - (iWindowHeight>> 1),
                    iWindowWidth,
                    iWindowHeight,
                    HWND_DESKTOP,
                    NULL,
                    hInstance,
                    NULL);
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
01.06.2019, 00:24
WS_OVERLAPPEDWINDOW


Создает перекрывающее окно со стилями WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX и WS_MAXIMIZEBOX. То же самое, что и стиль WS_TILEDWINDOW.
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 00:29  [ТС]
beep7433, не знаю, может не досмотрели, может азов плюсов не знаете, но здесь
C++
1
WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX & ~WS_THICKFRAME
исключаются стили WS_MAXIMIZEBOX, WS_MINIMIZEBOX и WS_THICKFRAME.
То есть остается WS_OVERLAPPED, WS_CAPTION и WS_SYSMENU
+ потом снимаются через SetWindowLongPtr стили WS_CAPTION и WS_SYSMENU

Добавлено через 51 секунду
Цитата Сообщение от fastb1t Посмотреть сообщение
+ потом снимаются через SetWindowLongPtr стили WS_CAPTION и WS_SYSMENU
после чего и снимаются рамки стандартные

Добавлено через 24 секунды
но как видно не всегда
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
01.06.2019, 00:35
WS_POPUP
WS_POPUPWINDOW

Добавлено через 5 минут
WS_POPUPWINDOW || WS_CAPTION
разница есть?
0
51 / 32 / 19
Регистрация: 25.05.2019
Сообщений: 95
01.06.2019, 01:20
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
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT retval=0;
    static int nX, nY;
    switch(uMsg)
    {
        case WM_MOUSEMOVE:
            if((wParam & MK_RBUTTON) || (wParam & MK_LBUTTON))
            {
                RECT rect;
                GetWindowRect(hWnd, &rect);
                MoveWindow(hWnd, rect.left+LOWORD(lParam)-nX, rect.top+HIWORD(lParam)-nY,
                    rect.right-rect.left, rect.bottom-rect.top, TRUE);
            }
            else
            {
                nX=LOWORD(lParam);
                nY=HIWORD(lParam);
            }
            break;
 
        case WM_SIZE:
        {
            int wndX=LOWORD(lParam);
            int wndY=HIWORD(lParam);
            DWORD dwTemp=GetSystemMetrics(SM_CXVSCROLL);
            HRGN rgn=CreateRectRgn(wndX, wndY, wndX+dwTemp, wndY+dwTemp);
            DeleteObject(rgn);
        }
        break;
 
        case WM_LBUTTONDBLCLK:
            SendMessage(hWnd, WM_CLOSE, 0, 0);
            break;
 
        case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
 
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
 
        default:
            retval=DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    return retval;
}
 
//
// Entry point
//
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc={sizeof(WNDCLASSEX),/*CS_VREDRAW|CS_HREDRAW,*/
        CS_NOCLOSE|CS_DBLCLKS,
        WndProc,0,0,hInstance,LoadIcon(NULL,IDI_APPLICATION),
        LoadCursor(NULL,IDC_ARROW),(HBRUSH)(COLOR_WINDOW),NULL,TEXT("WCLASS1"),NULL,};
    ATOM Atom=RegisterClassEx(&wc);
    if(Atom)
    {
        DWORD dwExStyle = WS_EX_TOPMOST | WS_EX_TOOLWINDOW;
        DWORD dwStyle   = WS_VISIBLE | WS_POPUP | WS_BORDER | WS_THICKFRAME;
 
        int x=GetSystemMetrics(SM_CXSCREEN);
        int y=GetSystemMetrics(SM_CYSCREEN);
 
        HWND hWnd=CreateWindowEx(dwExStyle,MAKEINTATOM(Atom),TEXT("WndRegion"),
            dwStyle,x/4,y/9,x/2,(y*2)/3,HWND_DESKTOP,NULL,hInstance,(LPVOID)NULL);
        if(hWnd) {
            ShowWindow(hWnd,nCmdShow);
            UpdateWindow(hWnd);
            MSG msg;
            while(GetMessage(&msg,NULL,0,0)>0) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
    else
        MessageBox(HWND_DESKTOP,TEXT("Cannot create window"),TEXT("Error"),MB_OK);
    return EXIT_SUCCESS;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2019, 01:20
Помогаю со студенческими работами здесь

Координаты мыши на рабочем столе по осям Х и У
Привет! Помогите пожалуйста создать программу которая описана дальше. Перемещая курсор мыши по рабочему столу , надо чтобы программа...

Поворот значков на рабочем столе на определенный угол
Тут задача возникла повернуть все значки(ярлыки) на рабочем столе win7 на определенный угол для всех,и что бы при перемещении по столу угол...

Смена обоев на рабочем столе. Не работает функция
Нужно поменять обои на рабочем столе .вычитал о функции SystemParametersInfo. При попытке ей воспользоваться (точно так же, как описывалось...

Как отобразить изображение с прозрачным фоном на рабочем столе?
Хочу отобразить изображение с прозрачным фоном, на поверхности рабочего стола, с возможностью его двигать, но как?

Как средствами WinAPI узнать расположение ярлыков на рабочем столе?
Господа как средствами winapi узнать расаположение ярлыков на рабочем столе ?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru