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

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

Восстановить пароль Регистрация
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.08.2012, 13:17     Глобальный HDC и имя переменной #1
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"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
08.08.2012, 13:21     Глобальный HDC и имя переменной #2
Цитата Сообщение от nexen Посмотреть сообщение
hdc = BeginPaint(hWnd, &ps);
только для WM_PAINT
Цитата Сообщение от nexen Посмотреть сообщение
hdc = GetDC(hWnd);
Это когда делаешь???
проверь hWnd
полный обработчик WM_CREATE приведи
hdc как объявлен???

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

p.s Кстати, не подскажешь, как проверить, помечен ли галочкой пункт в меню, ну и, соответственно, устанавить галочку/снять?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2012, 13:33     Глобальный HDC и имя переменной #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;
}
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
08.08.2012, 13:36     Глобальный HDC и имя переменной #5
nexen,
а зачем тебе глобальный HDC
рисование нужно делать в WM_PAINT
а там пара BeginPaint EndPaint
если хочешь что бы рисовало по таймеру
в обработчике таймера Invalidate пошлет твоему окну WM_PAINT

Jupiter, пардон не знал
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
08.08.2012, 13:46  [ТС]     Глобальный HDC и имя переменной #6
ValeryS, я так и делаю, но разве не проще лучше будет получить один раз HDC, чем получать и настраивать его тучу раз в секунду?
p.s Как вообще от "миганий" избавиться? Отрисовал 30 кружков, добавил им скорости, послал их летать, отбиваясь от стенок. Иногда подмигивают ; (
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.08.2012, 13:49     Глобальный HDC и имя переменной #7
Цитата Сообщение от nexen Посмотреть сообщение
Как вообще от "миганий" избавиться?
1) рисовать только в событии WM_PAINT
2) двойная буферизация
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 13:52     Глобальный HDC и имя переменной
Еще ссылки по теме:

Как присвоить переменной имя, взятое из вектора C++
Ifstream - тип переменной имя файла C++
Можно ли представить значение переменной как имя файла? C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
08.08.2012, 13:52     Глобальный HDC и имя переменной #8
Цитата Сообщение от nexen Посмотреть сообщение
но разве не проще лучше будет получить один раз HDC, чем получать и настраивать его тучу раз в секунду?
не проще
BeginPaint EndPaint кроме того что дает тебе Hdc снимает флаг перерисовки, иначе WM_PAINT будет посылаться постоянно.
Цитата Сообщение от nexen Посмотреть сообщение
Как вообще от "миганий" избавиться?
почитай про двойную буферизацию
грубо говоря ты создаешь контекст в памяти
потом рисуешь в нем
а потом просто копируешь на экран
ключевое слово BitBlt( это функция копирования)
Yandex
Объявления
08.08.2012, 13:52     Глобальный HDC и имя переменной
Ответ Создать тему
Опции темы

Текущее время: 17:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru