DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Работа с дисплеем и рабочим столом средствами Borland C++

Posted by devprog на Январь 16, 2009

Очень полезный FAQ по работе с десктопом и дисплеем найден мною на просторах интернета прямо сейчас. Почитаем?

Изменение картинки на рабочем столе

// Для изменения картинки на рабочем столе
// используйте следующий код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, «pic.bmp»,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
// где pic.bmp — имя вашего файла с картинкой

Изменение картинки на рабочем столе(вариант 2)

//Первый вариант в C++Builder 5 вызывает ругань
// BoundsChecker’a, хотя и работает.
// Нижеприведенный вариант никакой ругани не вызывает, но
// почему-то работает не на всех машинах. Для изменения картинки
// на рабочем столе используйте следующий код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, «pic.bmp»,
SPIF_UPDATEINIFILE);
// где pic.bmp — имя вашего файла с картинкой

Изменение параметров экрана

// Для изменения параметров экрана используйте следующий
// код:
DEVMODE DM;
DM.dmSize = sizeof(DEVMODE);
DM.dmBitsPerPel = 16;
// глубина цвета, бит на пиксель
DM.dmPelsWidth = 1024; // разрешение по горизонтали
DM.dmPelsHeight = 768; // разрешение по вертикали
DM.dmFields = DM_BITSPERPEL +
DM_PELSWIDTH +
DM_PELSHEIGHT +
DM_DISPLAYFREQUENCY;
DM.dmDisplayFrequency = 75;
// частота обновления экрана
ChangeDisplaySettings(&DM, 0);
// ЗАМЕЧАНИЕ: при изменении параметров смотрите чтобы
монитор поддерживал это режим

Как узнать частоту обновления экрана

// Для получения частоты обновления экрана напишите следующий код:
HDC hDCScreen = GetDC(NULL);
int Refresh = GetDeviceCaps(hDCScreen, VREFRESH);
ReleaseDC(NULL, hDCScreen);
// в Refresh содержится частота обновления экрана по горизонтали

Как узнать разрешение экрана (VCL вариант)

// Разрешение экрана можно узнать, прочитав значения
// свойств Screen->Width и Screen->Height:
int HorzRes = Screen->Width;
int VertRes = Screen->Height;

Как узнать разрешение экрана (WinAPI вариант)

// Для получения разрешения экрана напишите следующий код:
HDC hDCScreen = GetDC(NULL);
int Horres = GetDeviceCaps(hDCScreen, HORZRES);
int Vertres = GetDeviceCaps(hDCScreen, VERTRES);
ReleaseDC(NULL, hDCScreen);
// в Horres содержится разрешение экрана по горизонтали,
// в Vertres содержится разрешение экрана по вертикали.

Отображение свойств дисплея

// Следующий код отобразит на экране диалоговое
// окно свойств дисплея:

ShellExecute(NULL, «», «Desk.cpl», «», «», SW_SHOWNORMAL);

Как поместить вид рабочего стола в буфер

Напишите следующий код:
#include <Clipbrd.hpp>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned DataHandle;
HPALETTE APalette;
Word Format;
Graphics::TBitmap *Bitmap=new Graphics::TBitmap;
HDC DC=GetDC(0);
try{
Bitmap->Height=Screen->Height;
Bitmap->Width=Screen->Width;
BitBlt(Bitmap->Canvas->Handle , 0, 0, Screen->Width,
Screen->Height,DC, 0, 0, SRCCOPY);
//Изображение экрана теперь в Bitmap, запишем его в бyфеp обмена
Bitmap->SaveToClipboardFormat(Format,DataHandle,APalette);
Clipboard()->SetAsHandle(Format,DataHandle);
}
__finally
{
delete Bitmap;
ReleaseDC(0,DC);
}
}

Как рисовать на Десктопе

Напишите следующий код:
HDC hdc = CreateDC ( TEXT(«DISPLAY»), NULL, NULL, NULL );
Rectangle( hdc, 100,100, 200, 200);
DeleteDC ( hdc );

Как закрасить рабочий стол по пикселю

Напишите следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{ TCanvas *dt = new TCanvas ;
randomize();
dt->Handle = GetDC(0);
while (dt)
{
dt->Pixels[random(1024)][random(768)]= 0 ;
}
}

Реклама

Один ответ to “Работа с дисплеем и рабочим столом средствами Borland C++”

  1. xsi said

    вопрос: как ограничить область развертывания любых виндовых окон (я так понимаю они вызывают sv_maximize) на рабочем столе(а не только своего приложения)? похожего эффекта добивается тулбар виндовс со значением «always on top» — окна на него не наползают в режиме разворачивания. Т.е. либо как-то создать новый Rectangle на рабочем столе (главном окне), что б дочерние использовали только его, либо изменить корневой параметр sv_maximize. или как вариант как-то ограничить в своей форме наползание на нее других окон (вариант на дельфи описал человек тут http://www.delphipages.com/comp/screendocker-3115.html). подскажите как это сделать? спасибо.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: