|
Consider a listbox containing the string
Alpha|beta
In a draw handler, we get the string, and want to use the bar as a delimiter.
CString left;
CString right;
int found = str.Find( _TCHAR( "|" );
if( found != -1 )
{
left = str.Left( find );
right = str.Right( str.GetLength() - ( found + 1 ) );
dc->TextOut( left, ...
dc->TextOut( right, ...
}
You might want to check the articles in http://www.codeproject.com/listctrl/[^], I notice that the very first one discusses owner-drawing.
|
|
|
|
|
Thanks again, Johan,
As I understand, it is to use the Owner Draw to customise the display of the text on list box. In your example, the text Alpha|beta can get shown as Alpha beta. And so supposedly, when I retrieve the text from the list box using GetText() , it should still return Alpha|beta? The actual content is not changed, just displayed differently on screen? Is it how this works?
Thanks.
|
|
|
|
|
|
Hi
I would like to know about "lstrcpy" function.Please give me at least on example so that I could understand and use.
rajesh
|
|
|
|
|
LPCTSTR pszString = "Hello";
TCHAR szCopyTo[100];
::lstrcpy(szCopyTo, pszString);
Result = szCopyTo = "Hello"
|
|
|
|
|
Better to use lstrcpyn to avoid buffer overflows
TCHAR chBuffer[512]= {0} ;
lstrcpyn(chBuffer, "abcdefghijklmnop", sizeof(chBuffer) -1 ) ;
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
I'm trying to add two buttons on an IE toolbar and then to resize the first one:
TBBUTTON Button[2];
ZeroMemory((void *)Button, 2*sizeof(TBBUTTON));
Button[1].idCommand = IDM_SECOND;
Button[1].fsState = TBSTATE_ENABLED;
Button[1].fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT;
SendMessage(m_hWnd, TB_INSERTBUTTON, 0, (LPARAM)(Button+1));
Button[0].idCommand = IDM_FIRST;
Button[0].fsState = TBSTATE_ENABLED;
Button[0].fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE;
SendMessage(m_hWnd, TB_INSERTBUTTON, 0, (LPARAM)Button);
TBBUTTONINFO tbbut;
tbbut.cbSize=sizeof(TBBUTTONINFO);
tbbut.cx=200;
tbbut.dwMask=TBIF_SIZE;
SendMessage(m_hWnd, TB_SETBUTTONINFO, IDM_FIRST, (LPARAM)&tbbut));
but it seems that the last line doesn't have any effect at all. Replacing there IDM_FIRST with IDM_SECOND will, on the other hand, correctly resize the second button
Any advice?
rechi
|
|
|
|
|
Hi all;
I would like to express my most heart-felt thanks to all you folks who have helped me in getting acquainted with Visual C++. Now i'm ok. However, this does apply to Mr Prakash who has been very rude and useless to me!
Thanks folks
Krugger
|
|
|
|
|
datastruct wrote:
However, this does notapply to Mr Prakash who has been very rude and useless to me!
Were here to help, even Mr Prakash, although sometimes the help you give is not always the help you receive. (Some twisty Aes-Sedai wording there).
Roger Allen - Sonork 100.10016
Strong Sad: I am sad I am flying
Who is your favorite Strong?
|
|
|
|
|
datastruct wrote:
However, this does apply to Mr Prakash who has been very rude and useless to me!
Of the 21 posts that you have made to date, only four of those have been replied to by Mr.Prakash. Of those four, I've not found any that I would consider rude. Perhaps you have extremely thin skin, or your definition of rude differs from mine. I suspect it's just a language barrier issue.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
My guess he was refering to the post where MrPrakash refused to give him the registration key for the skinmagic library.
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Perhaps, but that's far from rude. That's simply saying that "I can't give you something that you have not paid for." A lot of folks are all to quick to share registration keys.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
I totally agree with you
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
I'm not much of C++ programmer but am just putting together a very simple Dialog in Visual C++ 6.0.
It's one button and two Edit Boxes. From the first I get user input and the second I use for user feedback.
To the press button message handler I have added a function that is looping and for each loop I'd like to update the message in the second Edit Box.
The code looks something like this:
void CAppGUIDlg::OnButton1()
{
CAppGUIDlg::DoSomething();
}
void CAppGUIDlg::DoSomething()
{
int *string;
int max;
char *tmpStr = "";
int total = 0;
max = atoi(m_editStr1); //Get Edit Box 1 value
while (total < max )
{
//Do something with value from Edit Box 1
sprintf(tmpStr,"User message %i", total/1024);
UpdateData(false);
m_editStr2 = _T(tmpStr); //feedback the result to Edit Box2
Sleep(200);
UpdateData(false);
}
}
What will happen is that Edit Box 2 will not be updated until the loop is finished. Is there a simple way to update it within every loop?
|
|
|
|
|
Either:
Do each thing in a different thread.
Or (more simply for this case)
Pump messages in your loop.
Change your loop to:
while (total < max )
{
//Do something with value from Edit Box 1
sprintf(tmpStr,"User message %i", total/1024);
UpdateData(false);
if(!PeekAndPump())
break;
m_editStr2 = _T(tmpStr); //feedback the result to Edit Box2
Sleep(200);
UpdateData(false);
}
Then add this function to your class:
BOOL PeekAndPump()
{
MSG dlgMsg;
if (::PeekMessage (&dlgMsg, NULL, 0, 0, PM_NOREMOVE))
{
if (!AfxGetApp ()->PumpMessage ())
{
::AfxPostQuitMessage (0);
return FALSE;
}
return TRUE;
}
LONG lIdle = 0;
while (AfxGetApp ()->OnIdle (lIdle++));
return FALSE;
}
|
|
|
|
|
Exactly what I was hoping for. Thanksa lot Diddy!
|
|
|
|
|
No problem
|
|
|
|
|
if you want to send a message to an edit box just use SetDlgItemText function and you have only 2 parameters in MFC VC++.
gabby
|
|
|
|
|
Wont help.
If your looping around in that one function, you can do what you want to the other edit box, it wont redraw until you return from that function and contine to pump messages.
|
|
|
|
|
I AM pretty sure it works.
gabby
|
|
|
|
|
Try it - it doesnt.
Yes SetDlgItemText changes the text - though really its the Win32 way of doing things. The way he has done it with UpdateData basically calls SetDlgItemText anyway under the hood - just using the DDX/DDV map to work out what to map to what.
But just like UpdateData, SetDlgItemText will set the text after the loop has returned. If you are processing a message spinning in a loop then no other messages will come through when you are doing that (specifically, WM_PAINT's) until you return from that loop. Hence, yes u have changed the text in the edit box with SetDlgItemText but the edit box wont redraw until your function returns.
|
|
|
|
|
By updating the edit control (either by using SetDlgItemText() or UpdateData() ) every 200 ms, none of the updates will be seen except for the last one after the loop terminates.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
I'm trying to determine the font size used for menu's. I've tried retrieving the NONCLIENTMETRICS structure which contains the right font name but the wrong size. My system is configured to use 8pt font but the height field of the menu LOGFONT structure in the NONCLIENTMETRICS structure is always set to 0xfffffff5 which equates to -11 or an 11pt font. Can anyone tell me what I'm doing wrong?
Systems AXIS Ltd - Software for Business ...
|
|
|
|
|
You are mixing up typographical point with pixels, most likely.
A typographical point, 1 72th of an inch, is the measure normally used for fonts - in the "real world". A pixel is a picture element, one of the small dots on your monitor.
The size of a typographical point in pixels is decided by the manufacturer of the screen(driver). But it is not a one-to-one correspondance, as you've noticed.
Negative pixels heights means "don't include external leading in the font height". Leading is yet another typographical term, meaning the space between lines (that were created by adding slices of lead - thus the name).
You can see the difference by creating two fonts, one with the height -12 and one with 12. You'll see that the 12-pixel font is smaller than the -12, it is reduced by the leading.
You can convert between the formats by getting the number of pixels per inch vertically from a CDC , calling GetDeviceCaps( LOGPIXELSY ) . Then, divide the result with 72 to get the height of a typographical point. Note that you'll need to use floating point for this, or multiply the pixels per inch with some suitably large value.
Finally, the -11 is the value you should use as a font height in a call to a CreateFont with the MM_TEXT mapping. The value sounds very reasonable, BTW.
Now you know more than you ever wanted to know about font heights
|
|
|
|
|
Sounds like you know a lot about fonts, maybe you could post an article covering the basics for us beginners?
Roger Allen - Sonork 100.10016
Strong Sad: I am sad I am flying
Who is your favorite Strong?
|
|
|
|