Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Глобальный HDC и имя переменной - C++

08.08.2012, 13:17. Просмотров 591. Ответов 7
Метки нет (Все метки)

1) Почему глобальный HDC невозможен? Точнее, если обработать WM_CREATE с добавлением :
C++
1
hdc = BeginPaint(hWnd, &ps);
или
C++
1
hdc = GetDC(hWnd);
То после выхода из WM_CREATE нарисовать что-то в этом hdc уже не выйдет. Во всяком случае на экране ничего не будет. Почему? Разве hWnd меняется?

2) Можно ли как-то имя переменной получить в виде строки? Допустим :
C++
1
2
3
int abc = 10, x;
string b = Convert(abc);
cout << b; // "abc"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 13:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Глобальный HDC и имя переменной (C++):

Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной - адрес переменной - значение п - C++
Создать две переменных, ввести их с клавиатуры. Вывести строки: имя переменной - адрес переменной - значение переменной.

Имя переменной - C++
В каких случаях следует писать имя переменной капсом? Это техническая необходимость или общепринятое соглашение?

Как вывести имя переменной? - C++
#define PRINT(var_) std::cout &lt;&lt; #var_ &lt;&lt; &quot;: &quot; &lt;&lt; var_ &lt;&lt; std::endl; template&lt;typename T&gt; void print(T obj) { PRINT(obj); } ...

Разное имя переменной в цикле - C++
Привет Всем. У меня возник такой вопрос. Во вложенных циклах мне необходимо инициализировать переменные, которые будут отличаться...

Как объявить имя новой переменной в new - C++
Здравствуйте, 1)Функция должна создавать новый объект структуры : struct Wagen { int weight;; char clas; };

Ifstream - тип переменной имя файла - C++
Пользователь должен выбрать из списка какой файл он хочет открыть #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;fstream&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
08.08.2012, 13:21 #2
Цитата Сообщение от nexen Посмотреть сообщение
hdc = BeginPaint(hWnd, &ps);
только для WM_PAINT
Цитата Сообщение от nexen Посмотреть сообщение
hdc = GetDC(hWnd);
Это когда делаешь???
проверь hWnd
полный обработчик WM_CREATE приведи
hdc как объявлен???

Добавлено через 54 секунды
Цитата Сообщение от nexen Посмотреть сообщение
Можно ли как-то имя переменной получить в виде строки?
нет
при компиляции имена теряются
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.08.2012, 13:25  [ТС] #3
ValeryS, в WM_CREATE только таймер и hdc = GetDC(hWnd);
ReleaseDC(hWnd, hdc) - делаю только по WM_DESTROY. hWnd - параметр вызова WndProc, с ним проблем быть не может или не должно.
HDC hdc; - объявление перед WndProc, но после WinMain.

p.s Кстати, не подскажешь, как проверить, помечен ли галочкой пункт в меню, ну и, соответственно, устанавить галочку/снять?
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2012, 13:33 #4
Цитата Сообщение от nexen Посмотреть сообщение
2) Можно ли как-то имя переменной получить в виде строки? Допустим :
C++
1
2
3
int abc = 10, x;
string b = Convert(abc);
cout << b; // "abc"
Цитата Сообщение от ValeryS Посмотреть сообщение
нет
при компиляции имена теряются
а тут и не нужен ран-тайм)
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
#define VAR_NAME(x) #x
 
int main()
{
   int abc = 100500;  
   std::cout << VAR_NAME(abc) " = " << abc << std::endl;
}
1
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
08.08.2012, 13:36 #5
nexen,
а зачем тебе глобальный HDC
рисование нужно делать в WM_PAINT
а там пара BeginPaint EndPaint
если хочешь что бы рисовало по таймеру
в обработчике таймера Invalidate пошлет твоему окну WM_PAINT

Jupiter, пардон не знал
1
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.08.2012, 13:46  [ТС] #6
ValeryS, я так и делаю, но разве не проще лучше будет получить один раз HDC, чем получать и настраивать его тучу раз в секунду?
p.s Как вообще от "миганий" избавиться? Отрисовал 30 кружков, добавил им скорости, послал их летать, отбиваясь от стенок. Иногда подмигивают ; (
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2012, 13:49 #7
Цитата Сообщение от nexen Посмотреть сообщение
Как вообще от "миганий" избавиться?
1) рисовать только в событии WM_PAINT
2) двойная буферизация
1
ValeryS
Модератор
6631 / 5038 / 466
Регистрация: 14.02.2011
Сообщений: 16,849
08.08.2012, 13:52 #8
Цитата Сообщение от nexen Посмотреть сообщение
но разве не проще лучше будет получить один раз HDC, чем получать и настраивать его тучу раз в секунду?
не проще
BeginPaint EndPaint кроме того что дает тебе Hdc снимает флаг перерисовки, иначе WM_PAINT будет посылаться постоянно.
Цитата Сообщение от nexen Посмотреть сообщение
Как вообще от "миганий" избавиться?
почитай про двойную буферизацию
грубо говоря ты создаешь контекст в памяти
потом рисуешь в нем
а потом просто копируешь на экран
ключевое слово BitBlt( это функция копирования)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 13:52
Привет! Вот еще темы с ответами:

Как назначить имя новой переменной в new - C++
Здравствуйте, 1)Функция должна создавать новый объект структуры. struct Wagen { int weight;; char clas; }; Функция: void...

Выберите неправильно записанное имя переменной - C++
Помогите! 1. Выберите неправильно записанное имя переменной. a) absde b) a123b_ c) abыcd1 d) __b__d

Как вывести имя переменной, передаваемой в фукцию? - C++
Как это сделать? void func(int arg) { cout &lt;&lt; } int main() { int a1 = 1;

Как написать имя консольного окна из переменной - C++
чтобы поменять имя консоли надо написать system(&quot;title ima_okna&quot;); а как вместо тектста ima_okna подставить переменную, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.08.2012, 13:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru