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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2012, 15:02   #1
Walker32
 
Регистрация: 15.05.2011
Сообщений: 7
По умолчанию Проблема с часами.

При нажатии кнопки меню рисовались часы(смотря какие выбрали).С электронными часами нормально, а с аналоговыми не получается. Не выводит на экран и все. Внизу 2 картинки каждого из видов и файл main. Ругается на оконную процедуру, мол мы 2ды объявляем.
Код:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static BOOL   f24Hour, fSuppress ;
	static HBRUSH hBrush ;
	static int    cxClient, cyClient ;
	HDC           hdc ;
	PAINTSTRUCT   ps ;
	TCHAR         szBuffer [2] ;
	
	switch (message)
	{
		HANDLE_MSG (hwnd, WM_CREATE, OnCreate) ;
		HANDLE_MSG(hwnd,WM_TIMER,OnTimer);
		HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
		HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
	case WM_COMMAND:
		{
			switch(wParam)
			{
			case ID_ANALOG:
			{
				if(ActualTimer==ID_TIMER_DIGITAL)
					{
						DeleteObject (hBrush) ;
						KillTimer(hwnd,ID_TIMER_DIGITAL);
						/*OnCreate(hwnd,NULL);*/
						hdc=GetDC(hwnd);hdcMem=CreateCompatibleDC(hdc);
						hdcMem0=CreateCompatibleDC(hdc);
						hBitmap=CreateCompatibleBitmap(hdc,iDia,iDia);
						GetObject(hBitmap,sizeof(BITMAP),&bm);
						hOldBitmap=SelectBitmap(hdcMem0,hBitmap) ;
						CYFERBL(hwnd);  // risovanie cyferblata
						SetTimer(hwnd,ID_TIMER_ANALOG,1000,NULL);
						ActualTimer=ID_TIMER_ANALOG;
					}
			};break;
			case ID_DIGIT:
			{
				if (ActualTimer==ID_TIMER_ANALOG)
				{
					KillTimer(hwnd,ID_TIMER_ANALOG);    
					DeleteBitmap(hBitmap);
					SelectBitmap (hdcMem,hOldBitmap);
					DeleteDC(hdcMem);
					DeleteDC(hdcMem0);
					hBrush = CreateSolidBrush (RGB (135,0, 0)) ;
					KillTimer (hwnd, ID_TIMER_ANALOG) ;
					ActualTimer=ID_TIMER_DIGITAL;
					SetTimer(hwnd,ID_TIMER_DIGITAL,1000,NULL);
					InvalidateRect(hwnd,NULL,1);
					UpdateWindow(hwnd);
				}
			};break;
			}

		};break;
	case WM_CREATE:
		/*hBrush = CreateSolidBrush (RGB (135,0, 0)) ;
		ActualTimer=ID_TIMER_DIGITAL;
		SetTimer (hwnd, ID_TIMER_DIGITAL, 1000, NULL) ;*/
		hdc=GetDC(hwnd);hdcMem=CreateCompatibleDC(hdc);
		hdcMem0=CreateCompatibleDC(hdc);
		hBitmap=CreateCompatibleBitmap(hdc,iDia,iDia);
		GetObject(hBitmap,sizeof(BITMAP),&bm);
		hOldBitmap=SelectBitmap(hdcMem0,hBitmap) ;
		CYFERBL(hwnd);  // risovanie cyferblata
		SetTimer(hwnd,ID_TIMER_ANALOG,1000,NULL);
		ActualTimer=ID_TIMER_ANALOG;
		break;
	case WM_SETTINGCHANGE:
		GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 2) ;
		f24Hour = (szBuffer[0] == '1') ;

		GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, 2) ;
		fSuppress = (szBuffer[0] == '0') ;

		InvalidateRect (hwnd, NULL, TRUE) ;
		return 0 ;

	case WM_SIZE:
		cxClient = LOWORD (lParam) ;
		cyClient = HIWORD (lParam) ;
		return 0 ;

	case WM_TIMER:
		if (wParam==ID_TIMER_ANALOG)
		{
			OnTimer(hwnd,1000);
		}
		if (wParam==ID_TIMER_DIGITAL)
		{
			InvalidateRect(hwnd,NULL,1);
			UpdateWindow(hwnd);
		}
		return 0 ;

	case WM_PAINT:
	
		if (ActualTimer==ID_TIMER_ANALOG)
			
		{
			hdc=GetDC(hwnd);hdcMem=CreateCompatibleDC(hdc);
			hdcMem0=CreateCompatibleDC(hdc);
			hBitmap=CreateCompatibleBitmap(hdc,iDia,iDia);
			GetObject(hBitmap,sizeof(BITMAP),&bm);
			hOldBitmap=SelectBitmap(hdcMem0,hBitmap) ;
			CYFERBL(hwnd);  // risovanie cyferblata
			float strUgolS,strUgolM,strUgolH;  
			hdcMem=BeginPaint(hwnd,&ps);
			BitBlt (hdcMem,0,0,bm.bmWidth,bm.bmHeight,hdcMem0,0,0,SRCCOPY);
			SYSTEMTIME chas ;
			GetLocalTime(&chas);              
			//UGLY
			strUgolS= -0.017453292*6*chas.wSecond;
			strUgolM= -0.017453292*6*chas.wMinute+strUgolS/60;
			strUgolH= -0.017453292*30*chas.wHour+strUgolM/12;
			//STRELKI
			STRELKA (colStrMH,iRadMet-4*iMetH-iMetM,2,strUgolH);//CHAS
			STRELKA (colStrMH,iRadMet-iMetH-iMetM,2,strUgolM);//MIN
			STRELKA (colStrS,iRadMet-iMetH-iMetM,1,strUgolS);//SEC
			//CENTR TO4KA
			pen = CreatePen(PS_SOLID, 1,colStrMH);
			br = CreateSolidBrush(colStrMH);
			SelectBrush(hdcMem, br);    
			Ellipse(hdcMem, iRad-2, iRad-3,iRad+3,iRad+3);  
			DeleteObject(br);
			DeleteObject(pen);
			BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY) ;
			ReleaseDC(hwnd,hdc);
			ReleaseDC(hwnd,hdcMem);
			ReleaseDC(hwnd,hdcMem0);
			DeleteObject(hBitmap);
			EndPaint(hwnd,&ps);
			return 0;
		}
		if (ActualTimer==ID_TIMER_DIGITAL)
		{
			hdc = BeginPaint (hwnd, &ps) ;
			SetMapMode (hdc, MM_ISOTROPIC) ;
			SetWindowExtEx (hdc, 276, 72, NULL) ;
			SetViewportExtEx (hdc, cxClient, cyClient, NULL) ;

			SetWindowOrgEx (hdc, 138, 36, NULL) ;
			SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
			SelectObject (hdc, GetStockObject (NULL_PEN)) ;
			SelectObject (hdc, hBrush) ;

			DisplayTime (hdc, f24Hour, fSuppress) ;
			EndPaint (hwnd, &ps) ;
		}
		return 0 ;

	case WM_DESTROY:
		KillTimer (hwnd, ID_TIMER_DIGITAL) ;
		DeleteObject (hBrush) ;
		OnDestroy(hwnd);
		PostQuitMessage (0) ;
		return 0 ;
	}
	return DefWindowProc (hwnd, message, wParam, lParam) ;
Изображения
Тип файла: jpg Безымянный.jpg (37.8 Кб, 66 просмотров)
Тип файла: jpg Безымянный2.jpg (16.1 Кб, 59 просмотров)
Вложения
Тип файла: rar main.rar (4.1 Кб, 9 просмотров)

Последний раз редактировалось Walker32; 10.06.2012 в 16:11.
Walker32 вне форума Ответить с цитированием
Старый 13.06.2012, 13:20   #2
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Присоединил CPP-файл, там есть изменения, особенно внимательно посмотри на функцию CYFERBL. Результат:
Изображения
Тип файла: png clocks.PNG (8.4 Кб, 54 просмотров)
Вложения
Тип файла: zip main.zip (4.3 Кб, 8 просмотров)
volvo877 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эпициклоида с часами (С++) Carter Помощь студентам 4 26.04.2012 00:00
Кнопка рядом с часами grafgrial Общие вопросы Delphi 3 19.10.2011 11:21
как поместить значёк программы на панель рядом с часами 54rus Помощь студентам 2 08.12.2009 20:50
Паскаль.Программа с часами romich.91 Помощь студентам 1 08.12.2009 13:26
приложение рядом с часами ERASERROR Общие вопросы Delphi 10 23.01.2008 23:59