Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 33 kết quả

Đề tài: Cho em hỏi lỗi về truyền tham số?

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    58

    Mặc định Cho em hỏi lỗi về truyền tham số?

    Em có 1 cái project vẫn đang làm nhưng lần đâu làm nên gặp nhiều khó khăn quá, mong các anh giúp đỡ.
    Ngoài các lớp có sẵn khi tạo bằng MFC Wizard, em tạo thêm 1 lớp Generic Class tên là "hinh" để tạo ra các đối tượng hcn là các ô vuông 8x8, trong đó có hàm outbm(CDC *pDC) để in ảnh lên ô vuông. Em tạo thêm 1 lớp nữa là lớp Recursivite có hàm demo(CDC *pDC):
    Code:
    Recursivite::demo(CDC *pDC)
    {
    	hcn[2][3].outbm(pDC);
    	AfxMessageBox("lala");
    }
    Ở lớp CMy6View, em xử lý sự kiện ấn phím H trên bàn phím:
    Code:
    void CMy6View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	// TODO: Add your message handler code here and/or call default
    	CDC *pDC=GetDC();
    	if(nChar==72)
    	{
    		Display.demo(pDC); //Display là đối tượng của lớp Recursivite
    	}
    	
    	CView::OnKeyDown(nChar, nRepCnt, nFlags);
    }
    Nếu xử lý như vậy thì sẽ ko hiện ra được ảnh ở ô vuông(2,3) trên bàn cờ mà chỉ hiện ra mỗi cái hộp thoại "lala" thôi. Nếu xử lý như sau thì lại được:
    Code:
    void CMy6View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	// TODO: Add your message handler code here and/or call default
    	CDC *pDC=GetDC();
    	if(nChar==72)
    	{
    		hcn[2][3].outbm(pDC);
    	}
    	
    	CView::OnKeyDown(nChar, nRepCnt, nFlags);
    }
    Tức là gọi thẳng outbm luôn mà ko qua hàm demo của Display thì được. Như vậy thì em nghĩ là chắc là có vấn đề gì trong cái tham số pDC kia nên nó mới ko vẽ được, các anh có thể giải thích cho em được ko ạ (em đang muốn học OOP nên ko muốn vẽ thẳng như thế kia)?
    Cám ơn các anh trước nhé!
    Đây là project của em (làm bằng visual C++ 6.0):
    Attached Files Attached Files
    • Kiểu file: rar 6.rar (56.6 KB, 22 views)
    Đã được chỉnh sửa lần cuối bởi bboy0303 : 19-10-2008 lúc 06:57 PM.

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Trong các hàm ngoài OnPaint(). sử dụng CClientDC để thao tác đồ họa.
    ví dụ:

    Visual C++ Code:
    1. void CMy6View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    2. {
    3.     // TODO: Add your message handler code here and/or call default
    4. //  CDC *pDC=GetDC();
    5.         CClientDC dc(this);
    6.     if(nChar==72)
    7.     {
    8.            dc.MoveTo(10,10);
    9.            dc.LineTo(100,100);
    10.     }
    11.    
    12.     CView::OnKeyDown(nChar, nRepCnt, nFlags);
    13. }


    với bài của bạn thì làm như sau:

    Visual C++ Code:
    1.  
    2. void CMy6View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    3. {
    4.     // TODO: Add your message handler code here and/or call default
    5.  
    6.         CClientDC dc(this);
    7.     if(nChar==72)
    8.     {
    9.         Display.demo(&dc); //Display là đối tượng của lớp Recursivite
    10.     }
    11.    
    12.     CView::OnKeyDown(nChar, nRepCnt, nFlags);
    13. }

    chi tiết tham khảo thêm trong MSDN


    _^^ chúc vui ^^_
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 19-10-2008 lúc 08:15 PM.

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bài của bạn code lung tung quá, mình bận quá nên chỉ sửa "chữa cháy" để đúng như yêu cầu của bạn thôi.
    Attached Files Attached Files
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Đừng thế này nữa nhá.

    Visual C++ Code:
    1. #if!defined(AFX_6_H__FCFACCD1_0618_4FDF_BE5D_976CA03224D8__INCLUDED_)
    2. #define AFX_6_H__FCFACCD1_0618_4FDF_BE5D_976CA03224D8__INCLUDED_
    Cái "#if!defined" có thể thay = "#ifndef". Mà Thực ra "#pragma once" một phát bên trên cho xong nợ đời, nhìn sợ quá, cứ như tạo = auto.
    Phá toái hư không - Bạch nhật thăng thiên.

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    @NVD : Cái đống do mfc tự động sinh ra mà, để ý chi cho mệt nhỉ ?
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Mặc định Cho em hỏi lỗi về truyền tham số?

    Chưa dùng MFC bao giờ, đọc thé này thì thôi sau cũng khỏi muốn dùng luôn.
    Phá toái hư không - Bạch nhật thăng thiên.

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Đúng như NVD nói cái này là một trong những cái chưa hay của MFC. nhưng ngoài những cái không hay như thế này nó còn rất nhiều cái hay khác điển hình là hơn 200 class hỗ trợ việc code của anh em mình.

  8. #8
    Ngày gia nhập
    10 2008
    Bài viết
    58

    Ây dà, sao em vẫn ko làm được nhỉ, em đã thay bằng CClientDC như anh zkday nói nhưng ko được. Muốn vẽ được bitmap theo cách dùng CClientDC thì vẫn phải gọi thẳng hcn[2][3].outbm(&dc), nếu như gọi qua Display.demo(&dc) thì vẫn ko được ạ. Bài của anh meoconlongvang em thấy cũng đã được đâu ạ. Hay là bắt buộc phải thao tác đồ họa trên lớp CMy6View, trên lớp khác thì ko được ạ?

  9. #9
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    ủa, bạn thử chưa ? nhấn chữ h nó vẽ quân hậu vào vị trí (4,3) mà ?
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  10. #10
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Code của mèo thì mình chưa test nhưng code của bạn thì do 2 ma trận hoàn toàn khác nhau nên bạn không thể vẽ được.

    Sửa chữa cháy thui.
    code của bạn lung tung thiệt. biết đặt tầm vực là public <--- pó hand luôn

    Visual C++ Code:
    1.  
    2. void CMy6View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    3. {
    4.     // TODO: Add your message handler code here and/or call default
    5.     CDC *pDC=GetDC();
    6.  
    7.     if(nChar==72)
    8.     {
    9.         for(int i=0; i<8; i++)
    10.         {
    11.             for(int j=0; j<8; j++)
    12.                 Display.hcn[i][j] = hcn[i][j];
    13.         }
    14.  
    15.         Display.demo(pDC);
    16.        
    17.     }
    18.    
    19.     CView::OnKeyDown(nChar, nRepCnt, nFlags);
    20. }

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

  1. Lập trình C Mảng là tham số truyền vào hàm?
    Gửi bởi PX5-RT trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 21-01-2013, 08:37 PM
  2. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  3. Kỹ thuật C++ Truyền tham biến hay tham trị?
    Gửi bởi vietanh_90 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 18
    Bài viết cuối: 16-10-2011, 10:45 PM
  4. Về vấn đề truyền con trỏ vào hàm (hay là truyền tham chiếu)
    Gửi bởi hieupm.it90 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 09-09-2010, 04:08 PM
  5. Thắc mắc về truyền tham biến và tham trị .. và còn nữa ^^
    Gửi bởi without_you trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 04-02-2010, 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