Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [Все]   Вниз
  Печать  
Автор Тема: цвет текстовый & фон евойный  (Прочитано 51232 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 19-09-2003 04:39 » 

не могу поменять цвет текста и фона

пробовал так:


Код:
void CShelekToyDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
       CDialog::OnShowWindow(bShow, nStatus);
       CWnd *ckWND=(CCheckListBox*)GetDlgItem(IDC_color1);
       CDC *ckCDC = ck->GetDC();
       ckCDC->SetTextColor(RGB(255,255,255));
       ckCDC->SetBkColor(RGB(0,0,0));
       ckWND->Invalidate();
}
[/size]
« Последнее редактирование: 19-11-2007 19:58 от Алексей1153++ » Записан

PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-09-2003 04:44 » 

Так точно не прокатит.

Как только ты вызовешь Invalidate();  будет получен новый СDC и твои сеты пропадут в туне.

Гдето должно быть свойство самого CCheckListBox отвечающее за цвет его и меняй.
Записан

Да да нет нет все остальное от лукавого.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 19-09-2003 07:13 » 

Цвета для подобных вещей делаются в перегруженной OnCtlColor:

Пример из MSDN:

// This OnCtlColor handler will change the color of a static control
// with the ID of IDC_MYSTATIC. The code assumes that the CMyDialog
// class has an initialized and created CBrush member named m_brush.
// The control will be painted with red text and a background
// color of m_brush.

HBRUSH CZilchDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   // Call the base class implementation first! Otherwise, it may
   // undo what we're trying to accomplish here.
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   // Are we painting the IDC_MYSTATIC control? We can use
   // CWnd::GetDlgCtrlID() to perform the most efficient test.
   if (pWnd->GetDlgCtrlID() == IDC_MYSTATIC)
   {
      // Set the text color to red
      pDC->SetTextColor(RGB(255, 0, 0));

      // Set the background mode for text to transparent
      // so background will show thru.
      pDC->SetBkMode(TRANSPARENT);

      // Return handle to our CBrush object
      hbr = m_brush;
   }

   return hbr;
}

не разберёшься - кричи - поможем, только со временем у меня сегодня будет сложновато
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 19-09-2003 14:46 » 

вроде понятно.

только - как объявить функцию в карте сообщений?

BEGIN_MESSAGE_MAP(CShelekToyDlg, CDialog)
   //{{AFX_MSG_MAP(CShelekToyDlg)
   ON_Не понял?
   //}}AFX_MSG_MAP
END_MESSAGE_MAP()
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 20-09-2003 07:11 » 

Привет, коротко выбрался на выходные:

сообщение вставляешь стандартно:

Ctrl+W -> Выбираешь тот диалог класс, который нужен
в окне сообщений (messages) - WM_CTLCOLOR
Dbl. Click

В нижнем окне появляется:
OnCtlColor   ON_WM_CTLCOLOR
Dbl. Click

ОКазываешься сразу в финкции.

Если мастера классов нет, то

в .h
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

в .срр
ON_WM_CTLCOLOR()

Ну вроде всё, теперь наверное только в понедельник выберусь
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 20-09-2003 07:25 » 

делал так:

HBRUSH CShelekToyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   
   //ID элемента
   int id=pWnd->GetDlgCtrlID();
   if (id == IDC_color1)
   {
      // меняем цвет закорючек
      pDC->SetTextColor(RGB(255, 255, 255));
      // будущий цвет фона
      pDC->SetBkMode(TRANSPARENT);
      hbr = CBrush(RGB(0, 0, 0));
   }
   return hbr;
}

не получаецца  Так больше нельзя...

в этот участок прога попадает- под отладчиком смотрел
Записан

Anonymous
Гость
« Ответ #6 : 20-09-2003 07:35 » 

hbr = CBrush(RGB(0,0,0)) - оштибка

надо использовать member!

Локальная переменная убирается из стека после вызова функции

