Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Движение объекта 
:(
    Опции темы
unistylett
Дата 6.5.2007, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 31.10.2006

Репутация: нет
Всего: нет



Привет всем!!! Я создал окно и объект(линия) на Borland C+ 5.02.  Помогите сделать так чтобы, при движении она вращалась и когда достигнет границы окна отталкивалась и двигалась в другом направлении(можно по задданной траектории).
Вот то что у меня пока получилось

Код

#include <windows.h>
#include <windowsx.h>
#include "def.h"

#define ELL_TIMER    30000

static HINSTANCE hInst; //дескриптор приложения

//Функция главного окна
LRESULT CALLBACK _export WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
static char szClassName[] = "Garfika";

static char szWinTitle[] = "Движение объекта";

//Функция для регистрации класса окна
static BOOL RegCls(HINSTANCE h){           
    WNDCLASS wndcls;
    wndcls.style         = CS_HREDRAW | CS_VREDRAW;
    wndcls.lpfnWndProc   = WndProc;
    wndcls.cbWndExtra    = 0;
    wndcls.cbClsExtra    = 0;
    wndcls.hInstance     = h;
    wndcls.hIcon         = ::LoadIcon(h, MAKEINTRESOURCE(EXE_ICON));
    wndcls.hCursor       = ::LoadCursor(NULL, IDC_ARROW);
    wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW+2);   
    wndcls.lpszMenuName  = NULL;
    wndcls.lpszClassName = szClassName;
    return ::RegisterClass(&wndcls);
}

#pragma argsused
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE prevInst, LPSTR cmdline, int show){
    HWND hWnd;
    MSG  msg;
    //
    //Сохраняем идентификатор приложения
    hInst = hInstance;
    //регистрируем класс окна
    if (!RegCls(hInst)) return 0;
    //создаем окно
    hWnd = ::CreateWindow(szClassName, szWinTitle, WS_OVERLAPPED | WS_SYSMENU,
            CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, NULL, NULL, hInst, NULL);  
    //показываем обновляем окно
    ::ShowWindow(hWnd,show);
    ::UpdateWindow(hWnd);
    //Запускаем цикл обработки сообщений
    while (::GetMessage(&msg, NULL, 0, 0)) {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }
    return msg.wParam;
}

static POINT p;

#pragma argsused           
static BOOL WndCreate(HWND hWnd, LPCREATESTRUCT /*lpCreateStruct*/){
    ::SetTimer(hWnd, ELL_TIMER, 90, NULL);   
    p.x = 0;
    p.y = 100;
    return TRUE;
}

#pragma argsused
static void WndPaint(HWND hWnd){
    PAINTSTRUCT ps;
    HDC hdc = ::BeginPaint(hWnd, &ps); //
    //char szText[64];
    //::wsprintf(szText, "[%d]:[%d]", p.x, p.y);
    //::TextOut(hdc, p.x, p.y, szText, ::lstrlen(szText));
    ::Rectangle(hdc, p.x+0, p.y+0, p.x+130, p.y+5); 
    ::EndPaint(hWnd, &ps);        
}



#pragma argsused
static void WndTimer(HWND hWnd, UINT id){
    //::MessageBeep(-1);
    p.x += 10;
    p.y += 10;
    if ( p.x>=200 ) {
        p.x = 0;
     p.y = 0;
    }
    ::InvalidateRect(hWnd, NULL, TRUE);
}


#pragma argsused
static void WndDestroy(HWND hWnd){
    ::KillTimer(hWnd, ELL_TIMER);
    ::PostQuitMessage(0);
}


static LRESULT CALLBACK _export WndProc(HWND hWnd, UINT msg,
     WPARAM wParam, LPARAM lParam){
    switch (msg){
        HANDLE_MSG(hWnd, WM_CREATE,  WndCreate);
        HANDLE_MSG(hWnd, WM_PAINT,   WndPaint);
        HANDLE_MSG(hWnd, WM_TIMER,   WndTimer);
        HANDLE_MSG(hWnd, WM_DESTROY, WndDestroy);
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
}


Выручайте мне через 4 дня сдавать эту задачу.
Заранее спасибо


M
Alexeis
Модератор: используйте подсветку кода  http://forum.vingrad.ru/index.php?show_typ...howtopic=126445

Указывайте язык программирования.


Это сообщение отредактировал(а) Alexeis - 7.5.2007, 13:26

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  object.rar 24,47 Kb
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.