Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi khi kết hợp WM_MOUSEMOVE và BITMAP

    Ý tưởng: lấy tọa độ chuột trong sự kiện WM_MOUSEMOVE để load ảnh bitmap.
    Kết quả: mỗi khi di chuyển chuột ảnh di chuyển theo [IMG]images/smilies/clap_grin.gif[/IMG]
    Lỗi cần khắc phục: mỗi khi di chuyển ảnh xuất hiện vệt dài phía sau, trông rất xấu ? Mong mọi người giúp tìm ra nguyên nhân . THanks !
    Ảnh demo error


    Source:
    http://www.mediafire.com/?mjwwhqdzwgn
    http://www.savefile.com/files/2109081
    http://ultrashare.net/hosting/fl/d58187d400/game
    http://www.megaupload.com/?d=62952U8U
    http://www.turboupload.com/sw6i81lqwdkl/game.rar.html
    http://uploading.com/files/SLVV4NW3/game.rar.html
    http://www.zshare.net/download/602566621a09652f/

    Code file cpp

    Mã:
    #include<windows.h>#include"Object.h" char szAppName[50]="BIT MAP PROGRAM"; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HINSTANCE hInst;int i=0,next=1;static  int x,y;int a=0,b=0; //int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,PSTR szCmdLine,int iCmdShow){    MSG msg;    HWND hwnd;    WNDCLASS wc;    hInst=hInstance;     wc.cbClsExtra=0;    wc.cbWndExtra=0;    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    wc.hCursor = LoadCursor(NULL,IDC_ARROW);    wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);    wc.hInstance = hInstance;    wc.lpfnWndProc = WndProc;    wc.lpszClassName = szAppName;    wc.lpszMenuName = NULL;    wc.style = CS_VREDRAW|CS_HREDRAW;     if(!RegisterClass(&wc))    {        MessageBox(NULL,"Loi dang ky cua so","Thong bao",MB_ICONERROR);        return 0;    }     hwnd=CreateWindow(                      szAppName,                      "BITMAP PROGRAM",                      WS_OVERLAPPEDWINDOW,                      CW_USEDEFAULT,                      CW_USEDEFAULT,                      CW_USEDEFAULT,                      CW_USEDEFAULT,                      NULL,                      NULL,                      hInstance,                      NULL,);     ShowWindow(hwnd,iCmdShow);      SetTimer(hwnd,1,1,NULL);    UpdateWindow(hwnd);     while(GetMessage(&msg,NULL,0,0))    {        TranslateMessage(&msg);        DispatchMessage(&msg);    }    return msg.wParam;} LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){     HDC hdc1,hdc2;    PAINTSTRUCT ps;     RECT rect;    switch(msg)    {           case WM_PAINT:                hdc1=BeginPaint(hwnd,&ps);                InvalidateRect(hwnd,&rect,1);                   EndPaint(hwnd,&ps);            break;         case WM_MOUSEMOVE://lay toa do mouse roi ve anh len toa do do                x = LOWORD(lParam);                 y = HIWORD(lParam);                 hdc1=GetDC(hwnd);                   hdc2=CreateCompatibleDC(hdc1);                 tower(1,1 , x-40, y-30, hdc1, hdc2, hInst, hwnd);//Object.h                                InvalidateRect(hwnd,&rect,1);             break;//        case WM_DESTROY:            PostQuitMessage(0);                   return 0;     }     return DefWindowProc(hwnd,msg,wParam,lParam);}

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Lý do là bạn chưa xóa bitmap tại vị trí cũ. Khi xử lý WM_MOUSEMOVE, BitBlt với tham số dwDrop là SRCINVERT tại vị trí cũ để xóa hình, sau đó BitBlt tại vị trí mới để vẽ

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •