Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Окна в фотошопе, как сделать подобное? 
:(
    Опции темы
GremlinProg
Дата 21.10.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



ок, убедила ), на счет панелек и правда, не подумал


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 25.10.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:40
--------------------
PM MAIL   Вверх
MenSem
Дата 25.10.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

Это сообщение отредактировал(а) MenSem - 22.12.2010, 00:41
--------------------
PM MAIL   Вверх
GremlinProg
Дата 25.10.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(MenSem @  25.10.2008,  14:51 Найти цитируемый пост)
Проблема в том, что когда мышь вновь попадает в область рисования, появляется линия от того места в области рисования, где мышь была последний раз до выхода из обл. рис. до текущей позиции курсора.

корректируй координаты перед выводом линии:
Код

line_x = min( max( mouse_x , 0 ) , width - 1 );
line_y = min( max( mouse_y , 0 ) , height - 1 );

а фильтруй только повторяющиеся точки, т.е. к примеру, если { last_line_x , last_line_y } == { line_x , line_y }, то рисовать ее смысла нет, т.к. она уже была нарисована на предыдущей итерации.
Но все это, конечно, с учетом SetCapture - ReleaseCapture, иначе разницы не увидишь.

Цитата(MenSem @  25.10.2008,  16:30 Найти цитируемый пост)
 что касается кнопок, как можно сделать их покрасивей, т.е. что бы под стиль системы?

что значит под стиль системы? под стиль темы ХР? Если так, то я уже писал, используй API ThemeXP: библиотека UxTheme.dll и ее набор функций DrawThemeBackground, DrawThemeEdge и т.п. Практически все можно рисовать, используя только DrawThemeBackground.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
MenSem
Дата 25.10.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

Это сообщение отредактировал(а) MenSem - 21.12.2010, 23:57
--------------------
PM MAIL   Вверх
MenSem
Дата 25.10.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

Это сообщение отредактировал(а) MenSem - 21.12.2010, 23:58
--------------------
PM MAIL   Вверх
GremlinProg
Дата 25.10.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(MenSem @  25.10.2008,  21:36 Найти цитируемый пост)
можно чуть подробней

резервируем две переменные:
Код

#include <vector>
static std::vector<POINT>line;
static captured = FALSE;

фокусируем мышь на клиенте, заодно добавляем в массив точек первую запись:
Код

case WM_LBUTTONDOWN:
  POINT pt;
  pt.x = (short)LOWORD(lParam);
  pt.y = (short)HIWORD(lParam);

  line.push_back(pt);

  ::SetCapture(hwnd);
  captured = TRUE;
  break;

основная проверка, добавление очередной точки в набор и перерисовка клиента (перерисовывать нужно только линию, сам думай как):
Код

case WM_MOUSEMOVE:
  POINT pt;
  pt.x = min( max( (short)LOWORD(lParam) , 0 ) , width - 1 );
  pt.y = min( max( (short)HIWORD(lParam) , 0 ) , height - 1 );
  if( captured && ( ( line.back().x != pt.x ) || ( line.back().y != pt.y ) ) ){
    line.push_back(pt);
    ::InvalidateRect(hwnd,NULL,FALSE);
  }

дефокусировка:
Код

case WM_LBUTTONUP:{
  ::ReleaseCapture();
  captured = FALSE;
  break;
}

обычный способ отображения такого массива:
Код

case WM_PAINT:{
  ...
  if( !lines.empty() ){
    ::MoveToEx( hdc , lines.back().x , lines.back().y,NULL);
    for(int i = lines.size();i--;){
      ::LineTo( hdc , lines.at(i).x , lines.at(i).y);
    }
  }
  ...
}

если нужно зафиксировать не всю область клиента под рисование, а например какой-нить ее прямоугольник (rc), то добавляй проверку на вхождение точки него на WM_LBUTTONDOWN и в WM_MOUSEMOVE делай такой расчет точки:
Код

  pt.x = min( max( (short)LOWORD(lParam) , rc.left ) , rc.right );
  pt.y = min( max( (short)HIWORD(lParam) , rc.top ) , rc.bottom );




