首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【透明画刷】用C写WIN32应用程序的时候如何用透明画刷

2013-11-23 
【透明画刷】用C写WIN32应用程序的时候怎么用透明画刷?用VS2008写一个钟表程序的时候想用到透明画刷来让表盘

【透明画刷】用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));

//未完待续


[解决办法]
搞东西 应该顶【透明画刷】用C写WIN32应用程序的时候如何用透明画刷
[解决办法]
hBrush=(HBRUSH)GetStockObject(HOLLOW_BRUSH);

热点排行