Экран и рабочий стол
// Для изменения картинки на рабочем столе
// используйте следующий код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "pic.bmp",
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
// где pic.bmp - имя вашего файла с картинкой
//Первый вариант в 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 содержится частота обновления экрана по горизонтали
// Разрешение экрана можно узнать, прочитав значения
// свойств Screen->Width и Screen->Height:
int HorzRes = Screen->Width;
int VertRes = Screen->Height;
// Для получения разрешения экрана напишите следующий код:
HDC hDCScreen = GetDC(NULL);
int Horres = GetDeviceCaps(hDCScreen, HORZRES);
int Vertres = GetDeviceCaps(hDCScreen, VERTRES);
ReleaseDC(NULL, hDCScreen);
// в Horres содержится разрешение экрана по горизонтали,
// в Vertres содержится разрешение экрана по вертикали.
// Для получения разрешения экрана напишите следующий код:
int screenW=GetSystemMetrics(SM_CXSCREEN);//Получить ширину экрана
int screenH=GetSystemMetrics(SM_CYSCREEN);//Получить высоту экрана
// в screenW содержится разрешение экрана по горизонтали,
// в screenH содержится разрешение экрана по вертикали.
// Следующий код отобразит на экране диалоговое
// окно свойств дисплея:
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 ;
}
}