回 帖 发 新 帖 刷新版面

主题:[原创]仿骇客帝国数据精流

#include<windows.h>
#include<stdlib.h>
#include<time.h>

#define ID_TIMER1 1
#define ID_TIMER2 2

LRESULT CALLBACK Winproc(HWND,UINT,WPARAM,LPARAM);

int cxChar,cyChar;
COLORREF color[] = {RGB(176,251,255),RGB(147,250,255),RGB(117,249,255),RGB(89,247,255),RGB(47,244,255),RGB(11,243,255),RGB(0,216,227),RGB(0,186,196),RGB(0,153,162),RGB(0,139,147),RGB(0,115,121),RGB(0,95,100)};



int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    static HWND hwnd;
    TCHAR szAppName[] = TEXT("HK");
    MSG msg;
    WNDCLASS wc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wc.hCursor = NULL;
    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wc.hInstance = hInstance;
    wc.lpszClassName = szAppName;
    wc.lpfnWndProc = Winproc;
    wc.lpszMenuName = NULL;
    wc.style = CS_VREDRAW | CS_HREDRAW;

    if(!RegisterClass(&wc))
    {
        MessageBox(NULL,TEXT("注册失败"),TEXT("警告框"),MB_OK);
        return 0;
    }

    hwnd = CreateWindow(szAppName,TEXT("矩阵数据流"),
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT,CW_USEDEFAULT,
                        CW_USEDEFAULT,CW_USEDEFAULT,
                        NULL,NULL,hInstance,NULL);

    ShowWindow(hwnd,SW_MAXIMIZE);
    UpdateWindow(hwnd);

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LRESULT CALLBACK Winproc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{
    int x,y;
    static int *p;
    static int value,i;
    static int cyScreen,cxScreen;
    static int iLine=-1;
    static TCHAR szBuffer[1];
    static HDC hdc;
    static SYSTEMTIME st;

    switch(message)
    {
    case WM_CREATE:
        hdc = GetDC(hwnd);
        SetBkColor (hdc, 0) ;
        cxChar = LOWORD(GetDialogBaseUnits());
        cyChar = HIWORD(GetDialogBaseUnits());
    
        SetTimer(hwnd,ID_TIMER1,50,NULL);
    
        SetTimer(hwnd,ID_TIMER2,60,NULL);
        
        return 0;

    case WM_SIZE:
        
        cyScreen = HIWORD(lparam);
        cxScreen = LOWORD(lparam);
        if(p) delete []p;
        p = new int[(int)(cxScreen/cxChar)];
        for(x=0; x<(int)(cxScreen/cxChar); x++)
            *(p+x) = rand()%100;
        return 0;

    case WM_TIMER:
        switch(wparam)
        {
            case ID_TIMER1:
                if(value>=10) value=0;
                value++;            
             break;

            case ID_TIMER2:
                
                if(iLine>=260)
                { 
                    iLine =0;
                    srand((unsigned)time(0));
                    for(x=0; x<(int)(cxScreen/cxChar); x++)
                        *(p+x) = rand()%100;
                }
                iLine++;
            for(x=0; x<=(int)(cxScreen/cxChar);x++)

                for(y=0; y<=((int)(iLine-*(p+x))); y++)

                {
               
                 SetTextColor(hdc,color[(((iLine-*(p+x)-y)>107)?11:(iLine-*(p+x)-y))%12]);
                 TextOut(hdc, x*cxChar, y*cyChar, szBuffer,wsprintf(szBuffer, TEXT("%i"),(rand()+value)%10));
                }

                break;

        }
             return 0;

        case WM_DESTROY:
            delete []p;
            ReleaseDC(hwnd,hdc);
            KillTimer(hwnd,1);
            KillTimer(hwnd,2);
            PostQuitMessage(0);
            return 0;
    }
return DefWindowProc(hwnd,message,wparam,lparam);
}

回复列表 (共19个回复)

11 楼

那就写
delete[] p;
p = NULL;
这样应该可以了吧。

12 楼

[quote]我说的是

if(p)&nbsp;delete[]p;

可以直接写成

delete&nbsp;[]p;

而不需要现判断是否为空[/quote]


这个想法更要不的了~~第一次收到WM_SIZE的时候, 释放没有申请的内存吗?!

13 楼

8楼的理解正解~用静态也可以,就是申请一个足够大的内存

14 楼

试了下,十楼的建议可以的,尽管我还是喜欢传统的写法

15 楼


十楼的说法完全正确,
最重要的是能提高代码的执行效率啊!
因为不用执行判断语句,就节省了不少CPUtime.

16 楼


请问像这样winmain()这样的在VC中哪种工程文件编译
  我把它放到我们一般用的win32 console Application中不能运行,好像说没有main()主函数
  
  请知道的告诉我下啊,谢谢

17 楼


写在WIN32 CONSOLE上面的 WIN32 APPLICATION

18 楼


我这机器怎么什么都看不见
 
 就一个黑窗口还有个1[em8]

19 楼

Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/hack.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
这是什么意思啊?我的vc怎么总出错啊。好不容易编好的程序就是运行不出来

我来回复

您尚未登录,请登录后再回复。点此登录或注册