title image


Smiley Win: Farbe ermitteln (GetPixel) funktioniert mit Timer nur einige Minuten
Guten Abend,



ich möchte unter Windows in einem Timer (wird jede Sekunde 1x angesprungen), den Farbwert an einer konstanten Position ermitteln und dann meinen Dialog mit dieser Farbe einfärben. Das funktioniert anfangs auch aber nach einigen Minuten (ca. 8-10) wird plötzlich für die RGB-Werte jeweils 0 zurückgegeben.



Habe herausgefunden, daß wenn ich die OnCtlColor-Funktion ausklammere (also der Dialog nicht eingefärbt wird) alles funktioniert (habe mir stattdessen die RGB-Werte anzeigen lassen). Ich kann mir allerdings erklären weshalb das so ist und wie ich es ändern könnte.



Würde mich über jede Hilfe oder Tips freuen.





Auszüge aus dem Code (MFC)::



void CPm_receiverDlg::OnTimer(UINT nIDEvent)

{

int screen_width=GetSystemMetrics(SM_CXSCREEN);



COLORREF pixel;



HDC hDC=CreateDC("DISPLAY",0,0,0);

pixel=GetPixel(hDC,screen_width-DIAL_WIDTH-5,3);

DeleteDC(hDC);



bg_color=pixel;

if (bg_color!=bg_color_save) // hat sich der Farbwert geändert?

{

RedrawWindow(); // Dialogfarbe aktualisieren



bg_color_save=bg_color;

}

CDialog::OnTimer(nIDEvent);

}





// Hintergrundfarbe des Dialogs und der Controls setzen

HBRUSH CPm_receiverDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

if (nCtlColor==CTLCOLOR_STATIC)

{

HBRUSH m_hYellowBrush=CreateSolidBrush(bg_color);

pDC->SetBkColor(bg_color);

return m_hYellowBrush;

}

if (nCtlColor==CTLCOLOR_DLG)

{

HBRUSH m_hRedBrush=CreateSolidBrush(bg_color);

pDC->SetBkColor(bg_color);

return m_hRedBrush;

}

return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

}





Gruß,

Paul



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: