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 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Vẽ đường thẳng có màu bằng chuột và tô màu (C++ sử dụng MFC).

    40px
    Mã nguồn PHP:
    void CLine::Draw(CDC *pDC){ CPen pPen(PS_SOLID, 1, m_crColor); CPen *pOldPen = pDC->SelectObject(&pPen); pDC->MoveTo(m_ptFrom); pDC->LineTo(m_ptTo); pDC->SelectObject(pOldPen);}  
    Mã nguồn PHP:
    void CLine::DrawLine(CDC *pDC){ int nOldMode = pDC->SetROP2(R2_NOTXORPEN); Draw(pDC); pDC->SetROP2(nOldMode);}  
    40px
    Mã nguồn PHP:
    void CBaiLamView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); CBaiLamDoc *pDoc = GetDocument(); if ((nFlags & MK_LBUTTON) == MK_LBUTTON) { pDoc->m_Line.DrawLine(&dc); pDoc->m_Line.m_ptTo = point; pDoc->m_Line.DrawLine(&dc); }}  
    40px

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình nghĩ bạn nên tạo 1 Pen , sau đó set màu cho Pen đó đó rồi Select vào hDC

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi gianghoplus
    Mình nghĩ bạn nên tạo 1 Pen , sau đó set màu cho Pen đó đó rồi Select vào hDC
    40px

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vấn đề thứ 2 của bạn, rõ ràng nếu dùng thuật toán loang để tô màu thì sẽ ko được vì loang căn cứ vào màu của biên để xác định vùng cần tô.
    Trường hợp màu biên trùng với màu tô, theo mình hiểu, thì ta phải hoàn toàn nắm được cấu trúc hình vẽ bạn đang thao tác. Điều này chắc chắc phải được vì người dùng chỉ có thể vẽ những gì mà bạn cung cấp cho họ vẽ, và bạn chắc chắn phải có thông tin đầy đủ về hình vẽ nếu còn muốn vẽ lại. Chẳng hạn với đa giác, ta có nhiều thuật toán để tô màu với đa giác, khi ta đã biết được tập hợp các điểm nằm tạo thành đa giác đó. Vấn đề là xác định điểm người dùng nhấp chuột có nằm trong đa giác hay không thì ta có thể dùng định lý nửa đường thẳng của jordan, định lý tổng các góc. Đó là về lý thuyết kĩ thuật đồ họa.
    Còn có thể bạn lại muốn áp dụng luôn các thuật toán có sẵn trong thư viện GDI/GDI+ để vẽ thì ta chỉ việc sử dụng Path. Trong Path có rất nhiều phương thức để bạn thêm đường thẳng, đường tròn, đa giác và xác định xem 1 điểm bất kì có nằm trong đa giác hay không.
    Trong MFC, đầu tiên ta tạo Path bằng BeginPath. Sau đó bạn thêm các hình tùy thích vào trong path. Kết thúc sẽ bằng EndPath
    Rồi dùng CRgn:CreateFromPath để tạo ra region từ path. Kế đến dùng phương thức PtInRegion của lớp CRgn xem liệu một điểm bất kì có nằm trong region hay không.

 

 

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
  •