qiuxihuayong 2015-04-15 23:31 采纳率: 0%
浏览 1522

C++游戏背景移动了75次后不动了,大神看一下为什么啊?

#include
#include
static int x,y;
LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);

int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="Weixin2003";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls);
x=0;
y=0;
HWND hwnd;
hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
0,0,806,630,NULL,NULL,hInstance,NULL);

ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);



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

}
POINT pts[4]=

{

{ 0, 0},

{ 800, 0},

{ 800, 600 },

{ 0, 600 }

};
LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{

case WM_CHAR:
    char szChar[20];
    sprintf(szChar,"char is %d",wParam);
    MessageBox(hwnd,szChar,"weixin",0);
    break;
case WM_LBUTTONDOWN:

//PostMessage(hwnd,WM_PAINT,NULL,NULL);

// InvalidateRect;
// UpdateWindow(hwnd);
// RedrawWindow(hwnd,CONST RECT* lprcUpdate,HRGN hrgnUpdate,UINT flags)
// RECT * lprcUpdate;

//RECT rect;

//GetClientRect(hwnd,&rect);

    x=x+1;
    y=y+1;

//HRGN rgn;
//rgn=CreatePolygonRgn(pts, 4, WINDING);

//SetWindowRgn(hwnd, rgn, FALSE);

//RedrawWindow(hwnd,&rect,rgn,RDW_INTERNALPAINT);

//InvalidateRect;
// UpdateWindow(hwnd);

// GetClientRect(hwnd,&rect);
// InvalidateRect(hwnd,&rect,true);
InvalidateRect(hwnd, NULL, TRUE);
UpdateWindow(hwnd);

//SendMessage(hwnd,WM_PAINT,NULL,NULL);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps; //第一步:建立窗口DC三步骤 HDC,PS,BP
hDC=BeginPaint(hwnd,&ps); //特别注明:没有这个BeginPaint和EndPaint窗口将无法正常退出。
HDC hMemDC; //第二步:建立内存DC

    hMemDC=CreateCompatibleDC(hDC); //第三步:让两DC兼容
    HBITMAP hBitmap; //第四步:建立BMP 两步骤:定义,加载图
    hBitmap=(HBITMAP)LoadImage(NULL,"circle.bmp",IMAGE_BITMAP, 
    0,0,LR_DEFAULTCOLOR|LR_LOADFROMFILE); 
    SelectObject(hMemDC,hBitmap); //第五步:内存DC上画图(用BMP画满它)
    //将内存DC 中的内容复制到窗口DC 中去
   // BitBlt(hDC,0,0,800,600,hMemDC,x-1,y-1,SRCCOPY); 





    BitBlt(hDC,0,0,800,600,hMemDC,x,y,SRCCOPY);    //第六步:选择内存区域粘贴到窗口DC
   // SelectObject(hMemDC,hOldBitmap);         
    DeleteDC(hMemDC) ;        //删除内存DC  //第七步:释放资源。
    EndPaint(hwnd,&ps);    //删除窗口DC 
    break;

    case WM_ERASEBKGND:

//什么也不做,返回0使默认窗口回调不再处理这个消息

return 0;

case WM_CLOSE:
    if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))
    {
        DestroyWindow(hwnd);
    }
    break;
case WM_DESTROY:
    PostQuitMessage(0);
    break;
default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;

}

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-04-16 00:00
    关注

    调试下,看看对应的消息有没有走到,是不是超出窗口范围了。

    评论

报告相同问题?

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上