Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программное изменение частоты экрана 
:(
    Опции темы
12usver12
Дата 22.1.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет!
Подскажите, пожалуйста, как программно менять частоту обновления экрана?
И возможно ли это?
Если есть какие-нибудь ссылки на эту тему - буду очень благодарна! smile 
PM MAIL   Вверх
Franc
Дата 22.1.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Простите что обращаюсь, но подскажите пожалуйста как в db Access в таблице вставлять музыкальные файлы? Если знаете подскажите.
PM MAIL   Вверх
sgi1981
Дата 24.1.2007, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код
DEVMODE dmScreenSettings;

memset(&dmScreenSettings, 0, sizeof(DEVMODE));
dmScreenSettings.dmSize   = sizeof(DEVMODE);
dmScreenSettings.dmPelsWidth    = 800;//к примеру
dmScreenSettings.dmPelsHeight   = 600;//к примеру
dmScreenSettings.dmBitsPerPel = 24;//к примеру
dmScreenSettings.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
dmScreenSettings.dmDisplayFrequency=100;//частота мигания экрана

ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);




--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
12usver12
Дата 28.1.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Большое спасибо за совет! Очень помог!
Но теперь появился другой вопрос: как узнать, какая  частота была у пользователя? Вдруг я поставлю
ему 85 Гц, в то же время как его монитор такую частоту не поддерживает,
только ниже. Вот с разрешением было проще - GetDeviceCaps получил и все дела - узнал разрешение экрана.
А для получения информации о частоте обновления какой-нибудь способ есть?
PM MAIL   Вверх
sgi1981
Дата 29.1.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да. Можно узнать все доступные видеорежимы с помощью API-функции
EnumDisplaySettings.
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1ChangeDisplaySettings.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
DEVMODE dmScreenSettings;
int i1;
memset(&dmScreenSettings, 0, sizeof(DEVMODE));
dmScreenSettings.dmSize   = sizeof(DEVMODE);
dmScreenSettings.dmPelsWidth    = Edit1->Text.ToIntDef(800);//ширина
dmScreenSettings.dmPelsHeight   = Edit2->Text.ToIntDef(600);//высота
dmScreenSettings.dmBitsPerPel = Edit4->Text.ToIntDef(32);//число бит на пиксел
dmScreenSettings.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_BITSPERPEL;//флаги
dmScreenSettings.dmDisplayFrequency=Edit3->Text.ToIntDef(75);//частота мигания
i1=ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
DEVMODE dmSS;
int i,j;
AnsiString dd;
dmSS.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_BITSPERPEL;
Memo1->Lines->Clear();
i=0;
do{
j=EnumDisplaySettings(0,i,&dmSS);
if (j)
Memo1->Lines->Add(IntToStr(dmSS.dmPelsWidth)+"*"+IntToStr(dmSS.dmPelsHeight)+
"  "+IntToStr(dmSS.dmBitsPerPel)+" bits  "+IntToStr(dmSS.dmDisplayFrequency)+" Гц");
i++;
}while (j>0);
}
//---------------------------------------------------------------------------


Выводите список доступных видеорежимов и пусть пользователь в

Это сообщение отредактировал(а) sgi1981 - 29.1.2007, 19:43

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  ChangeDisplaySettings_.zip 6,04 Kb
PM MAIL   Вверх
12usver12
Дата 2.2.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Большое спасибо за советы!
По окончании работы второй функции выводится две таких сомнительных записей:
    640 х 480 4 bits 1Гц
    680 х 600 4 bits 1Гц
Если немного подкорректировать, то получается, что когда dmSS.dmDisplayFrequency принимает 1, цикл завершается, и такие значения уже не выводятся. Но когда пытаюсь присвоить переменной полученное значение dmSS.dmDisplayFrequency, то все равно выходит 1Гц. Интересно, что следует дописать, чтобы считывалось предпоследнее значение (последнее равняется единице)?

Код

void CTestDlg::OnButton2() 
{
    m_List.ResetContent();
    DEVMODE dmSS;
    int i,j;
    CString dd;
    CString str;
    CString str2;

    dmSS.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_BITSPERPEL;

    i=0;
    int a = 0;
    int b = 0;
    do{
        j=EnumDisplaySettings(0,i,&dmSS);
        
        if (j){
            b=dmSS.dmDisplayFrequency;
            if( b == 1 )
                break;
    
            dd.Format("%d)  %d x %d  %d bits  %d Гц",
                i+1,
                dmSS.dmPelsWidth,       
                dmSS.dmPelsHeight,      
                dmSS.dmBitsPerPel,      
                dmSS.dmDisplayFrequency
                );

            m_List.AddString(dd);
            a = m_List.GetCount();
            str.Format("%d",a);
            m_st.SetWindowText(str);/**/
            
//        if( b == 1 )
//            break;

        }
    //    dmSS.dmDisplayFrequency = i;
        //b=dmSS.dmDisplayFrequency;
        //if( b == 1 )
        //    return;
        i++;
    }while (j>0);

    
    str2.Format("%d",b);
    m_st2.SetWindowText(str2);

//    if( b == 1 )
//        return;
//    else
//    MessageBox(str2);
}

P.S. код и результат в скриншоте

Добавлено @ 00:06 
Мне просто хочется настроить свою программу таким образом, чтобы она автоматически определяла оптимальный видеорежим и тем самым обеспечивала более комфортную работу с приложением. А по окончании - возврат тех значений, которые у пользователя были. Думаю, не каждому будет приятно каждый раз лазить в настройки и все менять на прежнее  smile 

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  pic.jpg 106,98 Kb
PM MAIL   Вверх
sgi1981
Дата 3.2.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Моя демка, которую я компилировал на Borland C++ Builder 6.0.

Полный архив с исходниками можно скачать вот от сюда
http://www.cbuilder.ru/forums/index.php?ac...st&id=36325

В общем суть выполнения этого фрагмента кода в следующем.
Когда начинает выполняться программа под WINDOWS - выполняется функция WinMain.
Ее код вызывает функцию инициализации диалога, в данном случае это функция не API, а собственная ShowStartupOptions, код которой вызывает API-функцию DialogBoxParamA, в качестве параметров которой передается адрес оконной функции диалогового окна и номер ресурса для создания диалогового окна (ресурс должен быть описан и подключен к исполняемому файлу при компиляции его). Затем, когда ОС создает исходя из ресурса диалоговое окно - она автоматически вызывает оконную функцию этого окна. Оконная функция содержит код, выполняемый при поступлении определенных сообщений, которые поступают как параметры функции окна. В данном случае обрабатывается команда инициализации диалога, нажатия на кнопку "OK", и нажатия на кнопку "CANCEL". При инициализации диалога оконная функция заполняет структуру PIXELFORMATDESCRIPTOR с данными о желаемом пиксельном формате для того, чтобы вызвать функцию [b]ChoosePixelF

Это сообщение отредактировал(а) sgi1981 - 4.2.2007, 00:22
PM MAIL   Вверх
12usver12
Дата 4.2.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо за советы! И отдельное большое спасибо за предоставленную программу! Сразу все стало на свои места. Просто вы показали мне пример на Build C++, в то время как моя программа пишется на Visual C++. И живой, работающий пример очень помог разобраться со всеми тонкостями работы с видеорежимами! Вы мне очень помогли! Думаю, на этом проблема успешно завершена.  smile 
Быть может, до встречи на форуме!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




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


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

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