Re[2]: colorDialog на C++
От: siv Украина  
Дата: 27.11.05 21:46
Оценка: 6 (1)
А>Заранее благодарна!

Хм, так все вежливо ответили, ну просто прелесть
Вот, что значит подписаться Анониму в женском роде!
Взять что-ли на заметку, эдакий приёмчик социальной инженерии
П.С.
Это я ни к тому, что отвечать вежливо и любезно не стоит...
Posted via RSDN NNTP Server 1.9
Re[9]: colorDialog на C++
От: jazzer Россия Skype: enerjazzer
Дата: 27.11.05 23:58
Оценка: :)
Здравствуйте, elGray, Вы писали:

G>дык это и есть WM_CTLCOLOR :)


WM_CTLCOLOR, насколько я помню, прилетает не в кнопку, а в диалог, который эту кнопку содержит (спасибо биллу гейтсу за наше счастливое). В результате сделать кнопку автономной становится затруднительно.

J>>Только это было тыщу лет тому назад, я уже все забыл :)


G>Хотя... легче дать ссылку на хороший проект на codeproject :)


не надо, пущай сама разбирается, самостоятельное думание больший эффект имеет :) Я вон до сих пор чего-то помню из форточного мира :))

А будут вопросы — мы MSDN-ом отбрешемся ;)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
colorDialog на C++
От: Аноним  
Дата: 27.11.05 19:51
Оценка:
Вот в C# есть готовый контрол такой colorDialog.
Окошко, в котором есть возможность выбора цвета и потом этим цветом можно воспользоваться.
Может, кто-нибудь писал что-то подобное и сможет поделиться опытом??
Если да, то подедитеся пожалуйста!
Заранее благодарна!

28.11.05 11:01: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: colorDialog на C++
От: jazzer Россия Skype: enerjazzer
Дата: 27.11.05 20:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот в C# есть готовый контрол такой colorDialog.

А>Окошко, в котором есть возможность выбора цвета и потом этим цветом можно воспользоваться.
А>Может, кто-нибудь писал что-то подобное и сможет поделиться опытом??
А>Если да, то подедитеся пожалуйста!
А>Заранее благодарна!

такая штука пишется за одну минуту, ибо это просто кнопка, из которой можно дергнуть стандартный виндовский диалог для выбора цвета, который вернет этот самый выбранный цвет. Этим цветом, например, можно раскрасить эту кнопку — будет совсем красиво ;)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: colorDialog на C++
От: elGray  
Дата: 27.11.05 20:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот в C# есть готовый контрол такой colorDialog.

А>Окошко, в котором есть возможность выбора цвета и потом этим цветом можно воспользоваться.
А>Может, кто-нибудь писал что-то подобное и сможет поделиться опытом??
А>Если да, то подедитеся пожалуйста!
А>Заранее благодарна!

jazzer имел в виду MFC-шный класс CColorDialog или, если на API — ChooseColor в связке с CHOOSECOLOR

пс
С++ или C# не имеет к этому никакого отношения, это все платформа виновата

ппс
В .Net Framework можно использовать такую штуку, называется кажись Reflector. Наверняка если просмотреть внутрях этой шарпной волшебной кнопочки с помощью этой утилитки, то можно увидеть, чего именно она вызывает из АПИ и ответить на свой вопрос
Это я не к тому, чтобы вы не задавали вопросов, ни в коем случае не поймите неверно, это к тому, что иногда быстрее понять, что делает C#, именно таким способом.
Re[3]: colorDialog на C++
От: Аноним  
Дата: 27.11.05 22:10
Оценка:
Здравствуйте, siv, Вы писали:


А>>Заранее благодарна!


siv>Хм, так все вежливо ответили, ну просто прелесть

siv>Вот, что значит подписаться Анониму в женском роде!
siv>Взять что-ли на заметку, эдакий приёмчик социальной инженерии
siv>П.С.
siv>Это я ни к тому, что отвечать вежливо и любезно не стоит...
Хе, и вправду интересный факт!!
Re[2]: colorDialog на C++
От: Аноним  
Дата: 27.11.05 22:12
Оценка:
G>jazzer имел в виду MFC-шный класс CColorDialog или, если на API — ChooseColor в связке с CHOOSECOLOR

G>пс

G>С++ или C# не имеет к этому никакого отношения, это все платформа виновата

G>ппс

G>В .Net Framework можно использовать такую штуку, называется кажись Reflector. Наверняка если просмотреть внутрях этой шарпной волшебной кнопочки с помощью этой утилитки, то можно увидеть, чего именно она вызывает из АПИ и ответить на свой вопрос
G>Это я не к тому, чтобы вы не задавали вопросов, ни в коем случае не поймите неверно, это к тому, что иногда быстрее понять, что делает C#, именно таким способом.

