Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #30 : 23-04-2010 11:22 » |
|
собственно, им отправятся мессаги, _AFXWIN_INLINE void CButton::SetCheck(int nCheck) { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, BM_SETCHECK, nCheck, 0); }
_AFXWIN_INLINE void CEdit::Copy() { ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, WM_COPY, 0, 0); }
но понимать они станут их как придётся - то есть сообщения с номером ((int)BM_SETCHECK) у статика нету вовсе , а сообщение WM_COPY статик может тупо не обрабатывать. Поэтому всё происходит тихо и без скандала А происходит ничего Ладно, насчёт классов я понял, что мемберы придётся фтыкать всё равно
|
|
« Последнее редактирование: 23-04-2010 11:24 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #31 : 23-04-2010 11:31 » |
|
Лёш, хорошо. Покажи мне место (код) в цепочке вызовов GetDlgItem где создаётся объект именно типа CButton. Исходники все открыты.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #32 : 23-04-2010 11:39 » |
|
нигде не создаётся - я же уже говорю, что понял ) Там (в CButton и других) только функции для работы c HWND То есть я могу смело делать для кнопки так: CMFCButton *pButton = (CMFCButton*) GetDlgItem(IDC_BUTTON1);
и потом работать с. А мембер необходимо добавить, чтобы появилась запись в DoDataExchange и поменялась обработка сообщений, а иначе это так и останется обычная серая кнопа ))
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #33 : 23-04-2010 13:13 » |
|
Хммм... сомневаюсь, что ты получишь то, что хочешь. У этих объектов разная природа.
Ещё раз. GetDlgItem работает только на уровне коммуникации. Тебе же нужны свойства - цвет, вкус, запах. Те ты должен добавить новый объект обладающий этими свойствами в диалог, физически добавить.
Хотя попробуй. Я не знаю что они там в этих новых классах намудрили. Но раньше такое не прокатывало. Каждый раз надо было создавать объекты. Иначе это противоречит логике работы с контролами.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #34 : 23-04-2010 17:28 » |
|
попробовал чисто с заданием мембера и связыванием в DoDataExchange: CMFCButton - по виду обычная кнопка, работает, но цвет не меняет CMFCSpinButtonCtrl - спин контрол работает на ура, цвет/стиль меняется вместе с фреймом CMFCEditBrowseCtrl - едит с виду тоже обычный едит, стиль не меняется
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #35 : 30-04-2010 09:39 » |
|
кстати, забыл отписаться ) закрасить фон CDialog (и вообще CWnd) в соответствии с темой можно так BOOL CMyDlg::OnEraseBkgnd(CDC* pDC) { RECT r; GetClientRect(&r); CMFCVisualManager::GetInstance()->FillReBarPane(pDC,(CBasePane*)this,r); return 1; }
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #36 : 30-04-2010 09:56 » |
|
а чтобы статики стали прозрачные, надо HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH h=CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC) { static CBrush br; if(!br.m_hObject) { LOGBRUSH logBrush; ::memset(&logBrush,0,sizeof(logBrush)); logBrush.lbStyle = BS_NULL; br.CreateBrushIndirect(&logBrush); }
pDC->SetBkMode(TRANSPARENT); return br; }
return h; }
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #37 : 30-04-2010 11:01 » |
|
О как. Всё-таки через менеджера. Ну вот тебе и флаг в руки. Долби эти новые CMFC*-классы. Кто-то должен. Ты кстати со студией не разобрался? Почему она у тебя так с ресурсами неадекватно?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #38 : 01-05-2010 10:10 » |
|
О как. Всё-таки через менеджера. Ну вот тебе и флаг в руки. Долби эти новые CMFC*-классы. Кто-то должен. ну да, там некоторые элементы прямо нарисовать можно. Одно только нехорошо - рамка с текстом (статик же тоже) при прозрачности некрасиво выглядит - линия . Пока прервался, потом ещё поковыряю - может тупо через менеджер тоже отрисую Ещё не могу разобраться, как сменить цвета темы, хотя они там все protected как на ладони - какая-то там хитрость есть всё таки Ты кстати со студией не разобрался? Почему она у тебя так с ресурсами неадекватно?
не разбирался, подключить проект для копирования ресов несложно и ненапряжно И удалить потом тоже
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #39 : 01-05-2010 19:13 » |
|
Ещё не могу разобраться, как сменить цвета темы, хотя они там все protected как на ладони - какая-то там хитрость есть всё таки Я думаю должна быть возможность определять пользовательские темы. Или же посмотреть где у них стандарты забиты и какого они типа.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Phodopus
Интересующийся
Offline
|
|
« Ответ #40 : 14-05-2010 11:54 » |
|
Ресурсы (диалог) же можно просто скопировать в одном проекте (правой кнопкой - Copy) и потом вставить в другом... ты меня понял Кастинг/не кастинг, а GetDlgItem вернёт указатель на объект CButton (хоть и приведённый к CWnd*) Серьезное заблуждение. Возвращает он именно CWnd и только CWnd. Приведение к CButton некорректно, хотя все повсеместно так и делают, но срабатывает оно лишь потому что методы типа SetCheck() объявлены как inline и реализованы как SendMessage(). Абсолютно корректным будет лишь CButton::Attach()/CButton::Detach()
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 14-05-2010 15:26 » |
|
Phodopus, уже разобрались, всё гораздо проще: хочь ты CWnd, хочь CButton - всё едино это суть HWND и всё Все методы обёрток - лишь шлют сообщения объекту HWND. Поэтому приводить так безопасно ИНЛАЙН уж точно ни при чём Вот из-за таких как ты ваятелей и бытует мнение о "сложности" и "неудобности" MFC
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #42 : 14-05-2010 22:31 » |
|
Зря ты так, Лёш. Phodopus только сказал как на самом деле всё происходит. И лучше всего не просто доверять своему опыту в тех случаях, когда "стандартное" использование работает, а ещё и понимать, почему оно это делает, и "сложности" MFC это никак не придаёт. Скорее наоборот, все эти "сложности" и "неудобства" являются результатом использования MFC по привычке "делай как я", до тех пор, пока это работает, а как только перестаёт работать, все начинают ругаться и плеваться, обвиняя корявость MFC, но никак не себя родимого, поленившегося в своё время разобраться.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #43 : 15-05-2010 04:30 » |
|
Джон, не знаю, как у него там чего происходит, у меня всё работает, плеваться не приходилось
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #44 : 15-05-2010 09:29 » |
|
До поры до времени.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #45 : 15-05-2010 14:11 » |
|
Джон, а если и не придётся ? ))
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #46 : 15-05-2010 14:31 » |
|
Леш, немножко переучиться не так сложно. Зато будешь больше уверен в качестве своей работы. Я так думаю.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #47 : 16-05-2010 13:38 » |
|
Переучиться в чём ?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #48 : 16-05-2010 13:56 » |
|
В своих привычках В частности - о чем вы тут спорили.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #49 : 17-05-2010 02:34 » |
|
ну, мы вроде не о привычках, а об унутреннем устройстве )
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #50 : 17-05-2010 05:04 » |
|
А что ты под конец говорил? Как раз о своих привычках.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #51 : 17-05-2010 05:06 » |
|
ммм, даже поиском поискал "привыч", у меня не было таких слов. У Джона было
|
|
|
Записан
|
|
|
|
|