почитай внимательно комментарийй к MSDN примеру 3 строчка
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 20-09-2003 16:48 » 

:arrow: но текст-то тоже не белеет!

 :arrow: фон мне неважно, но я попробовал с глобальной брашью - никакой реакции

 :arrow:
Цитата

А вообще то кинь проект на мыло


коментарии только накалякаю, а то проект спонтанный - написал ночью за 4 часа. Далее шли исправления пары незаметных сразу глюков да добавление новых функций. Все версии видел только ГРОМ :twisted:  Последняя версия - v2.0, на подходе ещё...
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 22-09-2003 08:14 » 

"Короче, Склифасофский":

Делай раз:
в диалог класс вставляй:
   CBrush m_bk;
   COLORREF m_crText,m_crBk;

Делай два:
в .срр

 в конструктор:
   m_crBk = RGB(0x12,0x34,0x56);
   m_crText = RGB(0xAB,0xCD,0xEF);
   m_bk.CreateSolidBrush(m_crBk);

HBRUSH CTestDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   switch (nCtlColor)
   {
      case CTLCOLOR_STATIC:
         switch (pWnd->GetDlgCtrlID())
         {    
            case IDC_CHECK1:
               pDC->SetBkMode(TRANSPARENT);
               pDC->SetTextColor(m_crText);
               return (HBRUSH) m_bk;
            break;
         }  
         break;
   }

   return CDialog::OnCtlColor(pDC,pWnd,nCtlColor);
}

Делай три:
Ctrl+F5 - наша ёлочка гори!
 Жжешь
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 22-09-2003 10:00 » 

чичас попробоваю!

ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
ёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁёЁ
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 22-09-2003 10:40 » 

кажется я понял, чего не понимаю (прости за каламбур, а телом бел): если издеваться над элементом STATIC , то всё получается! А у меня-то элементы - набор переключателей (в стиле push-like - как кнопки), и с ними ничего не выходит  Ха-ха-ха

а на улице - 0 по Цельсию!!!!!!!!!!!!!!!!!!
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 22-09-2003 12:17 » 

Я тоже понял! Улыбаюсь Я то про простые контроллы - а ты про список. Помнится делал такое для выбора цвета и типа линии. Самое простое - переписать DrawItem в child от CCheckListBox. Там ты получишь ВСЁ - и рисуй себе на здоровье, что и как хочешь.

Я тут ща наспех набросал - в принципе работает:

void CTestCheckListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

   pDC->SetBkColor(RGB(255,0,0));
   pDC->SetTextColor(RGB(255,255,0));

   CString strText;
   GetText(lpDrawItemStruct->itemID, strText);

   int cyItem = GetItemHeight(lpDrawItemStruct->itemID);

   pDC->TextOut(lpDrawItemStruct->rcItem.left,
      lpDrawItemStruct->rcItem.top,strText);
}

ну там, всякую чистоту сам наведёшь.

Если это тебя ну хоть как-то утешит - у нас жара градусов эдак под 26, небушко голубое, солнышко - а тут сиди и работай!!!
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 22-09-2003 16:26 » 

ох, Джон, спасибо, конечно, но...

притормози маненько, и расскажи как сделать дитё  Отлично   для CCheckListBox ?
я иак ещё ни разу не делал - не знаю Жаль  Жаль  Жаль
Записан

Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #13 : 22-09-2003 17:14 » 

class MyChild : public CCheckBoxList
{

ВСЕ )))

}
Записан

А птичку нашу прошу не обижать!!!
Anonymous
Гость
« Ответ #14 : 23-09-2003 06:02 » 

Ну да! Всё правильно! Эт хорошо - интуиция у тебя есть.

Если сомнения относительно всего остальнго, то это можно до предела автоматьзировать. Ессно это не избавит  тебя от  "разбирательства" в коде - ты должен понимать, что там происходит.

Делай раз

