Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

помогите доделать

54K
03 июня 2010 года
zubov90
11 / / 20.03.2010
В данной программе я в самом коде вписываю кол-во точек и если все их ставлю - рисуется ломаная. Но не могу никак сделать так, что бы я ставил множество точек левой кнопкой мыши, а при нажатии правой - рисовалась ломанная линия.
Знаю что не реально, но очень нужно в течении 2-3 дней.
HELP!!!
//++++++++++++++++++++++++++++++++++
#include <windows.h>
#include <stdio.h>
#include "KWnd.h"
#include "resource.h"
#include <math.h>
#include "bitmap.h"



struct pt
{
double X,Y;
};
pt a[100];


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
////////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
KWnd mainWnd("picture", hInstance, nCmdShow, WndProc,
MAKEINTRESOURCE(IDR_MENU1), 100, 100, 400, 300);

while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

HRGN hRgn;

////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{


HDC hDC;
PAINTSTRUCT ps;
RECT rect;
static HMENU hMenu;
int userreply;
static int iCount=0;
static int bisTrack=false;
static int iisTrack=-1;
int i;

switch (uMsg)
{


case WM_COMMAND:
switch(wParam)
{
case IDM_SAVE:

CreateBMPFile("picture.bmp",hWnd,BI_RGB,24);
break;
case IDM_NEW:

iCount=0;

InvalidateRect(hWnd,NULL,TRUE);

break;
case IDM_about :

MessageBox(hWnd," Создать приложение picture. Пользователь отмечает нажатиями клавиши мыши 3 точки, не лежащие на одной прямой. Программа рисует крестики в отмеченных точках. После третьей точки программа должна нарисовать треугольник ABC, а также медиану, биссектрису и высоту, проведенные из вершины A. Треугольник рисуется черным цветом, медиана красным, биссектриса синим, высота зеленым . Приложение должно иметь 3 меню – «Файл», «Новое задание», «О программе». В меню «Файл» расположены подменю – «Сохранить» и «Выход». Нарисованное изображение должно сохраняться в файл формата bmp.","About",MB_OK);

break;
case IDM_EXIT:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
break;


case WM_LBUTTONUP:
bisTrack=false;
break;
case WM_MOUSEMOVE:
if (bisTrack)
{
a[iisTrack].X=LOWORD(lParam);
a[iisTrack].Y=HIWORD(lParam);
InvalidateRect(hWnd,NULL,TRUE);
}

break;


case WM_LBUTTONDOWN:

if (iCount<10)
{
a[iCount].X=LOWORD(lParam);
a[iCount].Y=HIWORD(lParam);
InvalidateRect(hWnd,NULL,TRUE);
}
if (iCount==10)
{
for (int j=0; j<iCount; j++)
{
if ((abs(a[j].X-LOWORD(lParam))<5) && (abs(a[j].Y-HIWORD(lParam))<5))
{
bisTrack=true;
iisTrack=j;

}

}
break;
}
iCount++;
break;

case WM_CREATE:
hMenu = GetMenu(hWnd);

break;

case WM_PAINT:


hDC = BeginPaint(hWnd, &ps);

for (i=0;i<iCount;i++)
{
MoveToEx(hDC, a.X-3,a.Y+3, NULL);
LineTo(hDC, a.X+3,a.Y-3);
MoveToEx(hDC, a.X-3,a.Y-3, NULL);
LineTo(hDC, a.X+3,a.Y+3);

}
if (iCount==10)
{
for (i=0;i<iCount-1;i++)

{

MoveToEx(hDC, a.X,a.Y,NULL);
//TextOut(hDC , a.X+5, a.Y+5,"A",1);
LineTo(hDC,a[i+1].X, a[i+1].Y);

}

ValidateRect(hWnd, NULL);

}
EndPaint(hWnd, &ps);
break;

case WM_CLOSE:
userreply = MessageBox(hWnd, "вы уверены в своем желании закрыть приложение?",
"", MB_YESNO | MB_ICONQUESTION);
if (IDYES == userreply)
DestroyWindow(hWnd);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;

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

return 0;
}
392
03 июня 2010 года
cronya
421 / / 03.01.2009
код оформляйте тегами, тогда помогут!:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог