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

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

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

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

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

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

Ребят помогите с часами. Пытался по-гуглить, но ничего не нашел. Суть в том, что бы часы сверялись не с компьютером, а с каким либо сайтом точного времени.

Код:
# include <windows.h>
#include <windowsx.h>
#include <math.h>//sin,cos
 
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL OnCreate(HWND,CREATESTRUCT FAR*);
void OnPaint(HWND);
void CYFERBL(HWND);
void OnDestroy(HWND);
void OnTimer(HWND,UINT);
void STRELKA (COLORREF,int,int,float);
 
/*Глобалъные переменные*/
int nFunsterStil;
int iwinX=0, iwinY=540, iwinXC=iwinX-150, iwinYC=iwinY;
int iDia=250,iHeight=iDia, iWidth=iDia, iRad=iDia/2,
      sizFont=int(iDia/6.7);
int iKorp=5,iMetM=5,iMetH=10;  
int iRadMet=iRad-iKorp, iRadCFR=iRadMet-sizFont/2-iMetH;
int penwKorp=2, penwCfrbl=2, penwmM=2,penwmH=3;
COLORREF colKorp=RGB(200,200,200), colCfrbl=RGB(0,0,46),
 colStrMH=colKorp, colStrS=RGB(255,0,0), colmM=colKorp,
 colmH=colKorp, colCfr=colKorp;
HWND hwnd; HDC hdcMem0, hdcMem,hdc;
HBITMAP hBitmap,hOldBitmap; BITMAP bm; PAINTSTRUCT ps;
HBRUSH br; HPEN pen; HFONT hFontO, hOldFont;
MSG mMsg;
char szClassName[ ] = "WindowsApp";
char szCurrentTime[3],tstr[1000]="",str[1000]="";  
 
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
 {
  char szClassName[]="MainWindow";
  char szTitle[]="CLOCK";
  MSG msg;
  WNDCLASS wc;
  ZeroMemory (&wc, sizeof (wc) );
  wc.lpszClassName=szClassName;
  wc.hInstance=hInst;
  wc.lpfnWndProc=WndProc ;
  wc.hCursor=LoadCursor(NULL,IDC_ARROW) ;
  wc.hIcon=LoadIcon(hInst,"icon") ;
  wc.hbrBackground=GetStockBrush(GRAY_BRUSH);
  RegisterClass(&wc);
  hwnd=CreateWindow(szClassName, szTitle, WS_POPUP,
      iwinX,iwinY,iWidth,iHeight,HWND_DESKTOP,NULL,hInst,NULL);
  ShowWindow(hwnd,SW_SHOWNORMAL);
  while(GetMessage(&msg,NULL,0,0)) DispatchMessage(&msg);
  DeleteObject(hwnd);
  return 0;
 }
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,
                          WPARAM wParam,LPARAM lParam)
 {
 switch(msg)
  {
  HANDLE_MSG (hwnd, WM_CREATE, OnCreate) ;
  HANDLE_MSG(hwnd,WM_TIMER,OnTimer);
  HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
  HANDLE_MSG (hwnd, WM_DESTROY, OnDestroy);
  default:
  return(DefWindowProc(hwnd,msg,wParam,lParam));
  }
 }  
 
BOOL OnCreate(HWND hwnd,LPCREATESTRUCT)
 {
  SetWindowPos(hwnd,NULL,iwinX,iwinY,iWidth,iHeight,SWP_NOSIZE);    
  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,100,1000,NULL);
 return TRUE;
 }// OnCreate
 
void OnPaint(HWND hwnd)
 {
  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);
 }
 
void OnDestroy(HWND hwnd)
 {
  KillTimer(hwnd,1);    
  DeleteBitmap(hBitmap);
  SelectBitmap (hdcMem,hOldBitmap);
  DeleteDC(hdcMem);
  DeleteDC(hdcMem0);
  PostQuitMessage(0);
 }//OnDestroy
Walker32 вне форума Ответить с цитированием
Старый 21.05.2012, 21:28   #2
Walker32
 
Регистрация: 15.05.2011
Сообщений: 7
По умолчанию

Код:
void OnTimer(HWND hwnd,UINT)
 {
  //Перерисовка окна.Если FALSE - не мигает
  InvalidateRect(hwnd,NULL,FALSE);
 } //OnTimer
void CYFERBL(HWND hwnd)
 {
  int ii,jj,iX,iY,iXc,iYc,t=0;  
  float fUgol,fUgolc;  
      // risovanie cyferblata
  BeginPaint(hwnd, &ps);
      // zalivka korpusa
  br = CreateSolidBrush(RGB(84,84,84));
  SelectObject(hdcMem0, br);
  Rectangle(hdcMem0, 0, 0, iDia, iDia);
  DeleteObject(br);
  pen = CreatePen(PS_SOLID, 1,colKorp);
   SelectObject(hdcMem0, pen);
  br = CreateSolidBrush(colKorp);
  SelectObject(hdcMem0, br);    
  Ellipse(hdcMem0, 0, 0,iDia,iDia);
  DeleteObject(br);DeleteObject(pen);
      // zalivka cyferblata
  br = CreateSolidBrush(colCfrbl);
  SelectObject(hdcMem0, br);    
  Ellipse(hdcMem0,iKorp, iKorp,iDia-iKorp,iDia-iKorp);
  DeleteObject(br);
       //metki minut  
  pen = CreatePen(PS_SOLID, penwmM,colmM);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 60; ii++)
   {                          
   fUgol = - 0.017453292*6*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetM)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetM)*cos(fUgol));
   LineTo(hdcMem0, iX,iY);
   }
  DeleteObject(pen);
      //metki chasov
  pen = CreatePen(PS_SOLID, penwmH,colmH);
  SelectObject(hdcMem0, pen);
  for (ii = 1; ii <= 12; ii++)
   {                          
   fUgol =  - 0.017453292*30*ii;
   iX=iRad-int(iRadMet*sin(fUgol));
   iY=iRad-int(iRadMet*cos(fUgol));
   MoveToEx(hdcMem0, iX,iY, NULL);
   iX=iRad-int((iRadMet-iMetH)*sin(fUgol));
   iY=iRad-int((iRadMet-iMetH)*cos(fUgol));
   LineTo(hdcMem0, iX,  iY);
   }
  DeleteObject(pen);
     //SHRIFT CYFR
  static LOGFONT lf;
  lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
  lf.lfItalic = FALSE;
  lf.lfWeight = FW_BOLD;
  lf.lfHeight = sizFont;
  lf.lfCharSet = DEFAULT_CHARSET;
  lstrcpy( (LPSTR)&lf.lfFaceName, "Impact" );
  hFontO = CreateFontIndirect(&lf);
  hOldFont = (HFONT)SelectObject(hdcMem0, hFontO);
  SetBkMode(hdcMem0,TRANSPARENT);//CVET FONA CYFR = CV.BRUSH
  SetTextColor(hdcMem0,colCfr);//CVET CYFR
       //VYVOD CYFR
  char ttt1[2];    
  for (jj = 1; jj <= 12; jj++)
   {
   fUgolc =  - 0.017453292*30*jj;
   iXc=iRad-int(iRadCFR*sin(fUgolc))-sizFont/4;
   iYc=iRad-int(iRadCFR*cos(fUgolc))-sizFont/2;
   wsprintf(ttt1,"%d",jj);
   TextOut(hdcMem0,iXc ,iYc, ttt1, strlen(ttt1));
   }
  EndPaint(hwnd, &ps);
 } //CYFERBL
void STRELKA (COLORREF colStr,int radSTR,int shirSTR,float strUgol)
 {
  int okrR=3*shirSTR;    
  int penwSTR=2;    
  int strX1=iRad+int(0.3*radSTR * sin(strUgol)-shirSTR*cos(strUgol));
  int strY1=iRad+int(0.3*radSTR * cos(strUgol)+shirSTR*sin(strUgol));
  int strX2=iRad+int(0.3*radSTR * sin(strUgol)+shirSTR*cos(strUgol));
  int strY2=iRad+int(0.3*radSTR * cos(strUgol)-shirSTR*sin(strUgol));
  int strX=iRad-int(radSTR * sin(strUgol));
  int strY=iRad-int(radSTR * cos(strUgol));
  POINT pt[3]={{strX1, strY1}, {strX2, strY2}, {strX, strY}};
  pen = CreatePen(PS_SOLID, penwSTR,colStr);
  SelectObject(hdcMem, pen);
  br = CreateSolidBrush(colStr);
  SelectObject(hdcMem, br);  
  Polygon(hdcMem,pt,3);
  Ellipse(hdcMem, iRad-okrR, iRad-okrR,iRad+okrR,iRad+okrR);
  DeleteObject(br);
  DeleteObject(pen);
 }//STRELKA
Walker32 вне форума Ответить с цитированием
Старый 22.05.2012, 01:36   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

а зачем тут эти две простыни плохоформатированного кода? Вам нужно поднять нтп или снтп клиента. Там в конце есть наброски кода. Да и примеры нагуглить не сложно, вот, первый попавшийся.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
часы lulia Паскаль, Turbo Pascal, PascalABC.NET 12 05.12.2011 22:33
Часы vadiprog Помощь студентам 1 03.10.2011 07:36
Часы ВалекFCRK Общие вопросы Delphi 3 19.06.2011 22:43
Часы в С++ voffka_C++ Помощь студентам 1 14.11.2010 21:29
Часы Bingam Vici Свободное общение 5 18.05.2009 14:50