"Меню" -  "Вставить(4п слев.)" - "Новый класс 1п сверх

в комбобоксе MFC-class

Имя - какое хочешь напр. СMyCheckLst

Базовый класс комбобокс - CListBox - чек лист есть дитё от него

потом - "Ок"

Делай два - идёшь в получившийся .Н и делаешь "Найти и заменить" CLIstBOx - CCheckListBox. Такую же фигню проделываешь с .СРР файлом.

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

из левого списка выбираешь DrawItem и двойной щелчёк по ней. она появится в правом окне. Если собираешься делать чекбоксы своей высоты то сразу вставь на этом же месте MeasureItem.

Потом двойной щелчок в правом окне по DrawItem - и ты оказываешься в теле функции.


Делай три.

В редакторе ресурсов - вставляешь ListBox и делаешь по нему Ctrl+Dbl.Click

даёшь имя переменной, в категории выбираешь "контрол", а внизу из списка выбираешь твой класс. Подтверждаешь с Ок

Всё

Я сегодня дома - иногда буду в инет вылазить, а вчерашний набросок, на работе остался. А то бы кинул бы его тебе на мыло. Ну если можешь потерпи до завтра. А вообще-то полистай Страуструпа.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 23-09-2003 06:48 » 

Страуструп - где бы его достать, давно бы добыл!

я сам сейчас пойду на работу - а там вряд ли до инета доберусь. Вечером если только. Часов в 22:00 - у тебя это, наверное, где-то = 16:00

 Отлично интуиции у меня навалом, даже иногда мне это мешает Отлично  Отлично

вот сейчас она мне подсказывает, что получу втык от начальника за то, чтобы делать работу, занимаюсь программой  Ага
Записан

Anonymous
Гость
« Ответ #16 : 23-09-2003 10:05 » 

Дык на сайте посмотри, где-то должен быть, а нет - так я тебе кину, большой только зараза, в PDF.  У тебя сколько в ящик влезет? Хотя можно и по частям.

Ща подожди, вот тут попробуй

anatolix.naumen.ru

там вообще книг классных дофига, недавно по STL появилась
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 23-09-2003 11:39 » 

Джон, всё получается до момента, когда элементу присваивается переменная - там в нижнем списке только CListBox, а моего класса нет...  :?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 24-09-2003 07:41 » 

Упс! значит, что-то сделал неправильно.
По порядку:

какая система? (винды,студия, сёрвис паки)

Вдит ли твой "Мастер классов" новый класс?

у меня подобное тоже иногда случалось, но после последних SP не видел.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 24-09-2003 14:33 » 

Цитата

значит, что-то сделал неправильно

- именно! названия классов перепутал

теперь я сделал так: пустой проект "123", в нём как ты говорил -

class C1:CCheckListBox;

переменную назвал m_1; в нижнем списке мой класс появился.

Но при сборке - 7 error(s);

в 123Dlg.h я добавил упреждение   class C1;   , тогда стало:

--------------------Configuration: 123 - Win32 Debug--------------------
Compiling...
123.cpp
c:\program files\microsoft visual studio\myprojects\123\123dlg.h(25) : error C2079: 'm_1' uses undefined class 'C1'
123Dlg.cpp
c:\program files\microsoft visual studio\myprojects\123\123dlg.h(25) : error C2079: 'm_1' uses undefined class 'C1'
C:\Program Files\Microsoft Visual Studio\MyProjects\123\123Dlg.cpp(78) : error C2664: 'DDX_Control' : cannot convert parameter 3 from 'int' to 'class CWnd &'
        A reference that is not to 'const' cannot be bound to a non-lvalue
Generating Code...
Error executing cl.exe.

123.exe - 3 error(s), 0 warning(s)


и всё, затык Жаль
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #20 : 25-09-2003 08:02 » 

Привет

в .h вставляй #include "c1.h"

