Re: Why does this TextOut() sometimes hang up?
"Joseph M. Newcomer" <newcomer@flounder.com> wrote in
message news:jbv443ljs188hnspe0ha1h71cv4gj0mc41@4ax.com...
Any time you put this kind of code in, it is screaming
"this should have been a thread!"
Such gross hacks were required in Win16, but they should
be avoided in Win32.
joe
This is only a working prototype thus minimizing development
time has a much higher priority than elegance. The actual
product will be provided as a COM component (as you
suggested) and have its own thread.
The working prototype is now completely functional. It can
recognize about 95% of the most common fonts with 100%
accuracy, and is about 25-fold faster than conventional OCR.
Actual test results are posted on this page:
http://www.seescreen.com/Unique.html
On Wed, 9 May 2007 17:46:18 -0500, "Peter Olcott"
<NoSpam@SeeScreen.com> wrote:
"Mark Salsbery" <MarkSalsbery@discussions.microsoft.com>
wrote in message
news:03D471C4-281F-403A-A60B-A67459BF1AE9@microsoft.com...
I should have read the code more closely :)
Maybe you need to pump messages in the loop if it's on
the
same thread as
the window's UI thread.
//An example message pump. Call periodically in your
loop.
MSG msg;
while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
{
if ( !AfxGetApp()->PumpMessage( ) )
{
break;
}
}
I stuck the above code in a function called PumpMessages()
and it solved my problem, thanks!
"Peter Olcott" wrote:
"Mark Salsbery"
<MarkSalsbery@discussions.microsoft.com>
wrote in message
news:E603B544-517C-4595-B222-BD6364F7792A@microsoft.com...
Are you painting over the top of your drawn text?
Besides the TextOut() in the loop you may need to
redraw
the same text in
response to WM_PAINT (OnPaint()) to make sure it's
redrawn
when the window
is repainted as well as in the loop.
Mark
I am using the basic double buffering method that
paints
a
memory DC to the screen.
"Peter Olcott" wrote:
I tried to make the equivalent of a simple
ProgressBar
by
displaying a count in the window of the outermost
one
of
several nested loops. This process is very CPU
intensive
so
I have to force screen updates. The count works
correctly
unless I move the window, and then the window is no
longer
updated. What is causing this, and how can I fix it?
// The TextOut() display code inside a very tight
loop
ClientArea.TextOut(0, 0, String,
strlen(String));
MainWin->InvalidateRect(NULL);
MainWin->UpdateWindow();
// Window member data
CDC ClientArea; // virtual window device
context
CBitmap m_bmp; // virtual window bitmap
// Window Constructor
MainWindow::MainWindow()
{
ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
ScreenHeight = GetSystemMetrics(SM_CYSCREEN);
Create(NULL, "SeeScreen the Screen Recognizer",
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
rectDefault,
NULL, "TextMenu");
CClientDC DC(this);
// Create bitmap for virtual window
ClientArea.CreateCompatibleDC(&DC);
m_bmp.CreateCompatibleBitmap(&DC, ScreenWidth,
ScreenHeight);
ClientArea.SelectObject(&m_bmp);
// use standard background
MainBrush.CreateStockObject(WHITE_BRUSH);
ClientArea.SelectObject(&MainBrush);
// paint background of virtual window
ClientArea.PatBlt(0, 0, ScreenWidth, ScreenHeight,
PATCOPY);
}
// Update screen using contents of virtual window.
afx_msg void MainWindow::OnPaint()
{
CPaintDC DC(this);
DC.BitBlt(0, 0, ScreenWidth, ScreenHeight,
&ClientArea,
0,
0, SRCCOPY);
}
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm