|
I met a weird DrawText() blinking problem. in a loop, interval is 2 seconds, I want to show some messages on a dialog screen.
i.e. 0-2 sec, message1; 2-4 sec,message2; 4-6, message3 ...
but, now the message shows like:
flash message1; 0 sec
black screen;
flash message2; 2 sec
black screen;
flash message3; 6 sec.
black screen;
what I want is :
message1; 0-2 sec
message2; 2-4 sec
message3; 4-6 sec
void CTestDlg::DrawMsg(LPCTSTR iMsgStr)
{
CDC* pDC;
CRect rect;
CString MsgStr;
HDC hDC;
LOGFONT lf;
HFONT FontNew, FontOld;
pDC = GetDC();
hDC = pDC->GetSafeHdc();
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = -14 * GetDeviceCaps(hDC,LOGPIXELSY)/72;
lf.lfWeight = 0;
FontNew = CreateFontIndirect(&lf);
FontOld = (HFONT)SelectObject(hDC,FontNew);
rect.SetRect(CPoint(274,442), CPoint(514,514));
SetBkMode(hDC,TRANSPARENT);
DrawText(hDC,dtcMsgStr,-1,rect,DT_WORDBREAK|DT_LEFT);
InvalidateRect(rect,FALSE);
SelectObject(hDC,FontOld);
DeleteObject(FontNew);
ReleaseDC(pDC);
}
|
|
|
|
|
It goes blank because you call InvalidateRect after you call DrawText, switch them around.
Within you lies the power for good - Use it!
|
|
|
|
|
InvalidateRect(rect,FALSE);
DrawText(hDC,dtcMsgStr,-1,rect,DT_WORDBREAK|DT_LEFT);
I tried the above way, same phenomenon
|
|
|
|
|
You should not be calling InvalidateRect in the same place as you are drawing to the screen. That call is to tell windows that your window needs to be updated, but you are already inside the code where the update is happening. You could simplify this by using one of the standard window controls[^].
|
|
|
|
|
In fact, I try to use a CEdit first, like:
LTEXT "N/A" IDC_TEST_MSG 88,189,128,24 CEdit* pEdit1 = GetDlgItem(IDC_TEST_MSG);
CDC* pEdit1DC = pEdit1.GetDC();
pEdit1DC->DrawText()
But, I got same phenomenon.
|
|
|
|
|
If you are using MFC classes then you should override the OnPaint [^] member function of the class.
|
|
|
|
|
then if I want to implement the display effect, what should I do?
I want to show:
message1 0-2 sec,
message2 2-4 sec,
message3 4-6 sec,
...
I hope it like (calendar time) static text, or text box control in many demo program.
that is:
2014/3/15 12:51; 2014/3/15 12:52; 2014/3/15 12:53;
update time smoothly.
|
|
|
|
|
Use something like a progress dialog.
|
|
|
|
|
No such thing, it is an embedded Win CE platform
|
|
|
|
|
Pity you did not mention that at the beginning.
|
|
|
|
|
write a test program in a MFC PC program.
Now I think I can use a control, like text box to implement my job.
but I am still wonder how can I use CRect/DrawText() to implement the same job.
|
|
|
|
|
Hello Audio/Video Gurus. I don't seem to understand what following does. Here is the function.
void TransformImage_YUY2( BYTE* pDest,
LONG lDestStride,
const BYTE* pSrc,
LONG lSrcStride,
DWORD dwWidthInPixels,
DWORD dwHeightInPixels)
{
for (DWORD y = 0; y < dwHeightInPixels; y++)
{
RGBQUAD *pDestPel = (RGBQUAD*)pDest;
WORD *pSrcPel = (WORD*)pSrc;
for (DWORD x = 0; x < dwWidthInPixels; x += 2)
{
int y0 = (int)LOBYTE(pSrcPel[x]);
int u0 = (int)HIBYTE(pSrcPel[x]);
int y1 = (int)LOBYTE(pSrcPel[x + 1]);
int v0 = (int)HIBYTE(pSrcPel[x + 1]);
pDestPel[x] = ConvertYCrCbToRGB(y0, v0, u0);
pDestPel[x + 1] = ConvertYCrCbToRGB(y1, v0, u0);
}
pSrc += lSrcStride;
pDest += lDestStride;
}
}
So, whether above function converts YUV to RGB32 or vice versa. Thanks for your input.
|
|
|
|
|
|
we developed a c++ application which its GUI uses default toolbar buttons (cut, copy, paste). It's strange same executable running on some PCs when user uses mouse hovering on the cut button, the tooltip displays as Cut (Ctrl+X); on some other PCs the tooltip displays as Cut (Shift+Delete). Does anyone know the reason and how to fix it? Since Shift+Delete doesn't do real cut. Thanks
|
|
|
|
|
You developed it, so you need to look at the source code and find out why the menu or the tooltips are different.
|
|
|
|
|
As I said in the post the "cut, copy, paste" toolbar buttons are default ones, the tooltip for "Cut" is "Cut the selection and put it on the Clipboard\nCut" was not added by our application. Don't understand why this "Cut" button's tooltip displays differently on different PCs, some PCs show "Ctrl+X", some show "Shift+Delete" which is kind of misleading.
|
|
|
|
|
What do you mean by default buttons? They will still need to have associated tooltips which are set in the source code.
|
|
|
|
|
The default toolbar buttons means when creating this MFC application using application wizard, there is default toolbar generated; we customized other toolbar buttons but leaving "cut, copy, paste" untouched. Thanks
|
|
|
|
|
They will still have tooltip text somewhere in the resource files.
|
|
|
|
|
That's true. The problem is in the whole resource file there is no "Shift+Delete" string found. "Ctrl+X" is used for "cut" button. Why does it show "Shift+Delete" when mouse hovering over it on some PCs? Thanks!
|
|
|
|
|
Member 8021796 wrote: Why does it show "Shift+Delete" when mouse hovering over it on some PCs? At a guess it is sometimes pulling the resource from a library, but since I don't have access to your codebase it's impossible to be sure. Try to do some further debugging of your code on the systems where it is different.
|
|
|
|
|
Check your (rc) resouce file. Do you have a multi language resource in it? A resource that deal with any language must be set [Neutral].
|
|
|
|
|
Thanks! I checked resource file, there is no multi language used. "LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US" is found in rc file.
|
|
|
|
|
Hey there,
I am writing an software that should be able to detect all keyboard inputs by the user. i.e., both hardware and software/on-screen keyboard.
This software is going to be written in a platform independent way and supposed to run on Windows, Linux, Android & iOS.
The idea is to capture the keyboard inputs from a low level, there by making sure that it doesn't miss any inputs even if it's a on-screen keyboard like in a mobile device.
I am looking at possible open source libraries that can be used.
Anyone got any good ideas on what to use?
Thanks in advance!
|
|
|
|
|
Given that those platforms have very different operating systems and hardware it is unlikely that you will find a library that can handle each type, especially at the hardware level. If you want open source code then Google should be your search tool.
|
|
|
|