an application to detect dead pixels of LCD pixel

K

Kelvin

Hi all,

I am writing an application to detect the dead pixel of LCD panel by using
visual C++ (MFC). My flow is follow:

1. Display a dialog with a start button. When the user press the start
button. The whole screen become black colour.
2. When the user press any key by keyboard. The whole screen changes to red
then green, blue and white.
3. The screen back to "normal display".

I am a newbie in visual c++, so i don't know how to write the code to
achieve points 2 and 3.

Can anyone know how to write code for this application?

Thank a lot.
 
M

Mark Salsbery [MVP]

Kelvin said:
Hi all,

I am writing an application to detect the dead pixel of LCD panel by using
visual C++ (MFC). My flow is follow:

1. Display a dialog with a start button. When the user press the start
button. The whole screen become black colour.
2. When the user press any key by keyboard. The whole screen changes to
red
then green, blue and white.
3. The screen back to "normal display".

I am a newbie in visual c++, so i don't know how to write the code to
achieve points 2 and 3.

Fill screen with red:

CWnd DesktopWnd;
DesktopWnd.Attach:):GetDesktopWindow());
CWindowDC DesktopDC(&DesktopWnd);
CBrush RedBrush(RGB(0xFF,0x00,0x00));
CRect DesktopRect;
DesktopWnd.GetWindowRect(&DesktopRect);
DesktopDC.FillRect(&DesktopRect, &RedBrush);
DesktopWnd.Detach();

Restore screen to normal display:

::InvalidateRect(NULL, NULL, TRUE);


BTW, there's an MFC newsgroup: microsoft.public.vc.mfc

Mark
 
B

Ben Voigt [C++ MVP]

Mark said:
Fill screen with red:

CWnd DesktopWnd;
DesktopWnd.Attach:):GetDesktopWindow());
CWindowDC DesktopDC(&DesktopWnd);
CBrush RedBrush(RGB(0xFF,0x00,0x00));
CRect DesktopRect;
DesktopWnd.GetWindowRect(&DesktopRect);
DesktopDC.FillRect(&DesktopRect, &RedBrush);
DesktopWnd.Detach();

Don't try to draw on the desktop window, create your own fullscreen window.
 
K

Kelvin

Hi,

Thanks for your help!

Sorry that I still don't know how to "make" the whole screen to become black
when pressing the start button.

Could you told me how to achieve this?

Thanks a lot.
 
K

Kelvin

My code is follow:

void CTestScreenDlg::OnButtonStart()
{
// TODO: Add your control notification handler code here
CWnd DesktopWnd;
DesktopWnd.Attach:):GetDesktopWindow());
CWindowDC DesktopDC(&DesktopWnd);
CBrush RedBrush(RGB(0xFF,0x00,0x00));
CRect DesktopRect;
DesktopWnd.GetWindowRect(&DesktopRect);
DesktopDC.FillRect(&DesktopRect, &RedBrush);
DesktopWnd.Detach();

}

but i cannot make the whole screen become red......
 
M

Mark Salsbery [MVP]

That code worked for me, but as Ben mentioned, you should create a window,
make it the size of the screen, and do the drawing on that window.

The system refreshes the desktop when you draw on it, at least it did to me
on Vista :)

Mark
 
K

Kelvin

Hi Marks,

Thanks a lot. I can use the code to display red color on the entire screen.

But, how to create a window, make the size of the screen and retrieves the
device context (DC) for that window?

Thanks,
Tim
 
M

Mark Salsbery [MVP]

Kelvin said:
Hi Marks,

Thanks a lot. I can use the code to display red color on the entire
screen.

But, how to create a window, make the size of the screen and retrieves the
device context (DC) for that window?



Hi Tim,

Sorry for the delayed reply. I was out of town all last week.

If you still need an example of creating a full screen colored window,
here's some code...

//-----------------------------------------------------
// FullScreenColorWnd.h
//-----------------------------------------------------

#pragma once
#include "afxwin.h"


// CFullScreenColorWnd

class CFullScreenColorWnd : public CFrameWnd
{
DECLARE_DYNAMIC(CFullScreenColorWnd)

public:
CFullScreenColorWnd();
virtual ~CFullScreenColorWnd();

protected:
DECLARE_MESSAGE_MAP()
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

CBrush m_BkgndBrush;
};



//-----------------------------------------------------
// FullScreenColorWnd.cpp
//-----------------------------------------------------

#include "stdafx.h"
#include "FullScreenColorWnd.h"


// CFullScreenColorWnd

IMPLEMENT_DYNAMIC(CFullScreenColorWnd, CFrameWnd)

CFullScreenColorWnd::CFullScreenColorWnd()
{
m_BkgndBrush.CreateSolidBrush(RGB(0xFF,0x00,0x00));
}

CFullScreenColorWnd::~CFullScreenColorWnd()
{
}


BEGIN_MESSAGE_MAP(CFullScreenColorWnd, CFrameWnd)
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_CREATE()
END_MESSAGE_MAP()



// CFullScreenColorWnd message handlers



BOOL CFullScreenColorWnd::preCreateWindow(CREATESTRUCT& cs)
{
BOOL ret = CFrameWnd::preCreateWindow(cs);

cs.style = WS_VISIBLE | WS_POPUP;
cs.dwExStyle = 0;

return ret;
}

int CFullScreenColorWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

HDC ScreenDC = ::GetDC(NULL);
MoveWindow(0, 0, ::GetDeviceCaps(ScreenDC, HORZRES),
::GetDeviceCaps(ScreenDC, VERTRES));
::ReleaseDC(NULL, ScreenDC);

return 0;
}

BOOL CFullScreenColorWnd::OnEraseBkgnd(CDC* pDC)
{
CRect CliRect;
GetClientRect(&CliRect);
pDC->FillRect(&CliRect, &m_BkgndBrush);

return TRUE;
}

void CFullScreenColorWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
DestroyWindow();
}



//-----------------------------------------------------
// Example creating the window - click on the window to destroy it
//-----------------------------------------------------

CFullScreenColorWnd *pFullScreenColorWnd = new CFullScreenColorWnd();
pFullScreenColorWnd->Create(NULL, _T(""));




Mark
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top