?? winmain.cpp
字號(hào):
#include <Windows.h>
#include <cmath>
#include "resource.h"
#define CLOCK_SIZE 150
#define ID_TIMER 1
HINSTANCE hInst;
HMENU hPopupMenu;
HCURSOR hCursor;
HCURSOR hCursorGrab;
HDC hDCBack,hDCClock;
HBITMAP hBmpBack,hBmpClock;
int IDBack,IDCirle,IDMask;
class CLOCKPARAM
{
public:
LONG lClockX;
LONG lClockY;
CLOCKPARAM(){};
VOID Calculate(HWND hWnd)
{
RECT stRect;
GetClientRect(hWnd,&stRect);
lClockX=(stRect.left+stRect.right)/2;
lClockY=(stRect.top+stRect.bottom)/2;
};
~CLOCKPARAM(){};
}stClockParam;
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
VOID CreateBackGround(HWND hWnd);
VOID CreateClockPic(HWND hWnd);
VOID DrawLine(HDC hDC,int iDegree,int iLineWith,int iDeLong);
int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
{
hPopupMenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
hPopupMenu=GetSubMenu(hPopupMenu,0);
hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));
hCursorGrab=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR2));
hInst=hInstance;
HICON hIcon;
HWND hWnd;
MSG msg;
hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));
WCHAR szClsName[]=TEXT("class1");
WNDCLASSEX stWndCls;
stWndCls.cbClsExtra=0;
stWndCls.cbWndExtra=0;
stWndCls.lpszMenuName=NULL;
stWndCls.cbSize=sizeof(stWndCls);
stWndCls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
stWndCls.hCursor=hCursor;
stWndCls.hIcon=hIcon;
stWndCls.hIconSm=hIcon;
stWndCls.hInstance=hInstance;
stWndCls.lpfnWndProc=WndProc;
stWndCls.lpszClassName=szClsName;
stWndCls.style=CS_HREDRAW|CS_VREDRAW;
RegisterClassEx(&stWndCls);
hWnd=CreateWindowEx(0,szClsName,TEXT("主窗口"),WS_POPUP|WS_SYSMENU,240,180
,CLOCK_SIZE,CLOCK_SIZE,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,SW_NORMAL);
UpdateWindow(hWnd);
HACCEL hAccel=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1));
while (GetMessage(&msg,NULL,0,0))
{
if (!TranslateAccelerator(hWnd,hAccel,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
POINT stPoint;
int wmID;
HDC hDC;
PAINTSTRUCT stPs;
switch (uMsg)
{
case WM_TIMER:
CreateClockPic(hWnd);
InvalidateRect(hWnd,NULL,false);
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&stPs);
BitBlt(hDC,0,0,CLOCK_SIZE,CLOCK_SIZE,hDCClock,0,0,SRCCOPY);
EndPaint(hWnd,&stPs);
break;
case WM_COMMAND:
wmID=LOWORD(wParam);
switch (wmID)
{
case ID_BACK1:
CheckMenuRadioItem(hPopupMenu,ID_BACK1,ID_BACK2,ID_BACK1,MF_BYCOMMAND);
IDBack=IDB_BACK1;
CreateBackGround(hWnd);
InvalidateRect(hWnd,NULL,false);
break;
case ID_BACK2:
CheckMenuRadioItem(hPopupMenu,ID_BACK1,ID_BACK2,ID_BACK2,MF_BYCOMMAND);
IDBack=IDB_BACK2;
CreateBackGround(hWnd);
InvalidateRect(hWnd,NULL,false);
break;
case ID_CIRCLE1:
CheckMenuRadioItem(hPopupMenu,ID_CIRCLE1,ID_CIRCLE2,ID_CIRCLE1,MF_BYCOMMAND);
IDCirle=IDB_CIRCLE1;
IDMask=IDB_MASK1;
CreateBackGround(hWnd);
InvalidateRect(hWnd,NULL,false);
break;
case ID_CIRCLE2:
CheckMenuRadioItem(hPopupMenu,ID_CIRCLE1,ID_CIRCLE2,ID_CIRCLE2,MF_BYCOMMAND);
IDCirle=IDB_CIRCLE2;
IDMask=IDB_MASK2;
CreateBackGround(hWnd);
InvalidateRect(hWnd,NULL,false);
break;
case ID_EXIT:
SendMessage(hWnd,WM_CLOSE,NULL,NULL);
break;
}
break;
case WM_RBUTTONDOWN:
GetCursorPos(&stPoint);
TrackPopupMenu(hPopupMenu,TPM_LEFTALIGN,stPoint.x,stPoint.y,NULL,hWnd,NULL);
break;
case WM_LBUTTONDOWN:
SetCursor(hCursorGrab);
SendMessage(hWnd,WM_NCLBUTTONDOWN,HTCAPTION,NULL);
SetCursor(hCursor);
break;
case WM_CREATE:
RECT stRect;
GetClientRect(hWnd,&stRect);
HRGN hRgn;
hRgn=CreateEllipticRgnIndirect(&stRect);
SetWindowRgn(hWnd,hRgn,1);
DeleteObject(hRgn);
SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
hDC=GetDC(hWnd);
hDCBack=CreateCompatibleDC(hDC);
hDCClock=CreateCompatibleDC(hDC);
hBmpBack=CreateCompatibleBitmap(hDC,CLOCK_SIZE,CLOCK_SIZE);
hBmpClock=CreateCompatibleBitmap(hDC,CLOCK_SIZE,CLOCK_SIZE);
SelectObject(hDCBack,hBmpBack);
SelectObject(hDCClock,hBmpClock);
ReleaseDC(hWnd,hDC);
IDBack=IDB_BACK1;
IDCirle=IDB_CIRCLE1;
IDMask=IDB_MASK1;
CheckMenuRadioItem(hPopupMenu,ID_BACK1,ID_BACK2,ID_BACK1,MF_BYCOMMAND);
CheckMenuRadioItem(hPopupMenu,ID_CIRCLE1,ID_CIRCLE2,ID_CIRCLE1,MF_BYCOMMAND);
CreateBackGround(hWnd);
CreateClockPic(hWnd);
InvalidateRect(hWnd,NULL,false);
SetTimer(hWnd,ID_TIMER,1000,NULL);
break;
case WM_CLOSE:
KillTimer(hWnd,ID_TIMER);
DestroyWindow(hWnd);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
return 0;
}
VOID CreateBackGround(HWND hWnd)
{
HDC hDc,hDcTemp;
HBITMAP hBmp;
HGDIOBJ hGdiObj;
hDc=GetDC(hWnd);
hDcTemp=CreateCompatibleDC(hDc);
ReleaseDC(hWnd,hDc);
hBmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDBack));
hGdiObj=CreatePatternBrush(hBmp);
hGdiObj=SelectObject(hDCBack,hGdiObj);
PatBlt(hDCBack,0,0,CLOCK_SIZE,CLOCK_SIZE,PATCOPY);
DeleteObject(hGdiObj);
hBmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDMask));
hGdiObj=SelectObject(hDcTemp,hBmp);
BitBlt(hDCBack,0,0,CLOCK_SIZE,CLOCK_SIZE,hDcTemp,0,0,SRCAND);
DeleteObject(hGdiObj);
hBmp=LoadBitmap(hInst,MAKEINTRESOURCE(IDCirle));
hGdiObj=SelectObject(hDcTemp,hBmp);
BitBlt(hDCBack,0,0,CLOCK_SIZE,CLOCK_SIZE,hDcTemp,0,0,SRCPAINT);
DeleteObject(hGdiObj);
DeleteDC(hDcTemp);
DeleteObject(hBmp);
}
VOID CreateClockPic(HWND hWnd)
{
BitBlt(hDCClock,0,0,CLOCK_SIZE,CLOCK_SIZE,hDCBack,0,0,SRCCOPY);
stClockParam.Calculate(hWnd);
SYSTEMTIME stSysTime;
GetLocalTime(&stSysTime);
HGDIOBJ hGdiObj;
hGdiObj=CreatePen(PS_SOLID,1,BLACK_PEN);
hGdiObj=SelectObject(hDCClock,hGdiObj);
DeleteObject(hGdiObj);
DrawLine(hDCClock,stSysTime.wSecond*360/60,1,5);
hGdiObj=CreatePen(PS_SOLID,2,BLACK_PEN);
hGdiObj=SelectObject(hDCClock,hGdiObj);
DeleteObject(hGdiObj);
DrawLine(hDCClock,stSysTime.wMinute*360/60,1,10);
hGdiObj=CreatePen(PS_SOLID,3,BLACK_PEN);
hGdiObj=SelectObject(hDCClock,hGdiObj);
DeleteObject(hGdiObj);
DrawLine(hDCClock,stSysTime.wHour*360/12+stSysTime.wMinute/2,1,15);
}
VOID DrawLine(HDC hDC,int iDegree,int iLineWith,int iDeLong)
{
LONG x,y,x0,y0;
x=(LONG)(stClockParam.lClockX+(CLOCK_SIZE/2-10-iDeLong)*sin(iDegree*3.1415926/180));
x0=(LONG)(stClockParam.lClockX-10*sin(iDegree*3.1415926/180));
y=(LONG)(stClockParam.lClockY-(CLOCK_SIZE/2-10-iDeLong)*cos(iDegree*3.1415926/180));
y0=(LONG)(stClockParam.lClockY+10*cos(iDegree*3.1415926/180));
MoveToEx(hDC,x0,y0,NULL);
LineTo(hDC,x,y);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -