Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2012, 19:47   #1
123456789igor
Пользователь
 
Регистрация: 19.04.2011
Сообщений: 62
По умолчанию win api рисование

Не могу разобраться как сделать что бы при рисовании фигуры изменение размера фигур прорисовывалось, знаю что делается это посредством WM_MOUSEMOVE но как именно не пойму.
main.cpp
Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ 
	OPENFILENAME ofn;
	char szFileName[MAX_PATH];
	LPTSTR szFile = L"sdfsjd;lfksjd;flksjdfl;skdjf;sldkfjs;ldkfjs;dlfkjs;dflksdjf;lskdjf;lsdkfjs;ldkfjs;ldfl";
	static HBRUSH hBrush;
	static HENHMETAFILE file1 = 0;
	static int nextshape = 0;
	static vector <Shape *> allshape;
	static vector <Shape *> deletedshape;
	static int countshape = 0;
	//static BOOL mLine=FALSE, mRecttangle=FALSE, Ellips=FALSE, mCircle=FALSE, PAINTING=FALSE;
	static Shape *shape = NULL;
	POINT xy;

    switch (message)
    {
    case WM_PAINT:
		for( int i = 0; i < countshape; i++ )
			allshape[i]->draw(hdc);
        break;
	case WM_LBUTTONDOWN:
		if( shape == NULL )
		{
			deletedshape.clear();
			switch (nextshape)
			{
				case 0:	shape = new mRectangle();	break;
				case 1:	shape = new mCircle();		break;
				case 2:	shape = new mTriangle();	break;
				case 3:	shape = new mPolygon();		
				allshape.push_back(shape);
				countshape++;						break;
				case 4:	shape = new mText();		break;
				case 5: shape = new mLine();		break;
				case 6: shape = new elips();		break;
			};
		};
		xy.x=LOWORD(lParam); //узнаём координаты
		xy.y=HIWORD(lParam);
		shape->addpoint(xy,1);
		break;
	case WM_LBUTTONUP:
		xy.x=LOWORD(lParam); //узнаём координаты
		xy.y=HIWORD(lParam);
		shape->addpoint(xy, 1);
		if( shape->allow() )
			shape->addpoint(xy,1);
		else
		{
			allshape.push_back( shape );
			countshape++;
			shape = NULL;
		};
		
		InvalidateRect(hWnd, NULL, false);
		UpdateWindow(hWnd);

		break;
	case WM_RBUTTONDOWN:
		if( (nextshape == 3) && (shape != NULL) )
		{
			xy.x = 0;
			xy.y = 0;
			shape->addpoint( xy, 0 );
			shape = NULL;
			InvalidateRect(hWnd, NULL, false);
			UpdateWindow(hWnd);
		};
		break;

    case WM_MOUSEMOVE:
		if(MK_LBUTTON==wParam)
		{
			if (nextshape = 5)
			{
				xy.x=LOWORD(lParam); //узнаём координаты
		        xy.y=HIWORD(lParam);	
				hdc = GetDC(hWnd);
			MoveToEx(hdc, xy.x, xy.y, NULL);
			LineTo(hdc, xy.x, xy.y);
			ReleaseDC(hWnd, hdc);
			}
		}
		
		break;
			
	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
			case 1201: nextshape = 1;		break;
			case 1211: nextshape = 0;		break;
			case 1202: nextshape = 5;		break;
				case 1203: nextshape = 6;		break;
			case 1213: nextshape = 3;		break;
			case 1103: PostQuitMessage(0);	break;
			case 1301: if(countshape <= 0 )	break;
				deletedshape.push_back(allshape[countshape-1]);
				countshape--;
				allshape.pop_back();
				InvalidateRect(hWnd, NULL, false);
				UpdateWindow(hWnd);			break;
			case 1302: if( deletedshape.size() <= 0 ) break;
				allshape.push_back(deletedshape[deletedshape.size()-1]);
				countshape++;
				deletedshape.pop_back();
				InvalidateRect(hWnd, NULL, false);
				UpdateWindow(hWnd);			break;
}
}
}
123456789igor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Win API ( CИ) ПроГрам Помощь студентам 0 29.04.2010 21:43
Win API рисование Granus Win Api 11 29.06.2009 13:20
Win API aleks_n Общие вопросы Delphi 0 15.09.2008 11:07
Рисование графики на Win Api помогите exolot128 Помощь студентам 12 08.10.2007 15:24