Важная информация
Показано с 1 по 1 из 1

Тема: Часики на GDI+

  1. #1 Часики на GDI+ 
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    Дело было вечером , делать было нечего... В общем простенькие часики на WINAPI с использованием библиотеки GDI+

    [Ссылки могут видеть только зарегистрированные пользователи. ]

    Код :
    #Include "windows.bi"
    #Include "win/gdiplus.bi"
    #Include "crt.bi"
     
    Using GDIPLUS
     
    Dim wc As WNDCLASSEX
    Dim  msg As MSG
    Dim Shared GDIPLUSSTARTUPINPUT As GDIPLUSSTARTUPINPUT
    Dim Shared As ULONG_PTR gdiplusToken
    Dim Shared As PVOID GPIMAGE,g,fg,p(1 To 4),br
    Const  As Single rad = 3.14/180
     
     
    Sub OnPaint(g As Any Ptr)
     
    	Dim As single x,y,h,m,s,j(1 To 3) = {70,90,90},Angle(1 To 3) = {30,6,6}
    	Dim As String t = Time
     
    	m = Val(mid(t,4,2))
    	h = Val(Left(t,2))+9+m*0.0166667
    	s = Val(mid(t,7,2))
    	Angle(1) *= h
    	Angle(2) *= m+45
    	Angle(3) *= s+45
    	GdipSetSmoothingMode(fg,5)
    	GdipGraphicsClear(fg,&hff0000ff)
    	GdipDrawEllipse(fg,p(1),57,99,200,200)
     
    	For i As Integer = 1 To 12
    		x = 157+90 * Cos(i*30*rad)
    		y = 199+90 * Sin(i*30*rad)
    		GdipDrawLine(fg, p(4), 157, 199,x ,y )
    		GdipFillEllipse(fg,br,72,114,170,170)
    	Next
     
    	For i As Integer = 1 To 3
    		x = 157+j(i) * Cos(Angle(i)*rad)
    		y = 199+j(i) * Sin(Angle(i)*rad)
    		GdipDrawLine(fg, p(i+1), 157, 199,x ,y )
    	Next
     
       GdipDrawEllipse(fg,p(4),155,197,4,4)
    	GdipDrawImage(g,GPIMAGE,0,0)
     
    End Sub
     
    Function WndProc(hWnd As HWND,uMsg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer
     
    	Select Case uMsg
    		Case WM_CLOSE
    			KillTimer(hwnd,1)
    			GdipDeleteGraphics(g)
    			GdipDeleteGraphics(fg)
    			GdipDisposeImage(GPIMAGE)
    			For i As Integer = 1 To 4
    				GdipDeletePen(p(i))
    			Next
    			GdipDeleteBrush(br)
    			GdiplusShutdown gdiplusToken
    			PostQuitMessage(0)
    		Case WM_CREATE
    			GDIPLUSSTARTUPINPUT.GdiplusVersion = 1
    			GdiplusStartup(@gdiplusToken, @GDIPLUSSTARTUPINPUT, NULL)
    			GdipCreateFromHWND(hwnd,@g)
    			GdipCreateBitmapFromScan0(314,398 , NULL, PixelFormat32bppARGB, NULL, @GPIMAGE)
    			GdipGetImageGraphicsContext(GPIMAGE,@fg)
    			GdipCreatePen1(&h5f000000, 6, NULL, @p(1))
    			GdipCreatePen1(&hffa0a0a0, 4, NULL, @p(2))
    			GdipCreatePen1(&hfff0f0f0, 3, NULL, @p(3))
    			GdipCreatePen1(&hffff0000, 2, NULL, @p(4))
    			GdipCreateSolidFill(&hff0000a0,@br)
    			SetTimer(hWnd,1,1000,0)
    		Case WM_TIMER
    			OnPaint(g)
    		Case Else
    			Return DefWindowProc(hWnd,uMsg,wParam,lParam)
    	End Select
    End Function
     
    With wc
    	.hInstance=GetModuleHandle(0)
    	.cbSize=SizeOf(WNDCLASSEX)
    	.style=CS_HREDRAW Or CS_VREDRAW
    	.lpfnWndProc=@WndProc
    	.lpszClassName=StrPtr("class")
    	.hCursor=LoadCursor(NULL,IDC_ARROW)
    End With
     
    RegisterClassEx(@wc)
    CreateWindowEx(0,wc.lpszClassName,"Часы",WS_OVERLAPPEDWINDOW Or WS_VISIBLE,200,200,330,430,0,0,wc.hInstance,0)
    OnPaint(g)
    While GetMessage(@msg,0,0,0)
    	TranslateMessage(@msg)
    	DispatchMessage(@msg)
    Wend
    Ответить с цитированием  
     

  2. Пользователь сказал cпасибо:

    >Quiet Snow< (01.09.2013)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •