Borland C++ FAQ
Страница 17. Экран и рабочий стол


Экран и рабочий стол

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

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

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

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

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

    // Для изменения параметров экрана используйте следующий
    // код:
    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);
    // ЗАМЕЧАНИЕ: при изменении параметров смотрите чтобы
    монитор поддерживал это режим

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

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

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

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

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

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

  7. Как узнать разрешение экрана

    // Для получения разрешения экрана напишите следующий код:
    int screenW=GetSystemMetrics(SM_CXSCREEN);//Получить ширину экрана
    int screenH=GetSystemMetrics(SM_CYSCREEN);//Получить высоту экрана
    // в screenW содержится разрешение экрана по горизонтали,
    // в screenH содержится разрешение экрана по вертикали.

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

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

    ShellExecute(NULL, "", "Desk.cpl", "", "", SW_SHOWNORMAL);

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

    Напишите следующий код:
    #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);
    }
    }

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

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

     

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

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