Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка области рабочего стола 
V
    Опции темы
rasik
Дата 11.3.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.2.2006

Репутация: нет
Всего: 3



Программа должна рисовать на экране некий текст.. Делаю я это так:
Код

        private void VizualNotification()
        { 
            IntPtr hDCDesktop = Win32.GetDC(IntPtr.Zero);
            System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHdc(hDCDesktop);

            graphics.DrawString(text, textFont, textBrush, textPoint);

            Win32.ReleaseDC(IntPtr.Zero, hDCDesktop);
        }

После graphics.DrawString() только что нарисованную надпись нужно убрать - "обновить" часть (или всю область) рабочего стола. Как?
PM MAIL ICQ   Вверх
mr.DUDA
Дата 12.3.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Не проверял, но должно работать:
Код
using System;
using System.Drawing;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll")]
    static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll")]
    static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);

    static void Main()
    {
        IntPtr hwnd = GetDesktopWindow();
        Rectangle rect = new Rectangle(0, 0, 100, 100);

        IntPtr ptr = Marshal.AllocCoTaskMem(Marshal.SizeOf(rect));
        Marshal.StructureToPtr(rect, ptr, false);
        
        InvalidateRect(hwnd, ptr, true);
    }
}


Добавлено @ 09:37 
Кстати, проще делать это формой с прозрачным фоном (TransparencyKey поставить таким же цветом как фон формы, и убрать заголовок). 


--------------------
user posted image
PM MAIL WWW   Вверх
rasik
Дата 12.3.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.2.2006

Репутация: нет
Всего: 3



Работает smile. Огромнейшее спасибо.

П.С. А через прозрачную форму действительно легче сделать, жаль что сразу в голову не пришло.

Забыл: hwnd = GetDesktopWindow() не нужен, вместо него -  IntPtr.Zero.

Это сообщение отредактировал(а) rasik - 12.3.2007, 20:40
PM MAIL ICQ   Вверх
Elfet
Дата 31.3.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Цитата(rasik @  12.3.2007,  20:28 Найти цитируемый пост)
П.С. А через прозрачную форму действительно легче сделать, жаль что сразу в голову не пришло.

А как это через неё делается? smile


--------------------
PM MAIL WWW Skype   Вверх
Naum
Дата 2.4.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 1
Всего: 15



Цитата(mr.DUDA @  12.3.2007,  10:36 Найти цитируемый пост)
TransparencyKey поставить таким же цветом как фон формы, и убрать заголовок

И в обработчике события Paint рисуем все-что душе угодно.
З.Ы. Кстати интересный прикол. Есть у меня одна программка, Художник - так сказать. Перерисовывает фотографии. Недавно я как раз выше указанным способом сделал, чтобы рисовал на рабочем столе. Но, при в OnPaint при инициализации обычно пишут base(...), а у меня пусто. Так вот когда первый раз (после запуска винды) запускаешь эту программку, на рабочем столе отображается (правда обрывками) экран приветствия винды, а если закрыть программку и запустить снова, отображается, то что успело нарисоваться при предыдущем запуске.



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.