HELP - MFC - GetPixel doesnt work!!!

Started by
16 comments, last by CuteBug 20 years, 11 months ago
In an SDI application I created a new Class, say, CTest. In one of the member functions of CTest I included the following code -
  
void CTest::SomeFunc(...)
{ 
     ...
  
     int x;
  
     int y;
     ...

     CFrameWnd* pFrame = (CFrameWnd*)(AfxGetApp()->m_pMainWnd);
     CMyAppView* pView = (CMyAppView*)(pFrame->GetActiveView());
     CClientDC dc(pView);

     COLORREF pix = dc.GetPixel(x, y);
  
     ...
}  
  
But the function GetPixel doent return the correct value of the the pixel color at (x,y); when I debugged it pix always had the value 0xffffffff. Please help... "There is a Bug in every Code!"
"There is a Bug in every Code!"
Advertisement
If I were you, I wouldn''t be using MFC in the first place .
yeah...lose MFC...and the GDI...

[edited by - MattS423 on May 8, 2003 5:11:58 PM]
Programmers of the world, UNTIE!
yeah lose it unless your making a business program, plus I dont think your view is correct.

maybe be true or may not be true
Dont let them tell you to lose GDI or MFC. The error can be fixed while not getting rid of your current code. What does GetLastError() return?


Qui fut tout, et qui ne fut rien
Invader''s Realm
I dont know how to use GetLastError(). But I gave the following command after
COLORREF pix = dc.GetPixel(x, y); DWORD d = GetLastError(); 


Instead of getting the DC thru CClientDC I tried passing the pDC pointer from the OnDraw() function of the View class to a ststic member pDC of my own class.

while debugging the value of d is 0xcccccccc

and that of pDC is 0x0012f9d4 {hDC = 0xcccccccc attrib = oxcccccccc}

can u help me out?

"There is a Bug in every Code!"
"There is a Bug in every Code!"
I dont know how to use GetLastError(). But I gave the following command after
COLORREF pix = dc.GetPixel(x, y); DWORD d = GetLastError(); 


Instead of getting the DC thru CClientDC I tried passing the pDC pointer from the OnDraw() function of the View class to a ststic member pDC of my own class.

while debugging the value of d is 0xcccccccc

and that of pDC is 0x0012f9d4 {hDC = 0xcccccccc attrib = oxcccccccc}

can u help me out?
quote:Original post by CuteBug
I dont know how to use GetLastError(). But I gave the following command after

COLORREF pix = dc.GetPixel(x, y);

DWORD d = GetLastError();

Instead of getting the DC thru CClientDC I tried passing the pDC pointer from the OnDraw() function of the View class to a ststic member pDC of my own class.

while debugging the value of d is 0xcccccccc

and that of pDC is 0x0012f9d4 {hDC = 0xcccccccc attrib = oxcccccccc}

can u help me out?

"There is a Bug in every Code!"


The 0xcccccccc means that the DC was not initialized (0xcccccccc is the value that the debugger assigns uninitialized variables). Can you show me the code you use to pass the pDC pointer from the OnDraw function to the static member of your class (perhaps the entire OnDraw function also)?

I also encourage you to learn how to use the MSDN because then you would have been able to look up how to use GetLastError().



Qui fut tout, et qui ne fut rien
Invader''s Realm
I added two static variables to my class CTest.

Test.h

  	static CDC* pDC;	static bool gotView;  


Test.cpp

         CDC* Spawn::pDC = NULL;       bool Spawn::gotView = false;  


Then I initialized pDC in the OnDraw() function

MyView.cpp

  void CMyView::OnDraw(CDC* pDC){	Spawn::pDC = pDC;	Spawn::gotView = true;	CFloodDoc* pDoc = GetDocument();	ASSERT_VALID(pDoc);}  


I used the gotView variable to ensure that I will be using the member functions of pDC only after it is initialized.

"There is a Bug in every Code!"
"There is a Bug in every Code!"
Don''t listen to anyone one of these kids
nick5454
MattS423
Oberon_Command

As for your problem test the value it is returning check to see it''s not CLR_INVALID. Remeber that the x and y coordinates are logical coordinates.

This topic is closed to new replies.

Advertisement