Все очень здорово, все поняла, только запуталась в том, чтобы цвет кнопки поменять..а мне как раз это и нужно было!!
можно пояснение какое-нибудь?)
Re[3]: colorDialog на C++
От: elGray  
Дата: 27.11.05 22:28
Оценка:
Здравствуйте, Аноним, Вы писали:

G>>jazzer имел в виду MFC-шный класс CColorDialog или, если на API — ChooseColor в связке с CHOOSECOLOR


G>>пс

G>>С++ или C# не имеет к этому никакого отношения, это все платформа виновата

G>>ппс

G>>В .Net Framework можно использовать такую штуку, называется кажись Reflector. Наверняка если просмотреть внутрях этой шарпной волшебной кнопочки с помощью этой утилитки, то можно увидеть, чего именно она вызывает из АПИ и ответить на свой вопрос
G>>Это я не к тому, чтобы вы не задавали вопросов, ни в коем случае не поймите неверно, это к тому, что иногда быстрее понять, что делает C#, именно таким способом.

А>Все очень здорово, все поняла, только запуталась в том, чтобы цвет кнопки поменять..а мне как раз это и нужно было!!

А>можно пояснение какое-нибудь?)

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

пс для siv
все еще есть желание подписываться женскими именами? Ответы то разные могут быть, а вежливыми мы всяко должны быть!
Re[4]: colorDialog на C++
От: LeeLoo Россия  
Дата: 27.11.05 22:39
Оценка:
G>ну че... идем в канцтовары, покупаем гуашь и закрашиваем кусочек монитора на месте кнопки... А если драть из шарпа, то можно Reflector'ом посмотреть, какую гуашь и какие цвета использует фреймворк
G>А хотя... можно и фломастерами, зависит от того, сколько за проект платят

G>пс для siv

G>все еще есть желание подписываться женскими именами? Ответы то разные могут быть, а вежливыми мы всяко должны быть!
Конечно это все очень занимательно!
но мне не надо ничего драть из шарпа — это раз, а во-вторых, меня интересует сам процесс замены цвета у кнопки:
кнопка.ее_цвет=новый_цвет
только такого, к моему сожалению, в сях с не обнаружила, т.к. в свойствах у этих кнопок цвета не прописываются, насколько я понимаю
если вы-таки знаете способ, то поделитесь)
пс
я больше не Аноним!
Re[3]: colorDialog на C++
От: elGray  
Дата: 27.11.05 22:41
Оценка:
Здравствуйте, Аноним, Вы писали:

G>>jazzer имел в виду MFC-шный класс CColorDialog или, если на API — ChooseColor в связке с CHOOSECOLOR


G>>пс

G>>С++ или C# не имеет к этому никакого отношения, это все платформа виновата

G>>ппс

G>>В .Net Framework можно использовать такую штуку, называется кажись Reflector. Наверняка если просмотреть внутрях этой шарпной волшебной кнопочки с помощью этой утилитки, то можно увидеть, чего именно она вызывает из АПИ и ответить на свой вопрос
G>>Это я не к тому, чтобы вы не задавали вопросов, ни в коем случае не поймите неверно, это к тому, что иногда быстрее понять, что делает C#, именно таким способом.

А>Все очень здорово, все поняла, только запуталась в том, чтобы цвет кнопки поменять..а мне как раз это и нужно было!!

А>можно пояснение какое-нибудь?)

На самом деле подписываемся на
— WM_CTLCOLOR в MFC и проверяем nCtlColor и pWnd и возвращаем нужную кисть
— WM_CTLCOLORBTN в WinAPI, проверяем lParam и возвращаем нужную кисть

и еще не забываем уничтожать кисть. Короче, велком ту МСДН
Re[5]: colorDialog на C++
От: elGray  
Дата: 27.11.05 22:43
Оценка:
Здравствуйте, LeeLoo, Вы писали:

LL>только такого, к моему сожалению, в сях с не обнаружила, т.к. в свойствах у этих кнопок цвета не прописываются, насколько я понимаю


ага, в С++ шары нету

LL>если вы-таки знаете способ, то поделитесь)


см. нижее

LL>я больше не Аноним!


оччень приятно...!
Re[5]: colorDialog на C++
От: jazzer Россия Skype: enerjazzer
Дата: 27.11.05 23:00
Оценка:
Здравствуйте, LeeLoo, Вы писали:

LL>я больше не Аноним!


C прибытием :)

В дополнение к сказанному elGray.
Если используется MFC, то можно отнаследоваться от этой кнопки (т.е. от CButton или как ее там), образовать свой новый класс (скажем, CColorButton), в нем перекрыть метод OnPaint и в нем просто заливать всю доступную площадь нужным цветом :)

Потом при создании диалога надо сказать, что у этой кнопки тип не просто CButton, а CColorButton — и все само собой заработает

