Diễn Đàn Tin Học

Hiển thị kết quả từ 1 đến 2 / 2
  1. #1
    Tham gia
    01-10-2002
    Bài viết
    38
    Like
    0
    Thanked 0 Times in 0 Posts

    [TUTOR] "ĐIỀU KHỂN MOUSE BẰNG C"

    khi lập trình các ứng dụng trong môi trường DOS, ta thường không mấy khi đến mouse vì cho rằng nó là đặc trưng của windows, thực ra ta vẫn có thể làm được điều này. Ngắt 33H của Dos đảm nhiệm vai trò điều khiển mouse. ngắt này có 11 chức năng ( nếu tôi không nhớ nhấm ) nhưng tôi chỉ trình bày những gì cơ bản và cẩn thiết nhất, những vần đề thuộc về mở rộng sẽ đưộc bàn tời sau.
    sau đây là bảng tóm tắt một số chức năng cơ bản của int 33H. để sử dụng, bạn đặt giá trị cho thanh ghi ax, gọi int 33H.
    có lẽ tôi không nên trình bày qúa nhiều về interupt để các bạn mới bắt đầu không "sa lầy" vào lập trỉnh điểu khiển thiết bị, do đó tôi giới thiệu luôn code của chương trinh. dây là một file header, bạn dùng notepad , chép đoạn chương trình này để tạo thảnh file mouse.h , chép file này vào thư mục include rồi sau đó sử dụng như mọi file header thông thường
    Lưu ý là ở text mode, bạn phải chia cho 8 toạ độ x, y cụ thể là
    MouseCoord(&x,&y)
    x /= 8;
    y/=8 ;
    thì mới nhận chính xác toạ độ , còn ở chề độ graph thì khỏi cần
    #include <dos.h>
    #include <stdio.h>
    typedef unsigned char byte;
    //prototype
    // lấy toạ dộ mouse
    void MouseCoords (int *xpos, int *ypos );
    // kiểm tra xem button trái có được nhấn hay không
    byte MouseLPressed (void);
    //kiểm tra xem buttontphải có được nhấn hay không
    byte MouseRPressed (void);
    //kiểm tra xem button giữa có được nhấn hay không
    byte MouseMidPressed (void);

    //kiểm tra xem button giữa có được thả ra chưa
    byte MouseMidReleased (void);
    //kiểm tra xem button trái có được thả ra chưa
    byte MouseLReleased (void);
    //kiểm tra xem button phải có được thả ra chưa
    byte MouseRReleased (void);
    // khởi tạo mouse
    byte MouseInit (void);
    // hiện mouse
    void MouseShow (void);
    // dấu mouse
    void MouseHide (void);
    // đặt vị trí mouse tại toạ độ xy
    void MouseSetPosition (int x, int y );
    // lấy trạng thái mouse khi đưôc nhấn
    void MouseGetBPressInfor (int *Status, int *Count, int Button);
    // lấy trạng thái mouse khi nhả ra
    void MouseGetBRelInfor (int *Status, int *Count, int Button);
    // giới hạn tầm hoạt động của mouse
    void MouseSetHMinMax (int Min, int Max);
    void MouseSetVMinMax (int Min, int Max);
    void MouseReset (void);


    void MouseReset (void)
    {
    struct REGPACK regs;
    regs.r_ax = 0x21;
    regs.r_bx = 0;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    }

    byte MouseInit (void)
    {
    struct REGPACK regs;
    regs.r_ax = 0;
    regs.r_bx = 0;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    if ( regs.r_ax != 0 ) return 1 ;
    else return 0 ;
    }


    void MouseShow (void)
    {
    struct REGPACK regs;
    regs.r_ax = 1;
    regs.r_bx = 0;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    }
    void MouseHide (void)
    {
    struct REGPACK regs;
    regs.r_ax = 2;
    regs.r_bx = 0;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    }
    void MouseCoords (int *xpos, int *ypos )
    {
    struct REGPACK regs;
    regs.r_ax = 3;
    regs.r_bx = 0;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    *xpos = regs.r_cx;
    *ypos = regs.r_dx;}
    void MouseSetPosition (int x, int y )
    {
    struct REGPACK regs;
    regs.r_ax = 4;
    regs.r_bx = 0;
    regs.r_cx = x;
    regs.r_dx = y;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    }


    void MouseGetBPressInfor (int *Status, int *Count, int Button)
    {
    struct REGPACK regs;
    regs.r_ax = 5;
    regs.r_bx = Button;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    *Status = regs.r_ax;
    *Count = regs.r_bx;
    }
    void MouseGetBRelInfor (int *Status, int *Count, int Button)
    {
    struct REGPACK regs;
    regs.r_ax = 6;
    regs.r_bx = Button;
    regs.r_cx = 0;
    regs.r_dx = 0;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    *Status = regs.r_ax;
    *Count = regs.r_bx;
    }
    void MouseSetHMinMax (int Min, int Max)
    {
    struct REGPACK regs;
    regs.r_ax = 7;
    regs.r_bx = 0;
    regs.r_cx = Min;
    regs.r_dx = Max;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);}
    void MouseSetVMinMax (int Min, int Max)
    {
    struct REGPACK regs;
    regs.r_ax = 8;
    regs.r_bx = 0;
    regs.r_cx = Min;
    regs.r_dx = Max;
    regs.r_si = 0;
    regs.r_di = 0;
    regs.r_ds = 0;
    regs.r_es = 0;
    intr(0x33,&regs);
    }

    byte MouseMidPressed (void)
    {
    int Status, Count ;
    MouseGetBPressInfor(&Status,&Count,2);
    if ( Status == 4) return 1 ;
    else return 0 ;
    }
    byte MouseMidReleased (void)
    {
    int Status, Count ;
    MouseGetBRelInfor(&Status,&Count,2);
    if (( Status == 4) && (Count > 0 )) return 1;
    else return 0;
    }
    byte MouseLPressed (void)
    {
    int Status, Count ;
    MouseGetBPressInfor(&Status,&Count,0);
    if ( (Status) ==1) return 1 ;
    else return 0 ;
    }

    byte MouseLReleased (void)
    {
    int Status, Count ;
    MouseGetBRelInfor(&Status,&Count,0);
    if (( Status == 0) && (Count > 0 )) return 1;
    else return 0;
    }
    byte MouseRPressed (void)
    {
    int Status, Count ;
    MouseGetBPressInfor(&Status,&Count,1);
    if ( Status == 2 ) return 1 ;
    else return 0 ;
    }
    Quote Quote

  2. #2
    Tham gia
    25-01-2007
    Location
    Hồ Chí Minh
    Bài viết
    157
    Like
    0
    Thanked 0 Times in 0 Posts

    Hấp dẫn đây !

    Có mouse.h rồi thì bây giờ làm cách nào để bắt sự kiện mouse click vậy hả các bác ?

Bookmarks

Quy định

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •