Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Уточнения по поводу единого интерфейса

272
31 марта 2004 года
vladsoft
512 / / 20.08.2000
:!!!:
В моей клиентской области все элементы управления расположены там где мне нужно, но когда я свою прогу запуская на машине где вместо 96 dpi, все 125 и выши то машина автоматически увеличивает размеры окна >> размеры всех элементов управления >> и в моей клиентсой области становится работать не удобно так как размер картинки на форме увеличивается , а рисунок как был одного размера так и остался, я слышал, что в WIn api есть спец функции, для того чтобы прорисовывать окно так как нужно ну какие и как ими пользоваться из VB я не знаю и буду очнь признателен если кто-нибудь мне подскажет!
Желательно пример!!
319
31 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by vladsoft
:!!!:
В моей клиентской области все элементы управления расположены там где мне нужно, но когда я свою прогу запуская на машине где вместо 96 dpi, все 125 и выши то машина автоматически увеличивает размеры окна >> размеры всех элементов управления >> и в моей клиентсой области становится работать не удобно так как размер картинки на форме увеличивается , а рисунок как был одного размера так и остался, я слышал, что в WIn api есть спец функции, для того чтобы прорисовывать окно так как нужно ну какие и как ими пользоваться из VB я не знаю и буду очнь признателен если кто-нибудь мне подскажет!
Желательно пример!!


по идее, в винде есть такое понятие как режим отображения координат (функции SetMapMode). Режимов отображения несколько, но среди них есть один метрический - т.е. в этом режиме при рисовании задаешь все размеры и координаты в долях милиметра и они выводятся всегда одного размера - независимо от разрешения и т.д. Как сделать такую вещь в VB я не знаю, потому что на C++ эти все режимы связаны с понятием контекста устройства (класс CDC). Контекст устройства - это виртуальное отображение реального контекста, на котором рисуешь.
правда я этим делом пользовался для рисования простых объектов - как линии, квадраты и т.д. Может кто из специалистов по VB подскажет что дельное? других возможностей для твоей проблемы я не знаю. если хочешь, могу привести пример на С++.

272
31 марта 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by xelos

по идее, в винде есть такое понятие как режим отображения координат (функции SetMapMode). Режимов отображения несколько, но среди них есть один метрический - т.е. в этом режиме при рисовании задаешь все размеры и координаты в долях милиметра и они выводятся всегда одного размера - независимо от разрешения и т.д. Как сделать такую вещь в VB я не знаю, потому что на C++ эти все режимы связаны с понятием контекста устройства (класс CDC). Контекст устройства - это виртуальное отображение реального контекста, на котором рисуешь.
правда я этим делом пользовался для рисования простых объектов - как линии, квадраты и т.д. Может кто из специалистов по VB подскажет что дельное? других возможностей для твоей проблемы я не знаю. если хочешь, могу привести пример на С++.


:!!!: Мыль пример на мыло [email]vlad_soft@mail.ru[/email] я на с++ сам люблю кодить, но про эту библиотеку не слышал...

319
31 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by vladsoft

:!!!: Мыль пример на мыло [email]vlad_soft@mail.ru[/email] я на с++ сам люблю кодить, но про эту библиотеку не слышал...


неуж не слышал, это ж MFC... :):)

319
31 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by xelos

неуж не слышал, это ж MFC... :):)


Код:
void CChildView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
   
    dc.SetMapMode(MM_LOMETRIC); //ustanavlivaem kontekst tak, chto 1 logicheskaya edinica ravna 0.1 mm

    dc.MoveTo(100,-100);//smeschaem kursor na 1 cm vniz i vpravo
    //risuem kvadrat so storonoi 1 cm
    dc.LineTo(200,-100);
    dc.LineTo(200,-200);
    dc.LineTo(100,-200);
    dc.LineTo(100,-100);

    // Do not call CWnd::OnPaint() for painting messages
}


этот код позволяет рисовать на экране квадрат с размером 1 см на 1 см независимо от монитора и от разрешения.
по идее кнопки рисуются на диалоговом окне.
контекст диалогового окна можно получить через:

CDC* GetDC();

и установить его режим преобразования координат в один из метрических... не уверен что получится, но попробовать всегда можно! объект класса CDC (контекст устройства) непостоянный, так что, имхо, надо как-то действовать через хэндл устройства HDC, объявленный глобально и получаемый через GetSafeHandle...
задачка интересная, жаль нету времени посмотреть поподробнее... может кто что дельное еще подскажет?

PS. Имхо имеет смысл спросить на сишном форуме...
266
02 апреля 2004 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by xelos

Код:
void CChildView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
   
    dc.SetMapMode(MM_LOMETRIC); //ustanavlivaem kontekst tak, chto 1 logicheskaya edinica ravna 0.1 mm

    dc.MoveTo(100,-100);//smeschaem kursor na 1 cm vniz i vpravo
    //risuem kvadrat so storonoi 1 cm
    dc.LineTo(200,-100);
    dc.LineTo(200,-200);
    dc.LineTo(100,-200);
    dc.LineTo(100,-100);

    // Do not call CWnd::OnPaint() for painting messages
}


этот код позволяет рисовать на экране квадрат с размером 1 см на 1 см независимо от монитора и от разрешения.
по идее кнопки рисуются на диалоговом окне.
контекст диалогового окна можно получить через:

CDC* GetDC();

и установить его режим преобразования координат в один из метрических... не уверен что получится, но попробовать всегда можно! объект класса CDC (контекст устройства) непостоянный, так что, имхо, надо как-то действовать через хэндл устройства HDC, объявленный глобально и получаемый через GetSafeHandle...
задачка интересная, жаль нету времени посмотреть поподробнее... может кто что дельное еще подскажет?

PS. Имхо имеет смысл спросить на сишном форуме...


На мой взгляд, лучше не заморачиваться особо, а продумать ресайз. К тому же можно изначально при помощи API получать параметры экрана и уже при ресайзе плясать от этого.

272
02 апреля 2004 года
vladsoft
512 / / 20.08.2000
Цитата:
Originally posted by mhaturov

На мой взгляд, лучше не заморачиваться особо, а продумать ресайз. К тому же можно изначально при помощи API получать параметры экрана и уже при ресайзе плясать от этого.


:???: Я слышал про ряд API которые позволяют получать экранные координаты, но как с ними в VB работать не знаю...
буду признателен за пример!!!!!

319
02 апреля 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by vladsoft

:???: Я слышал про ряд API которые позволяют получать экранные координаты, но как с ними в VB работать не знаю...
буду признателен за пример!!!!!


есть функции преобразования логических координат в физические, но они всегда связаны с контекстом устройства... пример - LPtoDP...
я не знаю как можно обойтись без контекста устройства в данном случае... поскольку винда работает не напрямую с физическим устройством вывода, а через виртуальные, коими и являются контексты.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог