| imho.ws |
![]() |
|
|
|
# 2 | ||
|
Advanced Member
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Код:
#include "stdafx.h"
#include "windows.h"
using namespace std;
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
if(GetWindowThreadProcessId(hwnd, NULL) == GetCurrentThreadId())
{
*(HWND*)lParam = hwnd;
return FALSE;
}
return TRUE;
}
int main(int argc, _TCHAR* argv[])
{
HWND hWnd;
HDC hDc;
EnumWindows(EnumWndProc, (LPARAM)&hWnd);
hDc = GetDC(hWnd);
for (int i=20; i<100; i++)
::SetPixel(hDc,i,i,RGB(255,0,0));
getchar();
return 0;
}
Код:
using namespace std; Цитата:
Хендл - говоря простым языком, описатетель или идентификатор объекта. Под объектом может подразумеваться все что угодно. (окно, кнопка, даже устройство). При этом гарантируется, что все хендлы (handle) в пределах одного процесса(?) будут уникальны. Последний раз редактировалось Trotil; 17.12.2005 в 22:57. |
||
|
|
|
|
# 6 |
|
Advanced Member
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
int main(int argc, _TCHAR* argv[]) замени на int main(int argc, char* argv[]) или на int main(void)
У меня код работает, я обычно проверяю его, прежде чем выставлять его всеобщее обозрение. Правда у меня MS VS 2003 .Net и MS VS 2005 .Net. 6-ую версию удалил год назад и возвращаться не собираюсь... Но данный код по идее корректно должен работать и в 6-ой версии, с учетом небольшой корректировки. Последний раз редактировалось Trotil; 17.12.2005 в 23:57. |
|
|
|
|
# 8 |
|
Junior Member
Регистрация: 28.10.2003
Адрес: Украина
Сообщения: 57
![]() ![]() |
Вообще говоря консольные приложения придуманны для того чтобы в консоли только текст выводить, никакой графики (разве что еще псевдографика, ее не считаю). И хоть теоретически это возможно, (найти окно, найти его девайсконтекст, и потом рисовать), я всеже думаю что лучше не извращатся, а открыть мсдн, потратить полдня узнать что такое окно в виндовсе, и как работает процедура окна, и рисовать уже напрямую на форме, это и проще, и быстрее, и понятнее, и удобнее.
|
|
|
|
|
# 9 | ||
|
Advanced Member
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
|
||
|
|
|
|
# 10 |
|
Junior Member
Регистрация: 01.04.2005
Сообщения: 121
![]() |
MSDN это куча каких то несвязанных данных (да еще на техническом английском) и найти там можно только то что знаешь и знаешь где искать, а я только начал врубаться что такое СИ++ и для обучения хочу написать прогу взаимодействия трех тел в пространстве- если как писать я знаю, то как выводить рисунок движения тел незнаю, в литературе (учебниках) даже простейшие вещи (возведение в степень, перехват символа с клавиатуры без ожидания ?, точность расчета - ну что б не округлял значения) неуказаны, а уж консоли не консоли это вообще
А граффика на чем делается в смысле не окна там всякие всплывающие, а типа игр где нужно быстро все выводить, в консоли или нет? Последний раз редактировалось ЛеднеFF; 18.12.2005 в 02:31. |
|
|
|
|
# 11 |
|
Junior Member
Регистрация: 28.10.2003
Адрес: Украина
Сообщения: 57
![]() ![]() |
Я постоянно использую MSDN, там есть все, хотя периодически микрософт недоговаривает.
Игры пишутся с использованием библиотек ДиректХ, которые позволяют рисовать 3хмерную графику быстро на экране. А програмирование имхо изучать надо начинать всеже с програмирования под виндовс: как кнопку вывести, как обработчик прикрутить, как меню создать, как с клавиатурой работать. Потом можно двинутся в сторону ДиректХ, и програмировать 3хмерную графику, или писать юзеринтерфейсы при помощи винконтролов, это уже кому чего больше нравится. |
|
|
|
|
# 12 |
|
Advanced Member
Регистрация: 21.04.2005
Адрес: град Москва
Сообщения: 431
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
перехват символа с клавиатуры без ожидания
Это противоречит логике программирования ДОС-овских приложений, однако это как раз очень просто делается с помощью методов программирования под Windows (в этом и состоит одно из преимуществ Windows) Но код приводить или что-либо объяснять - долго и наверняка ничего не поймешь. (надо прочитать про события, обработчики событий(в случае MFC) или про функцию окна) ИМХО, ты сейчас бежишь впереди паравоза и достаточно далеко убежал. Не надо спешить. Ты сейчас хочешь сразу понять такие вещи, которые не так просты для понимания, как поначалу кажется. Ты читал мой пост в ебуках относительно книг по VS? Какой книгой ты пользуешься? Какие цели ты преследуешь при изучении VS? Чего ты хочешь добиться в программировании? Какой уровень программирования на данный момент? Надо ответить на эти вопросы, тогда здешние знающие люди могут подсказать оптимательное решение, путь к изучению... А тем путем, которым пошел ты - естественно, преграды и непонимание будет встречаться на каждом пути... |
|
|
|
|
# 13 |
|
Junior Member
Регистрация: 01.04.2005
Сообщения: 121
![]() |
Я тут немного разобрался как в Visual C++ писать проги и задавать события кнопкам, так вот вопрос:
допустим на кнопку старт у меня запускается моя прога (в соответствующем месте программы соответствующем этой кнопке) и непрерывно считает и рисует что нибудь пока не остановишь - так вот как сделать так, что бы при нажатии какой нибудь кнопки она остановилась, ведь в этот момент ни какие кнопки не проверяются пока моя программа работае в цикле. И второй вопрос, при создании нового всплывающего диалогового окна код программы находится отдельно и эта часть программы не видит переменные предыдущего окна (ни глобальные ни другие), как их передать из предыдущего окна в текущее.....
|
|
|
|
|
# 14 |
|
::VIP::
Регистрация: 17.12.2002
Адрес: Q-ata, Israel
Сообщения: 310
![]() ![]() ![]() ![]() ![]() |
запускается моя прога - создавай новый поток, у тебя останется указатель на него, поток побежит параллельно основной программе, сможешь остановить когда угодно
не видит переменные предыдущего окна (ни глобальные ни другие), как их передать из предыдущего окна в текущее допустим у меня есть родительское окно MyWnd и дочернее MyDlg и переменная родительского окна int MyWnd.m_Test . тогда я создаю в дочернем аналог данной переменной (вариант А) и копирую значение непосредственно перед показом окна. или поинтер на оригинальную переменную (вариант Б - уже немного наглость) вариант А определение class MyDlg : CDialog { ... int m_MyParentTest; создание MyDlg d1; d1.m_MyParentTest = m_Test использование d1.DoModal() ... int x = m_MyParentTest вариант Б определение class MyDlg : CDialog { ... int* m_pMyParentTest; создание MyDlg d1; d1.m_pMyParentTest = & m_Test; использование m_pMyParentTest = 10; // m_Test тоже меняется |
|
|
|
|
# 15 | |
|
Junior Member
Регистрация: 01.04.2005
Сообщения: 121
![]() |
Цитата:
....что то не получается, нельзя ли то же пример
Последний раз редактировалось ЛеднеFF; 22.12.2005 в 18:08. |
|
|
|
|
|
# 17 |
|
Junior Member
Регистрация: 28.10.2003
Адрес: Украина
Сообщения: 57
![]() ![]() |
Не, потоки тут по моему немного неправильно. Поток разве для того чтобы данные для прорисовки подготовить, и то это не та тема, которую нужно разбирать начинающему. А рисование должно быть типа как покадровым и конечным (не в вечном цикле), т.е. алгоритм перерисовывает весь экран, и заканчивается. И по таймеру вызывается вновь.
|
|
|
|
|
# 18 |
|
Junior Member
Регистрация: 01.04.2005
Сообщения: 121
![]() |
в Бэйсике есть обычная функция INKEY$ которая контролирует нажата ли какая нибудь клавиша, если нажата то сверяем не равна ли она нужной клавише, если не равна то повторяем цикл снова и так до тех пор пока не нажмем к примеру ESC. Так вот в С++ должно быть примерно также по моему?
а по поводу вечного цикла: представьте себе три тела в пространстве с начальными скоростями, моя программа ститает их взаимодействие с определенным заданным шагом по времени и отображает их положение на экране и все это отображается и считается пока мне не надоест и я не нажму кнопку Стоп. Так вот как это сделать....? Последний раз редактировалось ЛеднеFF; 24.12.2005 в 23:35. |
|
|
|
|
# 20 |
|
Junior Member
Регистрация: 01.04.2005
Сообщения: 121
![]() |
Про консольные я уже забыл
, теперь речь идет о диалоговых окнах.Создал окно для ввода параметров, потом после нажатия кнопки старт всплывает следующее окно на котором рисуется траектория движения тел, а так как летать они могут долго (несколько миллиардов лет ) то когда я хочу остановить это, то на окне есть кнопочка Стоп, но так как моя прога работает в бесконечном цикле, при нажатии на Стоп все зависает(в смысле программма), а если нарисовать только один цикл, то что бы тела летали и дальше нужно очень часто и ооочень быстро давить на кнопку Старт (шутка)..... так вот что бы этого не произошло я так понимаю в цикл нужно вставить функцию проверки нажатий на кноппочки и если они нажаты то все можно идти спать.... Только не знаю что это за функция ![]() Или к примеру есть игра стреллялка (Квакер к примеру) там мужик ходит в разные стороны при нажатии соответствующих клавиш а коли не нажаты клавиши, то игра все равно не останавливается а просто живет своей жизнью и ждет нажатий на ктопки (она собственно тоже работает в "бесконечном" цикле) Последний раз редактировалось ЛеднеFF; 25.12.2005 в 02:43. |
|
|