Как сделать надпись на рабочем столе под иконками.

Тема в разделе "WASM.WIN32", создана пользователем Avton, 5 окт 2006.

  1. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    Как сделать надпись на рабочем столе под иконками. Не на canvas`е с которого стирается любым перетаскиваемым окном, а именно как бы на обоях что ли. К примеру как здесь: http://vstp.newmail.ru/1.JPG 14кбайт
     
  2. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    Может кто нибудь тогда знает по какому окну рисуются обои?
     
  3. Saros

    Saros New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2005
    Сообщения:
    15
    Текст окна: FolderView
    Класс окна: SysListView32
     
  4. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    Saros а вот и нет. Нажми скрыть значки с рабочего стола. И там будет другое окно
    Internet Explorer_Server, как не странно.. только сейчас обнаружил..
     
  5. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Есть два способа. И первый и второй используються в программах с нужной тебе функциональностью:
    1) Перехват WM_PAINT(...) раб.стола, дальше получение граф.контекста и TextOut. Как это реализовать зависит лишь от границ твоей фантазии: сабклассинг, хукинг...и куча вариантов.
    2) Загрузить битмап (сделать скриншот), нарисовать текст, сохранить битмап, установить картинку как обои раб.стола.
     
  6. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    DelExe о втором способе я тоже думал, но какой то он не красивый что ли.) но скорей всего по нему и пойду.
    С первым в принципе все понятно именно кроме получения графического контекста. Я не понимаю у какого окна его искать. SysListView32 и Internet Explorer_Server не подходит, их закрываешь обои все равно остаются. Последнее что остается с обоями это окно с классом Progman, но получая его контекст, нарисовать ничего не получается )
     
  7. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    а ты попробуй поиграть со всеми (и дочерними окнами в том числе) с помощью WinSpy какого-нибудь... а там и выяснишь что к чему...
     
  8. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    Ну это понятно, я с этого и начал свои поиски. Поиски ничего не дали и я пришел на форум )
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    www.catch22.net
    рекомендую - хорошая тулза там с окошками работает... так и повыклучаешь чайлды - всё сразу прояснится...
     
  10. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
  11. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    К сожалению я так и не нашел того окна, на котором обоина.
    Пойду по пути, который предложил DelExe

     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    >К сожалению я так и не нашел того окна, на котором обоина.

    "То окно" - это окно истинного десктопа (класс #32769).

    Убедиться можете, просто последовательно скрывая "настольные" окна SysListView32, SHELLDLL_DefView, Progman любым подходящим спаем (хоть моим: http://www.wasm.ru/forum/attachment.php?item=250).
     
  13. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    я схожу с ума :)
    но текст рисуетс поверх всего.
    Код (Text):
    1.  var
    2. h,dc:cardinal;
    3.  begin
    4. h:=findwindow('#32769',nil);
    5. dc:=getdc(h);
    6. textout(dc,200,200,'ededed',6);
    7. end;
     
  14. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    Тут способ подсказали еще:
    Делаю окно, пишу по нему текст. и делаю окно нестандартной формы, формы текста.
     
  15. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Avton
    Полигонами чтоли? От чего же нельзя. Только нужно понимать что:
    1) При клацании мышкой фокус с предыдущего окна теряется (а ведь надпись для юзера выглядит как родная для раб.стола).
    2) Тягать иконки по столу где находиться надпись можно, но пользователю не удобно.
    3) Убрать окно с панели задач. Избавиться от Alt-TAb.
    4) Установить родителем раб.стол или отслеживать полчение фокуса раб.столом. Иначе надпись будет висеть и над другими окнами.
    5) Бороться с минимизацией, так как Win-D уберёт надпись.
     
  16. ViCooper

    ViCooper Victor

    Публикаций:
    0
    Регистрация:
    11 дек 2006
    Сообщения:
    26
    HWND hWnd = GetDesctopWindow() // манипулятор окна, предоставляющего вес экран
    HDC hDC = GetDC( hWnd ) // собственно манипулятор граф. контекста
    ...или короче HDC hDC = GetDC( NULL )

    незабывай про ReleaseDC(...)
     
  17. Avton

    Avton New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2006
    Сообщения:
    16
    Адрес:
    Иркутск
    DelExe ну как полигонами... тупо рисую текст на окне цветом каким либо. создаю регион только из этого цвета (перебираю каждый пиксель).
    ну да. тут ничего не сделаешь.
    ну это легко
    ну да. но сделал чтобы было всегда ниже всех окон.

    ViCooper
    не смешно. это уже было. попробуй. текст рисуется поверх иконок.
     
  18. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
  19. atorn

    atorn New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2006
    Сообщения:
    64
    Avton
    Лучший вариант сделать рисунком стола HTML. В нём и рисуй.
     
  20. ViCooper

    ViCooper Victor

    Публикаций:
    0
    Регистрация:
    11 дек 2006
    Сообщения:
    26
    Прошу прощенья, был не внемателен!

    Попробуй так:
    hWnd = GetFirstChild( GetFistChild( FindWindow( _TEXT("ProgMain") ) );

    Окно класса ProgMain создаётся для совместимости со старыми версиями виндофс. У ProgMain единсивенное дочернее окно класса SHELLDLL_DefView, у него в свою очередь - одно - класса SysListView32. Именно оно, по словам Джефри Рихтера и служит элементом управления рабочего стола.