Invalidate() и Pdc-textout(0,0, U)

  • Автор темы gongex
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

gongex

Гость
#1
В MFC в событии левой кнопки мыши написал u="200";и метод OnDraw не вызывается там через Invalidate()Каким оператором вызвать перерисовку при щелчке?

вопрос 2.В pDC->TextOut(0,0,u) - переменная u не может обьявляться как число,Почему?Я хочу сделать int u; и потом u++; а вынужден писать CString i;
 
G

gongex

Гость
#2
int t;
T++;
pDC->TextOut(0,T,"Table");
Не срабатывает.Почему??
 
G

gamecreator

Гость
#3
<!--QuoteBegin-gongex+30:12:2007, 19:07 -->
<span class="vbquote">(gongex @ 30:12:2007, 19:07 )</span><!--QuoteEBegin-->переменная u не может обьявляться как число,Почему?Я хочу сделать int u; и потом u++; а вынужден писать CString i;[/quote]#include <stdlib.h>
...
pDC->TextOut(0,0,itoa(u,0,10));
....

<!--QuoteBegin-gongex+31:12:2007, 11:07 -->
<span class="vbquote">(gongex @ 31:12:2007, 11:07 )</span><!--QuoteEBegin-->Не срабатывает.Почему??[/quote]C++ различает нижний и верхний регистр

<!--QuoteBegin-gongex+30:12:2007, 19:07 -->
<span class="vbquote">(gongex @ 30:12:2007, 19:07 )</span><!--QuoteEBegin-->метод OnDraw не вызывается там через Invalidate()[/quote]его можно вызвать практически везде.
 
G

gongex

Гость
#4
Добавил в CViev.cpp
#include <stdlib.h>

...
pDC->TextOut(0,0,itoa(u,0,10));
открывается файл xtoa.c и там значится ошибка.Что значит (u,0,10)? ноль и 10 э
то что?

Как текст перебросить на следующую строку?
pDC->TextOut(0,0,"pppp \n lllll \n kkkkk"; не срабатывает "\n"
 
G

gamecreator

Гость
#5
<!--QuoteBegin-gongex+31:12:2007, 14:25 -->
<span class="vbquote">(gongex @ 31:12:2007, 14:25 )</span><!--QuoteEBegin-->открывается файл xtoa.c и там значится ошибка.[/quote]значит
...
char some_str[20];
pDC->TextOut(0,0,itoa(u,some_str,10));
...
char* itoa(int value,char* string,int radix) записывает число value в виде символьной строки в string с системой счисления radix и возвращает указатель на эту строку. radix находится в диапазоне [2;36]
например, выполнив
int value=3;
char string[20];
cout<<itoa(value,string,3);
на экране получим 10
 
P

Pasha

Гость
#6
<!--QuoteBegin-gongex+31:12:2007, 14:25 -->
<span class="vbquote">(gongex @ 31:12:2007, 14:25 )</span><!--QuoteEBegin-->Что значит (u,0,10)? ноль и 10 э
то что?
[snapback]91920" rel="nofollow" target="_blank[/snapback]​
[/quote]"Это что" наверняка подробно описано в документации.
<!--QuoteBegin-gongex+31:12:2007, 14:25 -->
<span class="vbquote">(gongex @ 31:12:2007, 14:25 )</span><!--QuoteEBegin-->Как текст перебросить на следующую строку?
[snapback]91920" rel="nofollow" target="_blank[/snapback]​
[/quote]Выводи текст через pDC->DrawText(...)
 
G

gongex

Гость
#7
Run-Time Check Failure #2 - Stack around the variable 'some_str' was corrupted.

?

void Czet3View::OnDraw(CDC* pDC)
{
Czet3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
char some_str[20];
pDC->TextOut(0,0,itoa(u,some_str,3));
pDC->TextOut(0,0,pDoc->i);
if (!pDoc)
return;

// TODO: ¦b¦№Ґ[¤J­мҐНёк®ЖЄєґyГёµ{¦ЎЅX

}- показывает на эту скобку желтой стрелкой

В общем я хочу чтобы при клике мышки на экране было 0,1,2,3....при клике число прибавляется...Я проштудировал книги 4 и решил сделать первую прогу.Эту
 
G

gamecreator

Гость
#8
может
void Czet3View::OnDraw(CDC* pDC)
{
Czet3Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

char some_str[20];
pDC->TextOut(0,0,itoa(u,some_str,3));
pDC->TextOut(0,0,pDoc->i);

}
 
P

Pasha

Гость
#9
Для: gongex
Все очень просто. Скорее всего, ты не устанавливаешь начальное значение u. itoa(u,some_str,3) запихивает в some_str представление u в троичной системе. Представление оказывается длиннее 20 символов, вылазит за пределы some_str и портит стэк, в котором some_str лежит.
 
G

gongex

Гость
#10
u=5;
char some_str[20];
pDC->TextOut(0,0,itoa(u,some_str,3));
Бесполезно. И сделал после if (!pDoc) тоже не то.Дело в символах,Ты не те операторы дал.
 
G

gamecreator

Гость
#11
а, так если ты указываешь на вывод строку, а не обьект CString, то надо писать количество символов 4-м параметром
 
P

Pasha

Гость
#12
<!--QuoteBegin-gongex+31:12:2007, 16:03 -->
<span class="vbquote">(gongex @ 31:12:2007, 16:03 )</span><!--QuoteEBegin-->u=5;
char some_str[20];
pDC->TextOut(0,0,itoa(u,some_str,3));
[snapback]91932" rel="nofollow" target="_blank[/snapback]​
[/quote]
В каком смысле "бесполезно"? Работает, выводит 12 в левом верзнем углу. И при чем тут вообще символы и операторы?


<!--QuoteBegin-gamecreator+31:12:2007, 16:30 -->
<span class="vbquote">(gamecreator @ 31:12:2007, 16:30 )</span><!--QuoteEBegin-->а, так если ты указываешь на вывод строку, а не обьект CString, то надо писать количество символов 4-м параметром
[snapback]91937" rel="nofollow" target="_blank[/snapback]​
[/quote]Не нужно, есть implicit преобразование. Если, конечно, поддержка юникода выключена :)
 