Вчера вечером добрался до твоей проги. По первому вопросу - этот способ самый дешёвый и сердитый - сам так делаю. Самому в буфер обмена загонять можно - только посложнее, да и не надо здесь этого. Маленькая поправочка:
вместо 9999 ставь -1. Если первый параметр 0 а второй -1 это значит выделить всё.
Ну... я ещё скроллинг выключаю (последний параметр - FALSE) и кстати не путай
BOOL c bool, TRUE c true: bool - это сишный тип данных, а BOOL - целый тип.

Теперь к цветам - "цветочкам" Отлично - тоже каламбур - типа ягодки будут впереди:

Я так и не понял где у тебя CheckListBox? Т.е. ты, наверно, хочешь его вместо RadioButtons вставить. Хотя, честно говоря, не понимаю - зачем? Выбор цвета лучше сделать с помощью стандартного диалога. Тогда у тебя все цвета доступны. Ну да ладно, в конце концов, не моего ума это дело. Ты хочешь так и просишь помощи.

Значит так - в твоей проге OnCtlColor не получает ID нужных RadioButtons.
Но это не главное - OnCtlColor не меняет ничего если у RadioButton представленна в виде кнопки. Почему - не знаю - наверное кнопка отрисовывается позже. Те если это нормальная RadioButton - всё хокей! если кнопка, то нифига.

Посему вопрос - стоит это дело дальше копать или ты хочешь концепцию выбора цвета поменять? Отлично
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 25-09-2003 16:34 » 

Джонни, здорово!!!

копать не будем, пусть ОНИ копают Улыбаюсь

 :arrow: про цветной тект/фон вроде понятно, хотя из-за
 
Цитата
OnCtlColor не меняет ничего если у RadioButton представленна в виде кнопки

и остался какой-то осадок... Ну и хрен с ним.
в версии 3.0 (уже на верстаке) вместо переключателей будет принципиально другой способ(он уже есть)

 :arrow: за
Цитата

вместо 9999 ставь -1. Если первый параметр 0 а второй -1 это значит выделить всё.

- спасибо! Как давно я это искал! Почему в умных книгах не пишут? Кстати никак не пойму, как установить вертикальную полосу в Edit в нужное положение - допустим, в самый конец, когда обновляю, он в самом верху, сволочь. :twisted:

 :arrow:
Цитата

и кстати не путай
BOOL c bool, TRUE c true: bool - это сишный тип данных, а BOOL - целый тип.


расскажи непонятливому мне поподробнее  Здесь была моя ладья...

 :arrow: хочешь новый каламбур? (немного не в тему, зато сколько смысла!)

"печатному слову больше не верят - больше верят непечатному"



 передавай привет всему Bielefeld от всего Златоуста!
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #22 : 26-09-2003 15:07 » 

Привет, сорри за опоздание.
1
на счёт кнопки - не переживай - в крайнем случае мы её сами нарисуем. Самый классный способ, правда времени больше уходит.

2.
CEdit *p = (CEdit*)GetDlgItem(IDC_edToyText);
p->LineScroll(p->GetLineCount(),0);

3.
typedef int BOOL;
#define FALSE               0
#define TRUE                1

те это простые целые числа, в то время как, bool тип данных. То что ты его можешь на месте BOOL использовать - это одно, а представь взбредёт комунить, в бошку TRUE FALSE по другому определить и всё приплыли.
В общем если стоит в качестве параметра BOOL - значит надо TRUE или FALSE передавать. Тк ожидается простой целый тип,  а не bool.

4. Отлично Не знаю как насчёт "верят", а непечатное по-моему выглядит убедительней.

5. Привет Билефельду передам - если сегодня до него доберусь - такое чувство, что я с этой работы никогда не свалю.

Ну и ты там тоже передавай - кстати всё хотел тебе сказать - красивое название "Златоуст"!

На выходные вряд-ли выберусь. Так что до понедельника.
Пока.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 26-09-2003 18:58 » 

передал.


"31 августа (11 сентября нов.ст.) 1754 года Указом Берг-Коллегии в канцелярию Главного правления Сибирских, Казанских и Оренбургских заводов было разрешено тульским купцам и заводчикам Мосоловым (Ивану Перфильевичу и его племяннику Василию Максимовичу) строить железовододействуемый Златоустовский завод на реке Аю (в устье р.Тесьмы) в Куваканской волости Исетской провинции."
Этот день считается официальной датой основания города Златоуста.
___Златоустовская Энциклопедия, т1

Название города - точно никто не знает - скорее всего в честь святого Иоанна Златоуста

 :arrow: спасибо за     p->LineScroll(p->GetLineCount(),0);

 :arrow: а как тебе такое:
Российские поезда - самые поездатые поезда в мире!

пока, до понедельника
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 09-10-2003 04:56 » 

Джон, здорово. И всем кто читает тоже.

Джон, теперь немного по другой теме, но похоже.

Я про тот проект, с которого мы начали, когда ты ещё был гостем(там про порт было).

Так вот, я пересоздал проект, сделал там класс для вывода графика
class Plotter1::CEdit;

не могу получить контекст
пробовал так (объект плоттера создан во View, IDC_edCDCforPLOTTER --идентификатор плоттера ):
Код:
//закраска контекста.
void CPlotter1::FillCDC()
{
//это вообще не работает - ломается прога
CDC* wndDC=((CPlotter1*)GetDlgItem(IDC_edCDCforPLOTTER))->GetDC();
//эти два - выдают DC для View , а не плоттера
CDC* wndDC=GetDC();
CDC* wndDC=this->GetDC();
}
« Последнее редактирование: 19-11-2007 20:03 от Алексей1153++ » Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #25 : 09-10-2003 08:15 » 

Привет, Если честно, то я не помню какой у тебя тогда проект был - если нетрудно - напомни SDI, Dialog MFC? и всё такое.
Поподробнее структуру:

есть диалог с классом, в нём есть edit от твоего класса?
или у тебя просто edit без шаблона ресурсов и ты в MFC CView делаешь Create()?

Где ты хочешь вызывать FillCDC()?

По ходу пьесы - Опять перемудрил Ага

CDC* wndDC=GetDC(); и CDC* wndDC=this->GetDC();
это одно и то же, "this->" присутствует всегда "незримо" для членов класса и может быть опущено.

Как у тебя определён класс? это как - class Plotter1::CEdit; Я шокирован! ?
думаю ты хотел написать: class Plotter1: publc CEdit { ... }

потом: судя по определению функции void <b>CPlotter1</b>::FillCDC()
это член функция класса CPlotter1 это тоже самое, что и Plotter1?
если да, то тебе не надо делать ((CPlotter1*)GetDlgItem(IDC_edCDCforPLOTTER))
ты уже в окне!
Поэтому запись CDC* wndDC=GetDC(); была бы правильной, НО
у тебя  девайс контекст ещё не существует!

поэтому делают так:

void CPlotter1::FillDC()
{
   CPaintDC dc(this); // !!!!!!!

        пример:
   CBrush br;
   br.CreateSolidBrush(RGB(255,0,255));
   CRect rc;
   GetClientRect(&rc);
   dc.FillRect(rc,&br);
}

Теперь всё зависит от того где FillDC() будет вызвана  Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #26 : 09-10-2003 09:48 » 

привет

Цитата

SDI, Dialog MFC? и всё такое.

 - да

Джон, конечно же

class Plotter1: publc CEdit { ... }   :oops:

вот что значит визард - такие вещи не запоминаются...

 :arrow: я помещаю Edit на форму и указываю класс CPlotter1

 :arrow: FillDC()-член CPlotter1, вызывается из CPlotter1 и из View

 :arrow: а что это за клас  - CPaintDC ?
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #27 : 09-10-2003 13:42 » 

Цитата: Алексей1153
привет
 :arrow: FillDC()-член CPlotter1, вызывается из CPlotter1 и из View


Я имел ввиду в какой функции? Это был вообще-то вопрос с подвохом, поэтому и Ага
Если ты вызываешь его один раз, ничего не увидишь как бы не старался.
Всё будет сразу же WM_PAINT перерисовано. Поэтому и вызов надо делать в OnPaint, чтоб при каждом WM_PAINT происходил вызов FillDC().

class CPaintDC : public CDC {...} Ага
Цитата: MSDN

The CPaintDC class is a device-context class derived from CDC. It performs a CWnd::BeginPaint at construction time and CWnd::EndPaint at destruction time.

A CPaintDC object can only be used when responding to aWM_PAINT message, usually in your OnPaint message-handler member function.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #28 : 09-10-2003 14:16 » 

у вас глаз дёргается (с)  Ага

 :arrow:
Цитата

MSDN писал(а):

- это круто! (каламбур, типа)

 :arrow: то есть CPaintDC - это CDC для OnPaint.

 :arrow: Джон,

GetClientRect(&rc);  - возвращает прямоугольник изменённой части. Не есть гут, мне бы надо прямоугольник ВСЕГО окошка CPlotter1 (того , что лежит на форме)
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #29 : 09-10-2003 15:03 » 

Не совсем так. Обычно OnPaint получает свой СДС, а тебе его надо запустить, те так  как ты хотел. CPainDC запускает "рисование" те создает девайс контекст для окна в конструкторе и вырубает его в деструкторе. А в промежутке у тебя есть указатель на СДС. У него и функций то никаких нет, только данные для окошка, рисовальной структуры и конструктор.

В OnPaint  это необходимо, чтоб рисование окна не затёрло твое рисование.

2.
эт я к примеру написал. Для окна - GetWindowRect() только не забудь RectToClient
или наоборот - ща времени нет. А со след. недели в отпуск сваливаю на неделю аж до 20.10 так что завтра последний день, если планируешь что, на след. неделю, то
завтра договоримся - я из дома в принципе в инет вылазию, только неохотно и поздно ночью по-нашему. Готовь вопросы - если много - то лучше код на мыло.

ну пока - до завтра, а то на поезд опаздаю
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Vorlon
Гость
« Ответ #30 : 10-10-2003 11:00 » 

Извините что влезаю в вашу беседу, но может подскажите как получить для SetBkColor(hdc,RGB); значение RGB являющееся фоном окна hWnd на которое выводится текст. По умолчанию используется белый Жаль
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #31 : 10-10-2003 11:36 » 

Не совсем понял вопрос. Если речь идёт о default цвете, то он выставляется в настройках для окна и записывается в HKEY_CURRENT_USER\Control Panel\Colors
параметр Window.

Если программно - GetBkColor().

Если хочешь знать знать какой цвет был у фона, то это возвращает SetBkColor.

Или ты хочешь знать как RGB получается?

Уточни вопрос.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Vorlon
Гость
« Ответ #32 : 10-10-2003 12:13 » 

Джон, спасибо, как RGB получается я знаю. Меня GetBkColor() интересовало, ща проверю.
Записан
Vorlon
Гость
« Ответ #33 : 10-10-2003 12:51 » 

Не, не то, после hdc=BeginPaint(hWnd,&ps),
GetBkColor(hdc) возвращает RGB(255,255,255) т.е. белый по умолчанию.
А окно:  WndClass.hbrBackground  = (HBRUSH)(COLOR_WINDOW+0x01);
Как получить значение (COLOR_WINDOW+0x01) в RGB(..,..,..)?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #34 : 10-10-2003 13:09 » 

Ааааа ну так это индекс цвета в винде, а не цвет.

GetSysColor(COLOR_WINDOW)

кстати, ща посмотрел

