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

请教怎么在屏幕下显示一个数字或是一个倒计时

2013-02-24 
请问如何在屏幕上显示一个数字或是一个倒计时不是指在控制台窗口上,是在电脑屏幕上;GDI可不,但是只是画出

请问如何在屏幕上显示一个数字或是一个倒计时
不是指在控制台窗口上,是在电脑屏幕上;
GDI可不,但是只是画出来,但是怎么有重影;请问还有其他方法吗?


#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);
//未完待续


[解决办法]
可以使用一个通明窗口来显示你的字, 直接在桌面的DC上画出来, 虽然画起来简单,但擦除就麻烦了. 
自己搞个通明窗口, 有点类似于" 桌面卡拉OK歌词".

热点排行