Форум программистов, компьютерный форум, киберфорум
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. Показов 1911. Ответов 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
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 11:59  [ТС]
Студворк — интернет-сервис помощи студентам
ibsq, заданием есть снять стандартные рамки окна, без последующих изменений
+ кстати я о регионах вспоминал в первом посте, уже даже есть наработки, НО опять первый вопрос
Цитата Сообщение от fastb1t
снять стандартные рамки окна, без последующих изменений
0
28 / 21 / 7
Регистрация: 21.01.2019
Сообщений: 110
01.06.2019, 12:11
fastb1t, WS_POPUPWINDOW || WS_CAPTION расскажите пожалуйста, а то вы промолчали
0
51 / 32 / 19
Регистрация: 25.05.2019
Сообщений: 95
01.06.2019, 14:33

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
#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_CREATE:
            SetLayeredWindowAttributes(hWnd,RGB(255,255,255),0,TRUE);
            break;
 
        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_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,WndProc,0,0,hInstance,LoadIcon(NULL,IDI_APPLICATION),
        LoadCursor(NULL,IDC_ARROW),(HBRUSH)(COLOR_WINDOW+1),NULL,TEXT("WCLASS1"),NULL,};
    ATOM Atom=RegisterClassEx(&wc);
    if(Atom) {
        DWORD dwExStyle = WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_TOOLWINDOW;
        DWORD dwStyle   = WS_VISIBLE | WS_POPUP | WS_BORDER | WS_THICKFRAME;
        HWND hWnd=CreateWindowEx(dwExStyle,MAKEINTATOM(Atom),TEXT("FrameRegion"),dwStyle,
            10,10,320,240,HWND_DESKTOP,NULL,hInstance,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|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
    }else
        MessageBox(HWND_DESKTOP,TEXT("Cannot register class"),TEXT("Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
    return EXIT_SUCCESS;
}
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 16:43  [ТС]
Цитата Сообщение от beep7433 Посмотреть сообщение
WS_POPUPWINDOW || WS_CAPTION расскажите пожалуйста, а то вы промолчали
beep7433, не оффтопьте ...

результат


ibsq, стандартная рамка ...
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 21:45  [ТС]
рамку регионами сделать не проблема, вот только что-бы ничего из стандартной коробки не вылезало наружу ... в этом как раз проблема

Добавлено через 5 часов 0 минут
Короче как-то добился желаемого. Вернулся к самому началу, и сделал всё вместе + изменил немного флаги создания окна.

Создание окна
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
    DWORD dwStyle = WS_VISIBLE;
    DWORD dwExStyle = WS_EX_APPWINDOW | WS_EX_TOPMOST;
 
    RECT rc;
    SetRect(&rc, 0, 0, 800, 500);
    AdjustWindowRectEx(&rc, dwStyle, FALSE, dwExStyle);
 
    const int iWindowWidth = rc.right - rc.left;
    const int iWindowHeight = rc.bottom - rc.top;
 
    hSelectAreaWindow = CreateWindowEx(
        dwExStyle,
        szSelectAreaWindowClassName,
        _T("Выбрать область"),
        dwStyle,
        (GetSystemMetrics(SM_CXSCREEN) >> 1) - (iWindowWidth >> 1),
        (GetSystemMetrics(SM_CYSCREEN) >> 1) - (iWindowHeight >> 1),
        iWindowWidth,
        iWindowHeight,
        HWND_DESKTOP,
        NULL,
        hInstance,
        NULL);
    if (!hSelectAreaWindow)
    {
        // ...
    }
 
    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
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
01.06.2019, 21:51  [ТС]
Вот какая красота получилась
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2019, 21:51

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru