Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование WinAPI 
:(
    Опции темы
Wrestlerrr
Дата 16.5.2012, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите дописать программу!
 Пользователь отмечает нажатиями левой клавиши мыши произвольные точки, не лежащие на одной прямой. Программа рисует крестики в отмеченных точках. По нажатию правой кнопкой программа должна отметить последнюю точку и нарисовать ломаную без сам оперетинань с вершинами в отмеченных точках!

Точки и крестики программа ставит! подскажите что тут дальше делать?



Код

// Включаем необходимый заголовочный файл для Windows-программ
#include <windows.h>
#include <math.h>
int q=0;

// Объявление функции окна (оконной процедуры)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

HINSTANCE hInst; // Идентификатор приложения

// Указатель на константную строку символов - имя программы и класса окна
LPCSTR AppName = "MyProgramm";

// Точка входа в программу - функция WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
            LPSTR lpCmdLine, int nCmdShow)
{
HWND hWnd; // Уникальный идентификатор окна (handle)
MSG msg; // Объявление структуры типа MSG, для работы с сообщениями

hInst = hInstance; // Сохраняем идентификатор приложения

// Заполняем структуру WNDCLASS
WNDCLASS wc;
    // Инициализируем выделенную для структуры память нулями
    ZeroMemory(&wc, sizeof(wc));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.hInstance = hInst; 
wc.hIcon = LoadIcon(hInst, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = AppName;

RegisterClass(&wc); // Создаем и регистрируем оконный класс

// Создаем окно программы
hWnd = CreateWindow(
    AppName, // Имя класса окна
    AppName, // Заголовок окна
    WS_OVERLAPPEDWINDOW, // Стиль окна
    CW_USEDEFAULT, 0, // Горизонтальная и вертикальная позиции окна
    300, 300, // Ширина и высота окна
    NULL, // Хендл родительского окна
    NULL, // Хендл меню
    hInst, // Идентификатор приложения
    NULL); // Дополнительные данные окна

ShowWindow(hWnd, SW_SHOW); // Отображаем окно
UpdateWindow(hWnd); // Перерисовываем окно

    // Стандартный цикл обработки сообщений
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

return msg.wParam;
}

// Оконная процедура
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{HDC hdc; //создаём контекст устройства
 PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
 LOGFONT lf;
 HFONT hFont;
 RECT r;
 HBRUSH hBrush;
 HPEN hPen;
 POINT pt;
LPPOINT Pt = &pt;
HDC hDC;

 hDC=GetDC(hWnd);

    switch(msg)
    {
        /*
    case WM_MOUSEMOVE:
       int x,y;
        x=LOWORD(lParam);
        y=HIWORD(lParam);
       char u[10];
        _itoa_s(x,u,10,10);
        if(u[1]==0)
            u[1]=' ';
        if(u[2]==0)
            u[2]=' ';
        _itoa_s(y,u+4,6,6);
        u[3]='x';
        SetWindowText(hWnd,u);
    
    */int x,y,x1[100],y1[100]; //координаты

        case WM_PAINT :
 {hdc=BeginPaint(hWnd, &ps);
 //здесь можно вставить какие-нибудь функции рисования
 
 
 
 
     //Если был щелчок левой 

 case WM_LBUTTONDOWN:
     {
          
 
 x=LOWORD(lParam); //узнаём координаты
 y=HIWORD(lParam);
 x1[q]=x;
 y1[q]=y;
 SetPixel(hDC, x,y,RGB(0,0,0));
 
  MoveToEx(hDC,x,y,&pt);
  LineTo(hDC,x+5,y-5);
 MoveToEx(hDC,x,y,&pt);
  LineTo(hDC,x+5,y+5);
  
  MoveToEx(hDC,x,y,&pt);
  LineTo(hDC,x-5,y+5);
 MoveToEx(hDC,x,y,&pt);
  LineTo(hDC,x-5,y-5);
  
  q=q++;
    break; }
  
     
     
     case WM_RBUTTONDOWN:
      { MoveToEx(hDC,15,15,&pt);
  LineTo(hDC,x1[0],y1[0]); 
 
     break; }/*
        Polyline(
  hDC,             // идентификатор контекста отображения
  const POINT FAR* lppt,// указатель на массив структур POINT
  int cPoints); 
 */

     
 ValidateRect(hWnd, NULL);



 //заканчиваем рисовать
 EndPaint(hWnd, &ps);
 break;
 }

    

    case WM_DESTROY:
    PostQuitMessage(0);
    break;

    default:
    return DefWindowProc(hWnd, msg, wParam, lParam);
    }

return 0;
}


PM MAIL   Вверх
GremlinProg
Дата 17.5.2012, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(Wrestlerrr @  16.5.2012,  21:48 Найти цитируемый пост)
без сам оперетинань

 smile это как?


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Earnest
Дата 18.5.2012, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Может это "самопересечение"?
В любом случае, поставленные точки нужно запоминать, например в массиве. А дальше вопрос к автору: если ломаная должна проходить по точкам в порядке простановки, то задача тривиальна, только вот с самопересечениями (если это они) тут засада: уж как точки заданы, так и будет. А если нужно построить ломаную как-то по другому, то нужно определить критерий.


--------------------
...
PM   Вверх
Dem_max
Дата 18.5.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



Тут без запоминания точек в массив не обойтись. Потом из массива рисовать уже.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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