COLOR_WINDOW = 5

COLOR_WINDOW+1 = 6 = COLOR_WINDOWFRAME

лучше используй COLOR_WINDOWFRAME
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Vorlon
Гость
« Ответ #35 : 10-10-2003 14:09 » 

Джон, получилось!
Вот только в GetSysColor(BgColor),
BgColor должен быть на 1 меньше чем WndClass.hbrBackground
странно  Здесь была моя ладья...
Записан
Vorlon
Гость
« Ответ #36 : 10-10-2003 14:31 » 

Еще одна проблема:
Какое поле структуры LOGFONT, и на что надо изменить, что бы все символы были одной ширины?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #37 : 10-10-2003 14:42 » 

lfFaceName  Улыбаюсь

Это тебе надо использовать моноширные шрифты.
Записан

Megabyte be with you!
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #38 : 10-10-2003 14:42 » 

Вообщето это зависит от фонта, посмотри на форуме уже где-то обсуждалось.
Извини пора сваливать, часов через 5 вылезу.
Попробуй вот что:

Цитата: MSDN


lfPitchAndFamily
 
Specifies the pitch and family of the font. The two low-order bits specify the pitch of the font and can be one of the following values.
DEFAULT_PITCH
FIXED_PITCH
VARIABLE_PITCH

Bits 4 through 7 of the member specify the font family and can be one of the following values.

FF_DECORATIVE
FF_DONTCARE
FF_MODERN
FF_ROMAN
FF_SCRIPT
FF_SWISS

The proper value can be obtained by using the Boolean OR operator to join one pitch constant with one family constant.

Font families describe the look of a font in a general way. They are intended for specifying fonts when the exact typeface desired is not available. The values for font families are as follows. Value Meaning
FF_DECORATIVE Novelty fonts. Old English is an example.
FF_DONTCARE Don't care or don't know.
FF_MODERN Fonts with constant stroke width (monospace), with or without serifs. Monospace fonts are usually modern. Pica, Elite, and CourierNew® are examples.
FF_ROMAN Fonts with variable stroke width (proportional) and with serifs. MS® Serif is an example.
FF_SCRIPT Fonts designed to look like handwriting. Script and Cursive are examples.
FF_SWISS Fonts with variable stroke width (proportional) and without serifs. MS® Sans Serif is an example.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Vorlon
Гость
« Ответ #39 : 10-10-2003 16:20 » 

Цитата: Lex
lfFaceName  Улыбаюсь

Это тебе надо использовать моноширные шрифты.


может, ты на этом уже собаку сьел, а я только разбираюсь - что и как. Мог бы по конкретней написать:
lfPitchAndFamily=FF_MODERN и не все шрифты могут быть моноширинными.

Я "Times New Roman" использовал и ничего не выходило.
Но и на этом спасибо, особенно тебе Джон - у меня MSDN отсутствует.
Записан
Anonymous
Гость
« Ответ #40 : 10-10-2003 23:11 » 

Не Times как раз не подходит, да и не экранный это фонт. Из моноширинных Courier-ы.
lfPitchAndFamily=FF_MODERN запись не совсем правильная, тк ты ставишь только биты с 4 по 7

обычно их коибинируют с pitch-ами

lfPitchAndFamily=FIXED_PITCH | FF_MODERN;

и возьми какой нмть Courier они на каждой винде должны быть. К сожалению нет возможности поиграться с какм-нить проектиком. Так что выдаю из головы, могу и напутать.
Записан
Vorlon
Гость
« Ответ #41 : 11-10-2003 06:55 » 

Courier-ы и lfPitchAndFamily=FF_MODERN проверил - все нормально, но добавлю на всякий случай и FIXED_PITCH.
Еще раз благодарю за помощь.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #42 : 15-04-2006 10:32 » 

(комент:)

выжимку - в FAQ
Записан

Страниц: 1 2 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines