Регистрация: 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) ;
Последний раз редактировалось Walker32; 10.06.2012 в 16:11.
|