А если повесить reflection на клик, то его можно будет отловить в самой кнопке ,и тогда CColorButton вообще станет автономным компонентом, коорый можно будет пихать куда угодно, в какой угодно проект.

P.S. Так MFC или не MFC? И какая версия Visual Studio?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: colorDialog на C++
От: elGray  
Дата: 27.11.05 23:14
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, LeeLoo, Вы писали:


LL>>я больше не Аноним!


J>C прибытием


J>В дополнение к сказанному elGray.

J>Если используется MFC, то можно отнаследоваться от этой кнопки (т.е. от CButton или как ее там), образовать свой новый класс (скажем, CColorButton), в нем перекрыть метод OnPaint и в нем просто заливать всю доступную площадь нужным цветом

А текст сверху накатать? А рамку фокуса?

J>Потом при создании диалога надо сказать, что у этой кнопки тип не просто CButton, а CColorButton — и все само собой заработает


А состояния кнопки отслеживать? Нажатая/не нажатая? А тени рисовать? Активная/задизабленая? Тот еще гемор, особенно в первый раз

J>А если повесить reflection на клик, то его можно будет отловить в самой кнопке ,и тогда CColorButton вообще станет автономным компонентом, коорый можно будет пихать куда угодно, в какой угодно проект.


++

J>P.S. Так MFC или не MFC? И какая версия Visual Studio?
Re[7]: colorDialog на C++
От: jazzer Россия Skype: enerjazzer
Дата: 27.11.05 23:29
Оценка:
Здравствуйте, elGray, Вы писали:

G>Здравствуйте, jazzer, Вы писали:


J>>Здравствуйте, LeeLoo, Вы писали:


LL>>>я больше не Аноним!


J>>C прибытием :)


J>>В дополнение к сказанному elGray.

J>>Если используется MFC, то можно отнаследоваться от этой кнопки (т.е. от CButton или как ее там), образовать свой новый класс (скажем, CColorButton), в нем перекрыть метод OnPaint и в нем просто заливать всю доступную площадь нужным цветом :)

G>А текст сверху накатать? А рамку фокуса?


ну какой там может быть текст :)

J>>Потом при создании диалога надо сказать, что у этой кнопки тип не просто CButton, а CColorButton — и все само собой заработает


G>А состояния кнопки отслеживать? Нажатая/не нажатая? А тени рисовать? Активная/задизабленая? Тот еще гемор, особенно в первый раз


ну это да.
Хотя и поучительно ;)

кстати говоря, возможно, я это делал в свое время, перекрыв OnEraseBackground или что-т ов этом роде, она как раз должна возвращать то ли цвет, то ли кисть, которым надо закрасить фон. Это должно автоматически решать все проблемы с рамками, текстами и прочим. (Вообще говоря, цвет рамок и текста надо тоже менять, чтобы не получилось черного на черном. Отсюда радикальный вывод — текст на такой кнопке вообще не нужен ;) )

Только это было тыщу лет тому назад, я уже все забыл :)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: colorDialog на C++
От: elGray  
Дата: 27.11.05 23:44
Оценка:
Здравствуйте, jazzer, Вы писали:

G>>А текст сверху накатать? А рамку фокуса?


J>ну какой там может быть текст


да ладно тебе... а вдруг?!

J>ну это да.

J>Хотя и поучительно

это точно. Но геморойно

J>кстати говоря, возможно, я это делал в свое время, перекрыв OnEraseBackground или что-т ов этом роде, она как раз должна возвращать то ли цвет, то ли кисть, которым надо закрасить фон. Это должно автоматически решать все проблемы с рамками, текстами и прочим.


дык это и есть WM_CTLCOLOR

J>(Вообще говоря, цвет рамок и текста надо тоже менять, чтобы не получилось черного на черном. Отсюда радикальный вывод — текст на такой кнопке вообще не нужен )


ну если радикально черный цвет... да ваще не фиг менять цвет кнопке! Юзер решает, какого цвета у него кнопки

J>Только это было тыщу лет тому назад, я уже все забыл


вот к чему я и веду. Если она решит ее делать OWNERDRAW, то ей напрягаться со всеми этими рисованиями... А вот теперь думай — нам же ж это все вспонимать придется! Если помогать, то до конца ведь. Мне хватило того, что в свое время я понасоздавал класов для всяких разных кнопочек, со свякими наворотами, включая опциональные иконки/картинки/тексты/регионы в одном флаконе.
Хотя... легче дать ссылку на хороший проект на codeproject
Re[4]: colorDialog на C++
От: Carc Россия http://www.amlpages.com/home.php
Дата: 28.11.05 08:08
Оценка:
Здравствуйте, elGray, Вы писали:

G>Здравствуйте, Аноним, Вы писали:



G>На самом деле подписываемся на

