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

windows刷新客户区的有关问题

2012-04-08 
windows刷新客户区的问题C/C++ code#include windows.h#define DIVISIONS 5LRESULT CALLBACK WndProc (H

windows刷新客户区的问题

C/C++ code
#include <windows.h>#define DIVISIONS 5LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR  szCmdLine, int iCmdShow){    static TCHAR      szAppName[] = TEXT ("Checker1") ;    HWND         hwnd ;    MSG          msg ;    WNDCLASS     wndclass ;    wndclass.style                               = CS_HREDRAW | CS_VREDRAW ;    wndclass.lpfnWndProc                         = WndProc ;    wndclass.cbClsExtra                          = 0 ;    wndclass.cbWndExtra                          = 0 ;    wndclass.hInstance                           = hInstance ;    wndclass.hIcon                               = LoadIcon (NULL, IDI_APPLICATION) ;    wndclass.hCursor                              = LoadCursor (NULL, IDC_ARROW) ;    wndclass.hbrBackground              = (HBRUSH) GetStockObject (WHITE_BRUSH) ;    wndclass.lpszMenuName                = NULL ;    wndclass.lpszClassName               = szAppName ;    if (!RegisterClass (&wndclass))    {        MessageBox (  NULL, TEXT ("Program requires Windows NT!"),                        szAppName, MB_ICONERROR) ;        return 0 ;    }    hwnd = CreateWindow (szAppName, TEXT ("Checker1 Mouse Hit-TestDemo"),                         WS_OVERLAPPEDWINDOW,                         CW_USEDEFAULT, CW_USEDEFAULT,                         CW_USEDEFAULT, CW_USEDEFAULT,                         NULL, NULL, hInstance, NULL) ;    ShowWindow (hwnd, iCmdShow) ;    UpdateWindow (hwnd) ;    while (GetMessage (&msg, NULL, 0, 0))    {        TranslateMessage (&msg) ;        DispatchMessage (&msg) ;    }    return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message,                          WPARAM wParam,LPARAM lParam){    static BOOL          fState[DIVISIONS][DIVISIONS] ;    static int            cxBlock, cyBlock ,nHit ;    static  char        szBuffer[59];    HDC                    hdc ;    int                     x, y ;    static int             nx,ny;    PAINTSTRUCT           ps ;    RECT                   rect ;    switch (message)    {    case   WM_SIZE :        cxBlock = LOWORD (lParam) / DIVISIONS ;        cyBlock = HIWORD (lParam) / DIVISIONS ;        return 0 ;    case WM_LBUTTONDOWN :         x = LOWORD (lParam) / cxBlock ;        y = HIWORD (lParam)  / cyBlock ;        if (nx==x&&ny==y)        {            nHit++;            hdc=BeginPaint(hwnd,&ps);            TextOut(hdc,10,10,szBuffer,wsprintf(szBuffer,"hit is :%d",nHit));            EndPaint(hwnd,&ps);            InvalidateRect (hwnd, &rect, FALSE) ;        }        else        {            InvalidateRect (hwnd, &rect, FALSE) ;        }        return 0 ;    case   WM_PAINT :        hdc = BeginPaint (hwnd, &ps) ;        for (x = 0 ; x < DIVISIONS ; x++)            for (y = 0 ; y < DIVISIONS ; y++)            {                Rectangle (hdc, x * cxBlock, y * cyBlock, (x + 1) * cxBlock, (y + 1) * cyBlock) ;            }        TextOut(hdc,10,10,szBuffer,wsprintf(szBuffer,"hit is :%d",nHit));        srand(time(0));        nx=x=rand()%5;        ny=y=rand()%5;        fState[x][y]=1;        if ( fState [x][y] )                {                    MoveToEx (hdc, x * cxBlock,  y * cyBlock, NULL) ;                    LineTo(hdc, (x+1) * cxBlock, (y+1) * cyBlock) ;                    MoveToEx (hdc, x * cxBlock, (y+1) * cyBlock, NULL) ;                    LineTo (hdc, (x+1) * cxBlock, y  * cyBlock) ;                }        InvalidateRect (hwnd, NULL, FALSE) ;        Sleep(500);        fState[x][y]=0;        EndPaint (hwnd,&ps);        return 0 ;    case   WM_DESTROY :        PostQuitMessage (0) ;        return 0 ;    }    return DefWindowProc (hwnd, message, wParam, lParam) ;}


个人改编自原书源代码,想做成“打地鼠”的游戏,各位编译下就知道了。运行就可以发现问题。麻烦各位了,谢谢!