G

gongex

Гость
#13
не понял.Если int u; обьявляю в Doc.h то она для OnLButtonown не доступна
а если обьявляю в CViev.h то для OnDraw не доступна
Как обявить ваще глобальную переменную для общего доступа?
И обьявлял их как public

(public:
virtual ~Czet3View();
int u;)
или
(public:
virtual ~Czet4Doc();
int i;)



вместо цифры "3" надо поставить "20" и будет показывать реальное число
 
P

Pasha

Гость
#14
<!--QuoteBegin-gongex+31:12:2007, 17:16 -->
<span class="vbquote">(gongex @ 31:12:2007, 17:16 )</span><!--QuoteEBegin-->вместо цифры "3" надо поставить "20" и будет показывать реальное число
[snapback]91940" rel="nofollow" target="_blank[/snapback]​
[/quote]а почему именно 20?
 
G

gongex

Гость
#16
так получилось,не знаю почему.Если u=5 я хочу чтобы писалось 5 а не 12.......12 вместо пяти это недоработка микрософт
 
P

Pasha

Гость
#17
<!--QuoteBegin-gongex+31:12:2007, 21:06 -->
<span class="vbquote">(gongex @ 31:12:2007, 21:06 )</span><!--QuoteEBegin-->так получилось,не знаю почему.Если u=5 я хочу чтобы писалось 5 а не 12.......12 вместо пяти это недоработка микрософт
[snapback]91956" rel="nofollow" target="_blank[/snapback]​
[/quote]а если вместо 20 написать 36, и выполнить для u=29234652, то можно будет посмотрет на пасхальное яйцо от Microsoft :)
 
G

gongex

Гость
#18
Как обьявить int u; чтобы срабатывало и при клике мышки и в зарисовке OnDraw?

Хочу написать в окне представления несколько стихов,для этого надо обьявлять столько переменных,сколько строк?Нельзя ли написать весь стих в одной переменной и показывать его в переводом на новую строку?
 
G

gongex

Гость
#19
int i=3;
pDC->TextOut(0,i,"p");не срабатыывает

(вот так начались мои опыты на с++:unsure:) )
 
P

Pasha

Гость
#20
Для: gongex
Не пытайся взять плюсы наскоком. Найди хороший учебник по C/C++. Потом книгу по программированию под Windows, и книгу по использованию MFC.
 
Статус
Закрыто для дальнейших ответов.