G>- WM_CTLCOLOR в MFC и проверяем nCtlColor и pWnd и возвращаем нужную кисть
не получится, кнопочка не поддерживает определение кисти фона в WM_CTLCOLOR
Подробности в МСДН
G>- WM_CTLCOLORBTN в WinAPI, проверяем lParam и возвращаем нужную кисть

G>и еще не забываем уничтожать кисть. Короче, велком ту МСДН
Aml Pages Home
Re[5]: colorDialog на C++
От: Carc Россия http://www.amlpages.com/home.php
Дата: 28.11.05 08:14
Оценка:
CColorButton наследник от MFC-шного CButton
CColorButton::DrawItem, обработчик WM_DRAWITEM
void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    CClientDC dc(this);
    CRect rectClient;
    GetClientRect(&rectClient);

    dc.FillSolidRect(&rectClient,::GetSysColor(COLOR_BTNFACE));
    {
        DrawColorFrame(dc,rectClient);
    }
    dc.RestoreDC(-1);

    dc.SaveDC();
    UINT uFrameCtrl = DFCS_BUTTONPUSH;
    //Is button pushed?
    if ((lpDrawItemStruct->itemState & ODS_SELECTED) == ODS_SELECTED)
        uFrameCtrl |= DFCS_PUSHED;
    //Disabled?
    if ((lpDrawItemStruct->itemState & ODS_DISABLED) == ODS_DISABLED)
        uFrameCtrl |= DFCS_INACTIVE;
    
    if ((lpDrawItemStruct->itemState & ODS_FOCUS) == ODS_FOCUS)
        uFrameCtrl |= DFCS_MONO;

    
    CRect rectColor(rectClient);
    rectColor.DeflateRect(4,4);

    dc.ExcludeClipRect(&rectColor);
    dc.DrawFrameControl(&rectClient, DFC_BUTTON, uFrameCtrl);
    dc.RestoreDC(-1);
    //стрелки
    //DrawArrowBitmap(dc,rectClient);
}

void CColorButton::SetColor(const COLORREF color)
{
    m_crColor=color;
if (!IsWindow(GetSafeHwnd())) return;
    CRect r;
    GetClientRect(&r);
    RedrawWindow(&r,NULL,RDW_INVALIDATE|RDW_UPDATENOW);
}

COLORREF CColorButton::GetColor() const
{
    return m_crColor;
}

void CColorButton::DrawColorFrame(CClientDC &dc, const CRect &rect)
{
    COLORREF rgbBorder = GetSysColor (COLOR_3DDKSHADOW);

    CPen borderPen(PS_SOLID, 1, rgbBorder);
    CPen* pold = dc.SelectObject(&borderPen);

    CRect rectColor(rect);
    
    rectColor.right=rect.right-1-m_sizeBitmap.cx-2*m_nBmpDelta;
    rectColor.DeflateRect(4,4);
    dc.FillSolidRect(&rectColor,m_crColor);

    dc.MoveTo(rectColor.TopLeft());
        
    dc.LineTo(rectColor.right, rectColor.top);//вверх
    dc.LineTo(rectColor.right, rectColor.bottom-1);//право
    dc.LineTo(rectColor.left, rectColor.bottom-1);//низ
    dc.LineTo(rectColor.left, rectColor.top);//лево


    dc.SelectObject(pold);
}
Aml Pages Home
Re[10]: colorDialog на C++
От: Jenyay http://jenyay.net
Дата: 28.11.05 12:04
Оценка:
Здравствуйте, jazzer, Вы писали:

J>WM_CTLCOLOR, насколько я помню, прилетает не в кнопку, а в диалог, который эту кнопку содержит (спасибо биллу гейтсу за наше счастливое). В результате сделать кнопку автономной становится затруднительно.


Софт, исходники и фото
Re[10]: colorDialog на C++
От: Jenyay http://jenyay.net
Дата: 28.11.05 12:08
Оценка:
Здравствуйте, jazzer, Вы писали:

J>WM_CTLCOLOR, насколько я помню, прилетает не в кнопку, а в диалог, который эту кнопку содержит (спасибо биллу гейтсу за наше счастливое). В результате сделать кнопку автономной становится затруднительно.


Я делал окно размером с кнопку и на него уже клал саму кнопку и сообщения приходят в наше "лишнее" окошко.
Софт, исходники и фото
Re[10]: colorDialog на C++
От: Аноним  
Дата: 28.11.05 13:37
Оценка:
Здравствуйте, jazzer, Вы писали:



J>WM_CTLCOLOR, насколько я помню, прилетает не в кнопку, а в диалог, который эту кнопку содержит (спасибо биллу гейтсу за наше счастливое). В результате сделать кнопку автономной становится затруднительно.

1)В MFC/ATL для обработки ситуации используется message reflection.
2)Кнопки бывают не только на диалогах.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.