[解决办法]
单步调试,现在忙
晚上帮你看看
[解决办法]
C/C++ code
#include <windows.h>#include <time.h>#define DIVISIONS 5LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR  szCmdLine, int iCmdShow){    static TCHAR      szAppName[] = TEXT ("Checker1") ;    HWND         hwnd ;    MSG          msg ;    WNDCLASS     wndclass ;    wndclass.style                               = CS_HREDRAW | CS_VREDRAW ;    wndclass.lpfnWndProc                         = WndProc ;    wndclass.cbClsExtra                          = 0 ;    wndclass.cbWndExtra                          = 0 ;    wndclass.hInstance                           = hInstance ;    wndclass.hIcon                               = LoadIcon (NULL, IDI_APPLICATION) ;    wndclass.hCursor                              = LoadCursor (NULL, IDC_ARROW) ;    wndclass.hbrBackground              = (HBRUSH) GetStockObject (WHITE_BRUSH) ;    wndclass.lpszMenuName                = NULL ;    wndclass.lpszClassName               = szAppName ;    if (!RegisterClass (&wndclass))    {        MessageBox (  NULL, TEXT ("Program requires Windows NT!"),            szAppName, MB_ICONERROR) ;        return 0 ;    }    hwnd = CreateWindow (szAppName, TEXT ("Checker1 Mouse Hit-TestDemo"),        WS_OVERLAPPEDWINDOW,        CW_USEDEFAULT, CW_USEDEFAULT,        CW_USEDEFAULT, CW_USEDEFAULT,        NULL, NULL, hInstance, NULL) ;    ShowWindow (hwnd, iCmdShow) ;    UpdateWindow (hwnd) ;    while (GetMessage (&msg, NULL, 0, 0))    {        TranslateMessage (&msg) ;        DispatchMessage (&msg) ;    }    return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message,                          WPARAM wParam,LPARAM lParam){    static BOOL          fState[DIVISIONS][DIVISIONS] ;    static int            cxBlock, cyBlock ,nHit ;    TCHAR        szBuffer[59];    HDC                    hdc ;    int                     x, y ;    static int             nx,ny;    PAINTSTRUCT           ps ;    RECT                   rect ;    switch (message)    {    case   WM_SIZE :        cxBlock = LOWORD (lParam) / DIVISIONS ;        cyBlock = HIWORD (lParam) / DIVISIONS ;        return 0 ;    case WM_LBUTTONDOWN :        x = LOWORD (lParam) / cxBlock ;        y = HIWORD (lParam)  / cyBlock ;        if (nx==x&&ny==y)        {            nHit++;            hdc=BeginPaint(hwnd,&ps);            TextOut(hdc,10,10,szBuffer,wsprintf(szBuffer,TEXT("hit is :%d"),nHit));            EndPaint(hwnd,&ps);            InvalidateRect (hwnd, &rect, FALSE) ;        }        else        {            InvalidateRect (hwnd, &rect, FALSE) ;        }        return 0 ;    case   WM_PAINT :        hdc = BeginPaint (hwnd, &ps) ;        for (x = 0 ; x < DIVISIONS ; x++)            for (y = 0 ; y < DIVISIONS ; y++)            {                Rectangle (hdc, x * cxBlock, y * cyBlock, (x + 1) * cxBlock, (y + 1) * cyBlock) ;            }            TextOut(hdc,10,10,szBuffer,wsprintf(szBuffer,TEXT("hit is :%d"),nHit));            srand(time(0));            nx=x=rand()%5;            ny=y=rand()%5;            fState[x][y]=1;            if ( fState [x][y] )            {                MoveToEx (hdc, x * cxBlock,  y * cyBlock, NULL) ;                LineTo(hdc, (x+1) * cxBlock, (y+1) * cyBlock) ;                MoveToEx (hdc, x * cxBlock, (y+1) * cyBlock, NULL) ;                LineTo (hdc, (x+1) * cxBlock, y  * cyBlock) ;            }            InvalidateRect (hwnd, NULL, FALSE) ;            Sleep(500);            fState[x][y]=0;            EndPaint (hwnd,&ps);            return 0 ;    case   WM_DESTROY :        PostQuitMessage (0) ;        return 0 ;    }    return DefWindowProc (hwnd, message, wParam, lParam) ;} 


[解决办法]
哥们,你工程没建错?win32项目(vs2010)我这有警告 但是没错误啊,运行的时候有个叉叉在动~~

还得改:
点“项目(V)”->最底下的那个“xxxxx 属性”
左边展开“配置属性”,点“常规”
把右边倒数第三个的“使用 Unicode 字符集”修改成“使用多字节字符集”,点确定
现在可以点上面的绿色三角形开始编译调试了,然后就运行起来产生一个窗口了。
注意一下,如果你把编译模式“Debug”改成“Release”,是还要设置一次字符集的,因为这两种编译模式的设置都是分开的。

热点排行