【透明画刷】用C写WIN32应用程序的时候怎么用透明画刷?
用VS2008写一个钟表程序的时候想用到透明画刷来让表盘能完整的显示出来。。
或者有 图像画刷 也可以。。
附上 画指针的部分的 代码
void DrawClockText(HDC hDC)
{
SYSTEMTIME datetime;
RECT rec;
int len=43;
double PI = acos(-1.0);
HBRUSH hBrush;
HFONT hfon;
HPEN hpen;
GetClientRect(hDC,&rec) ; //得到背影区域
//hBrush = CreateSolidBrush( RGB(195,17,255)); //建立画刷颜色
//FillRect(hDC,&rec,hBrush);
SetBkMode(hDC,TRANSPARENT);
Ellipse(hDC,19,20,113,108);
SetTextColor(hDC,RGB(255,255,255));
GetLocalTime(&datetime);
hpen=CreatePen(PS_SOLID,2,RGB(0,255,0));//秒针
SelectObject(hDC,hpen);
MoveToEx (hDC,64,64,NULL);
LineTo(hDC,64+len*sin(6*datetime.wSecond*PI/180),64-len*cos(6*datetime.wSecond*PI/180));
len=33;
hpen=CreatePen(PS_SOLID,3,RGB(255,0,0));
SelectObject(hDC,hpen);
MoveToEx(hDC,64,64,NULL);
LineTo(hDC,64+len*sin(6*datetime.wMinute*PI/180),64-len*cos(6*datetime.wMinute*PI/180));
len=25;
hpen=CreatePen(PS_SOLID,4,RGB(0,0,255));
SelectObject(hDC,hpen);
MoveToEx(hDC,64,64,NULL);
LineTo(hDC,64+len*sin((datetime.wHour%12*30+datetime.wMinute/2)*PI/180),64-len*cos((datetime.wHour%12*30+datetime.wMinute/2)*PI/180));
}
求各位大神指教!
[解决办法]
界面是“一层一层”的画出来的
如果想画上层的时候,显示下层的东西,上层可以用“透明”来画。
[解决办法]
#include <math.h>
#include <windows.h>
#include "resource.h"
#define KUAN 360
#define WS_EX_LAYERED 0x80000
#define HUDU(a) (3.1415*(a)/180.0)
typedef BOOL (WINAPI*FPT)(HWND,int,BOOL,DWORD);
FPT fp;
HINSTANCE hInst;
HPEN hPen[7];
HBRUSH hBrush[7];
int cxscreen,cyscreen;
SYSTEMTIME tm;
int iJiaoDuShiZhen,iJiaoDuFenZhen,iJiaoDuMiaoZhen,iJiaoDuHaoMiao;
HDC hdcMem;
HBITMAP hBitMap;
HANDLE hMut;
int i;
BOOL WINAPI Pro2(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
if(msg==WM_COMMAND)
{
if(wParam==IDOK)EndDialog(hWnd,0);
return 1;
}
return 0;
}
LRESULT WINAPI Pro(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static int iTouMing=255;
static int iJiaJianTouMingDu=-10;
static int r[7];
int j;
char sz[32];
POINT pts[4];
HMENU hMenu;
static BOOL bBeiJing;
HPEN hPenj;
static int icolors[]={0xff,0xff00,0xff0000,0xffff,0xffff00,0xff00ff,0x99ff};
switch(msg)
{
case WM_CREATE:
hPen[0]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,0xff);
hPen[1]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,0xff00);
hPen[2]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,0xff0000);
hPen[3]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,0xffff);
hPen[4]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,0xffff00);
hPen[5]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,0xff00ff);
hPen[6]=CreatePen(6
[解决办法]
PS_ENDCAP_ROUND,1,1);
hBrush[0]=CreateSolidBrush(0xff);
hBrush[1]=CreateSolidBrush(0xff00);
hBrush[2]=CreateSolidBrush(0xff0000);
hBrush[3]=CreateSolidBrush(0xffff);
hBrush[4]=CreateSolidBrush(0xffff00);
hBrush[5]=CreateSolidBrush(0xff00ff);
hBrush[6]=CreateSolidBrush(0x99ff);
hdcMem=CreateCompatibleDC(NULL);
SetBkMode(hdcMem,0);
SetTextAlign(hdcMem,TA_CENTER);
SetTimer(hWnd,1,40,NULL);
break;
case WM_SIZE:
if(hBitMap)
{
SelectObject(hdcMem,(HBITMAP)NULL);
DeleteObject(hBitMap);
}
hdc=GetDC(hWnd);
hBitMap=CreateCompatibleBitmap(hdc,KUAN,KUAN);
ReleaseDC(hWnd,hdc);
SelectObject(hdcMem,hBitMap);
break;
case WM_RBUTTONDOWN:
GetCursorPos(pts);
hMenu=LoadMenu(hInst,LPCSTR(IDR_MENU1));
hMenu=GetSubMenu(hMenu,0);
TrackPopupMenu(hMenu,TPM_LEFTALIGN,pts[0].x,pts[0].y,0,hWnd,NULL);
break;
case WM_MOUSEMOVE:
bBeiJing=75;
break;
case WM_COMMAND:
switch(wParam)
{
case ID_TUICHU:
PostQuitMessage(0);
break;
case ID_GUANYU:
DialogBoxParam(hInst,LPCSTR(IDD_DIALOG1),hWnd,Pro2,0);
break;
}
break;
case WM_TIMER:
fp(hWnd,0,iTouMing,3);
iTouMing+=iJiaJianTouMingDu;
if(iTouMing>=230){iTouMing=230;iJiaJianTouMingDu=-6;}
if(iTouMing<=20)
{
SetTextColor(hdcMem,RGB(rand()%200+55,rand()%200+55,rand()%200+55));
iTouMing=20;
iJiaJianTouMingDu=6;
for (i=0;i<7;i++)
{
SuiJi:
r[i]=rand()%7;
for (j=0;j<i;j++)
{
if(r[i]==r[j])goto SuiJi;
}
}
}
SelectObject(hdcMem,GetStockObject(BLACK_BRUSH));
PatBlt(hdcMem,0,0,KUAN,KUAN,PATCOPY);
if(bBeiJing)
{
bBeiJing--;
SelectObject(hdcMem,GetStockObject(DKGRAY_BRUSH));
Ellipse(hdcMem,0,0,KUAN,KUAN);
}
SelectObject(hdcMem,hBrush[r[0]]);
BeginPath(hdcMem);
Ellipse(hdcMem,0,0,KUAN,KUAN);
Ellipse(hdcMem,KUAN/20,KUAN/20,KUAN-KUAN/20,KUAN-KUAN/20);
EndPath(hdcMem);
FillPath(hdcMem);
for (i=0;i<12;i++)//12点
{
SelectObject(hdcMem,GetStockObject(WHITE_PEN));
Ellipse(hdcMem,
(KUAN/2+KUAN*36/80*sin(HUDU(i*30))-KUAN/40+1),
(KUAN/2-KUAN*36/80*cos(HUDU(i*30))-KUAN/40+1),
(KUAN/2+KUAN*36/80*sin(HUDU(i*30))+KUAN/40+1),
(KUAN/2-KUAN*36/80*cos(HUDU(i*30))+KUAN/40+1));
SelectObject(hdcMem,hPen[6]);
SelectObject(hdcMem,hBrush[r[1]]);
Ellipse(hdcMem,
(KUAN/2+KUAN*36/80*sin(HUDU(i*30))-KUAN/40),
(KUAN/2-KUAN*36/80*cos(HUDU(i*30))-KUAN/40),
(KUAN/2+KUAN*36/80*sin(HUDU(i*30))+KUAN/40),
(KUAN/2-KUAN*36/80*cos(HUDU(i*30))+KUAN/40));
}
for (i=0;i<60;i++)//60点
{
if(i%5==0)continue;
SetPixel(hdcMem,
(KUAN/2+KUAN*37/80*sin(HUDU(i*6))),
(KUAN/2-KUAN*37/80*cos(HUDU(i*6))),
0x12);
SetPixel(hdcMem,
(KUAN/2+KUAN*37/80*sin(HUDU(i*6))+1),
(KUAN/2-KUAN*37/80*cos(HUDU(i*6))+1),
0xffffff);
}
GetLocalTime(&tm);
wsprintf(sz,"%02d:%02d:%02d",tm.wHour,tm.wMinute,tm.wSecond);
TextOut(hdcMem,KUAN/2,KUAN*2/3,sz,strlen(sz));
//未完待续