--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Lycifer
Дата 10.11.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



QT поможет adobe юзает QT и не жалуется!!!
К стати вопрос наверное не в тему, но все же зачем программить на winApi GUI??????
PM MAIL ICQ   Вверх
GremlinProg
Дата 11.11.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Lycifer @  10.11.2008,  21:08 Найти цитируемый пост)
QT поможет adobe юзает QT и не жалуется!!!

судя по 7-й версии, среди более чем 200 окон фотошопа, не заметил ни одного намека на QT
Цитата(Lycifer @  10.11.2008,  21:08 Найти цитируемый пост)
зачем программить на winApi GUI?

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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Lycifer
Дата 11.11.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

судя по 7-й версии, среди более чем 200 окон фотошопа, не заметил ни одного намека на QT 


 - adobe юзает QT (я не писал про 7-й версии и не смотрел на неё, но вот что у adobe только один продукт?)


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

При чем тут язык? Я говорю о том что пользовательский интерфейс писать на API как то .... 
Понятное дело что все равно программа будет вызывать API (win API для Windows) но просто обращения программиста будет через ООП, более читабельным, да и писать намного быстрее и приятней.

PM MAIL ICQ   Вверх
GremlinProg
Дата 11.11.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Lycifer @  11.11.2008,  17:13 Найти цитируемый пост)
adobe юзает QT (я не писал про 7-й версии и не смотрел на неё, но вот что у adobe только один продукт?)

QT много кто юзает, только при чем он тут, если речь конкретно о фотошопе, который, как мы уже выяснили, к кути отношения не имеет.
У нас с тобой разговор получается о тапках сапога, носками полнолуние. )
Цитата(Lycifer @  11.11.2008,  17:13 Найти цитируемый пост)
писать на API как то .... 

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

прямые вызовы API используют в основном только в тех случаях, когда инструментальные средства не позволяют напрямую что-то сделать, в остальных случаях используются соответствующие прототипы (редиректы) в инструментах разработчика, именно поэтому твой вопрос некорректен, поскольку писать на API еще ни кто не научился.

Знание API подразумевает умение ориентироваться в инструментах контекстом API, т.е., собственно, понимать к каким следствиям приводят те или иные вызовы высокоуровневых методов обертки над API, будь то MFC, Builder, Delphi, Basic и прочие, что всегда приводит к разбору единого стандарта системных правил, которому все равно кто его будет исполнять, но благодаря которому мы всегда можем понять друг друга, независимо от того, кто на каком языке пишет.



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
mes
Дата 11.11.2008, 19:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(MenSem @  25.10.2008,  19:19 Найти цитируемый пост)
Короче что бы по красивей были, а не квадратные.

Я так понял что у Вас стоит виндоуз ХП. Все приложения имеют красивые кнопки, а Ваше квадратные.
Вопрос как применить к ГУИ стиль системы. так ? 
Добавьте в каталог с программой файл имя_проги.exe.Manifest с таким содержимым:
Цитата

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
  manifestVersion="1.0">
<assemblyIdentity
    name= "имя_проги "
    processorArchitecture="x86"
    version="1.0.0.0"
    type="win32"/>
<description> имя_проги </description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="x86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>


Это сообщение отредактировал(а) mes - 16.11.2008, 00:19


--------------------
PM MAIL WWW   Вверх
MenSem
Дата 15.11.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

Это сообщение отредактировал(а) MenSem - 21.12.2010, 23:58
--------------------
PM MAIL   Вверх
mes
Дата 16.11.2008, 00:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(MenSem @  15.11.2008,  23:52 Найти цитируемый пост)
Только в exeшник её никак не запихать? 

можно в ресурсы, подробней гугль подскажет как. 


--------------------
PM MAIL WWW   Вверх
MenSem
Дата 16.11.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



del

Это сообщение отредактировал(а) MenSem - 21.12.2010, 23:59
--------------------
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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