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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите исправить ошибку WinAPI, Ошибка, проблемы с запуском программы 
V
    Опции темы
AndreyGers
Дата 30.11.2014, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Реализация графического интерфейса пользователя в приложениях WinAPI
Не выводит график, рисует только оси координат. Подскажите пожалуйста в чём проблема.
Сама программа:
Код


#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#define N 20
#define M_PI 3.14159265358979323846
#define CENTER_X 100
#define CENTER_Y 100

// глобальные переменные
POINT p[N];

// объявление функций
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM RegMyWindowClass(HINSTANCE, LPCTSTR);
void setPoints(int n)
{
    int A = 2;    // значение А
    int B = 10;    // значение В
    int w = 5;    // коэффициент масштабирования.
    double fi = 0;    // начальное значение fi
    double fiMax = 2 * M_PI;    // максимальное значение fi
    double fiAdd = fiMax / N;    // увеличение fi при каждом шаге
    double x = 0, y = 0;    // начальые значения х, у
    int i;
for(i = 0; i < N; i++){
        x = (B - A)*cos(fi) + A*cos((B - A)*(fi / A));
        y = (B - A)*sin(fi) + A*sin((B - A)*(fi / A));

        p[i].x = x*w + CENTER_X;
        p[i].y = y*w + CENTER_Y;
    }

}

// функция вхождений программы WinMain
int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE         hPrevInstance,
    LPSTR             lpCmdLine,
    int               nCmdShow)
{

    // имя класса
    LPCTSTR lpzClass = TEXT("My Window Class!");
    LPCTSTR lpzClassName = lpzClass;

    // регистрация класса
    if (!RegMyWindowClass(hInstance, lpzClass))
        return 1;

    // вычисление координат центра экрана
    RECT screen_rect;
    GetWindowRect(GetDesktopWindow(), &screen_rect);        // разрешение экрана
    int x = screen_rect.right / 2 - 150;
    int y = screen_rect.bottom / 2 - 75;

    // создание диалогового окна
    HWND hWnd = CreateWindow(lpzClass, TEXT("Schedule Window"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE, x, y, 300, 300, NULL, NULL,
        hInstance, NULL);

    // если окно не создано, описатель равен 0
    if (!hWnd) return 2;

    // цикл сообщений приложения
    MSG msg = { 0 };                                        // структура сообщения
    int iGetOk = 0;                                         // переменная состояния
    while ((iGetOk = GetMessage(&msg, NULL, 0, 0)) != 0)    // цикл сообщений
    {
        if (iGetOk == -1) return 3;                      // если GetMessage вернул ошибку - выход
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;        // возвращаем код завершения программы
}

// функция регистрации класса окон
ATOM RegMyWindowClass(HINSTANCE hInst, LPCTSTR lpzClassName)
{
    WNDCLASS wcWindowClass = { 0 };
    // адрес ф-ции обработки сообщений
    wcWindowClass.lpfnWndProc = (WNDPROC)WndProc;
    // стиль окна
    wcWindowClass.style = CS_HREDRAW | CS_VREDRAW;
    // дискриптор экземпляра приложения
    wcWindowClass.hInstance = hInst;
    // название класса
    wcWindowClass.lpszClassName = lpzClassName;
    // загрузка курсора
    wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    // загрузка цвета окон
    wcWindowClass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
    return RegisterClass(&wcWindowClass);        // регистрация класса
}

// функция обработки сообщений
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_LBUTTONUP:
        InvalidateRect(hWnd,NULL,TRUE);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);             // реакция на сообщение
        break;
   case WM_PAINT:
    {
       PAINTSTRUCT ps;
       HDC hdc;
       hdc = BeginPaint(hWnd, &ps);
       setPoints(N);
        
       HPEN Pen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
       HPEN PenOld=(HPEN)SelectObject(hdc, Pen);
       MoveToEx(hdc, 0, CENTER_Y, NULL);       // текущая позиция точки.
       LineTo(hdc, 2 * CENTER_X, CENTER_Y);    // построение прямой линии (оси).
       MoveToEx(hdc, CENTER_X, 0, NULL);
       LineTo(hdc, CENTER_X, 2 * CENTER_Y);
       Polyline(hdc, p, 20);           // построение линий по точкам p.
       SelectObject(hdc, PenOld);
       DeleteObject(Pen);
       EndPaint(hWnd, &ps);
       break;
    } 
  } 
        return DefWindowProc(hWnd, message, wParam, lParam);
}





Это сообщение отредактировал(а) AndreyGers - 30.11.2014, 14:23
PM MAIL   Вверх
vol4ek
Дата 30.11.2014, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Код

void setPoints(int n)
{
    int A = 2;    // значение А
    int B = 10;    // значение В
    int w = 5;    // коэффициент масштабирования.
    double fi = 0;    // начальное значение fi
    double fiMax = 2 * M_PI;    // максимальное значение fi
    double fiAdd = fiMax / N;    // увеличение fi при каждом шаге
    double x = 0, y = 0;    // начальые значения х, у
    int i;
for(i = 0; i < N; i++){
        x = (B - A)*cos(fi) + A*cos((B - A)*(fi / A));
        y = (B - A)*sin(fi) + A*sin((B - A)*(fi / A));
        p[i].x = x*w + CENTER_X;
        p[i].y = y*w + CENTER_Y;
    }
}

ничего здесь не смущает?
PM MAIL ICQ   Вверх
vol4ek
Дата 30.11.2014, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



Код

p[i].x = x*w + CENTER_X;  // всегда = 150
p[i].y = y*w + CENTER_Y; // всегда = 100


вот это злачное место, разберайтесь что здесь не так и чего не хватает.
Код

x = (B - A)*cos(fi) + A*cos((B - A)*(fi / A));
y = (B - A)*sin(fi) + A*sin((B - A)*(fi / A));

PM MAIL ICQ   Вверх
AndreyGers
Дата 30.11.2014, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, в который раз выручаете)))
не создал Шаг для точек
Код

double t=0.155;
 x = (B - A)*cos(fi) + A*cos((B - A)*(fi / A));
 y = (B - A)*sin(fi) + A*sin((B - A)*(fi / A));
fi+=t;


PM MAIL   Вверх
vol4ek
Дата 30.11.2014, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


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

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



 smile 

Это сообщение отредактировал(а) vol4ek - 30.11.2014, 20:20
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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