Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Vẽ trong OnPaint chỉ hiển thị được khi resize. Giúp mình sửa lỗi

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    2

    Mặc định Vẽ trong OnPaint chỉ hiển thị được khi resize. Giúp mình sửa lỗi

    Mik đang lập trình MFC, cụ thể là muốn vẽ 1 điểm lên trên màn hình mfc ( sử dụng OpenGL - bắt buộc )
    Hàm vẽ được cài đặt trong CView::OnPaint
    Nhưng có 1 vấn đề là sau khi gọi lệnh vẽ thì p dùng chuột kéo để thay đổi kích thước cửa sổ chương trình thì mới thấy điểm ấy được vẽ.

    -Các ace đề xuất giùm mik cách sửa sao cho sau khi có lệnh vẽ là nó vẽ ngay tức thì, chứ không p tác động j thêm
    - Mik muốn chuyển hàm vẽ sang CView::OnDraw thì phải sử dụng ĐƯỢC như thế nào để vẽ được, mik đã thử dùng CClientDC và CPaintDC đều không vẽ được, cũng có thể là do không biết sử dụng DC rùi

    Đây là Project của mik "Mạng điên quá nên p up qua mediafire ae thông cảm"
    Thư viện OpenGL
    Project đây ạ
    các bạn chỉ kần chú ý vào CView::OnPaint , OnDraw , DVeDiemDlg::OnBnClickedOk() và các biến global thôi nhé, những thứ khác không liên quan.
    Hoạt động của nó là: Khi chạy chương trình, chọn Vẽ đối tượng --> vẽ điểm... - Nhập toạ độ cần vẽ lên trục toạ độ ( -10,-10,10,10 ) , rồi OK , thế là vẽ, nhưng trong đây p thay đổi kích thước cửa sổ thì vẽ mới có hiệu lực, haizz



    Sau khi xoá file .ncb nhằm mục đich đỡ nặng để up load lên , compile lại, bây giờ thì nó chạy theo đùng ý mik rồi cho dù không hề sửa tý code nào, không hiểu kái thg VS2008 này nó bị hâm hâm tnào nữa, mọi ng hướng dẫn mik cách dùng DC bên Function khác OnPaint với, thank nhìu
    Attached Files Attached Files

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    DC là Device Context, lấy DC cũng giống như trong OnPaint mà thôi.

    Sử dụng hàm API: GetDC
    Các Methods: GetDC, GetDCEx, GetWindowDC

    Bạn cần phải đọc thêm một chút tài liệu về GDI để hiểu về điều này.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    03 2011
    Nơi ở
    H3t.org
    Bài viết
    37

    Nếu không biết dùng DC thì mik có thể dùng cách khác, còn 1 vấn đề lớn mà mik đã nêu ở trên nhờ các bạn giúp:
    hôm nay tự nhiên nó lại bị hiện tượng phải dùng tay resize cửa sổ thì nó mới vẽ,

    ak , mà đặc điểm vấn đề nó thế này... khi bật hộp thoại lên thì hoặc là di chuyển hộp thoại nhập dữ liệu rồi mới ấn OK --> vẽ ngay lập tức
    hoặc là nhập dữ liệu rồi ok ngay thì phải dùng chuột kéo resize cửa sổ thì nó mới vẽ chứ không vẽ ngay lập tức, đó là tại sao ạ , e đang phân tích xem nó ở giai đoạn nào để sửa mà nghĩ chưa ra , anh em thảo luận nào?

    Đã thử Step over để theo dõi nhưng không mò được ra , haizz
    Đã được chỉnh sửa lần cuối bởi Nupakachy : 03-08-2011 lúc 07:09 PM.

  4. #4
    Ngày gia nhập
    05 2011
    Bài viết
    20

    Tìm hiểu CWindow::Invalidate()

  5. #5
    Ngày gia nhập
    03 2011
    Nơi ở
    H3t.org
    Bài viết
    37

    ý, bác Tú , đã dùng cả Invalidate(); trong OnBnClick() rồi mà :(

  6. #6
    Ngày gia nhập
    02 2009
    Bài viết
    23

    Mặc định Vẽ trong OnPaint chỉ hiển thị được khi resize. Giúp mình sửa lỗi

    Bạn hãy dùng timer để vẽ. Dùng invaildate để redraw.

  7. #7
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi BabyCat Xem bài viết
    Tìm hiểu CWindow::Invalidate()
    Đúng như BabyCat nói, ngoài ra bạn nên tìm hiểu thêm 2 hàm
    OnSize() : hàm này được gọi sau khi đã Resize cửa sổ

    http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

    OnSizing(); Hàm này được gọi trong khi đang dùng chuột resize cửa sổ

    http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx


    p/s : Avatar đẹp đấy nhưng mình không thích tên nick của bạn

Các đề tài tương tự

  1. Auto resize control khi resize form ?
    Gửi bởi nguatrang trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 19-12-2012, 04:58 PM
  2. Làm cách nào khi resize form các thành phần khác cũng resize theo
    Gửi bởi vantrung14081995 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 04-11-2012, 08:28 PM
  3. Cách vẽ một đoạn thẳng ngoài hàm OnPaint() MFC
    Gửi bởi Nupakachy trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 22-09-2011, 11:47 AM
  4. Bị lỗi khi vẽ cây nhị phân trong C. Nhờ các bạn giúp đỡ
    Gửi bởi pctester2020 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 12-09-2010, 10:17 AM
  5. Vẽ đồ thị bằng hàm OnPaint trên MFC?
    Gửi bởi hutdragon trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 16-05-2009, 08:46 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn