|
The OnSize handler of a CListCtrl receives control once for each small dragging movement separatedly. If one drags the mouse quickly when resizing, the messages will be generated quickly too.
Because the resizing of a dozen columns or so is a bit computing intensive, a message generated from a longer mouse movement (dragging) with the the new size can arrive sooner than the processing of the previous message has been finished. Is this normal? Should not the processing of the previous message (the same type of message, the same handler, to the same object) be completed before the next such message gets scheduled?
The interruption of the message processing causes problem, because size calculations get confused.
I am trying to synchronize the executions with using locks.
I declared a CCriticalSection object and used Lock and Unlock in the OnSize handler. It has no effect. The lock count goes up, and it does not block the thread from execustion.
I declared a CRITICAL_SECTION object and used Init, Enter and Leave - the result is the same.
Why is the lock not blocking the thread?
|
|
|
|
|
A CRITICAL_SECTION will not block the SAME thread from reentrancy into the same lock.
|
|
|
|
|
But the next message should be passed in a different thread!
It is not a recursion, the handler is processing separate messages.
|
|
|
|
|
It is possible you are in the middle of processing a posted message, and some function you call causes a sent message to appear in your queue, in which case it seems like it 'came' from another thread, when in fact it did not. If you were to put some GetCurrentThreadId() function calls, you might be able to prove to yourself if it is the same thread or not. None of us has probably ever observed a locked CRITICAL_SECTION entered successfully by another thread.
|
|
|
|
|
I am not doubting that the lock functions work properly.
I recorded the currently active thread ids in an array. The messages will be passed in the same thread, even though their processings are running concurrently, at least partially.
Should not cucurrently running messages be passed in different threads?
Anyway, I "solved" the problem by simply immediately returning from the message processing if another message is still being processed, i.e. too fast dragging will not be honored (not truely a restriction).
|
|
|
|
|
Following is only for the record (and for the improbable case, that someone experiences a like problem).
I found the problem. The original problem description was incorrect.
The OnSize handler changes the size of certain columns. This in itself does not trigger OnSize, however it can cause inserting or removing the horizontal scroll bar, and THAT causes OnSize.
Now, the problem was, that this OnSize message has not been queued but started immediately, i.e. recursively; in other words, the processing of the original OnSize message has not been finished yet, and the new one got started - a big mess.
|
|
|
|
|
I thought I understood how the sizeof operator worked, but I guess not. Here's what I have in a little test I made:
CString str1,str2;
str1 = "a;slkdjfa;slkdjfa;sldkjfas;lkdjfa;slkdjf";
str2 = "d";
int sz1 = sizeof(str1);
int sz2 = sizeof(str2);
int sz3 = sizeof(CString);
all three ints are 4. I don't understand. ???
My articles
www.stillwaterexpress.com
BlackDice
|
|
|
|
|
You seem to be confusing sizeof() with strlen() . A CString has a constant size no matter how large a string it represents. The string data is pointed to by a member of the CString object.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Okay, but I'm thinking if I wanted to send a CString object through a socket. I know how to send a regular character string, but I'm trying to find if there's a way I could send the actual object (in bytes) by making the first 4 bytes an integer telling how long the rest of the byte array is so that I could turn that into a CString object offset 4 bytes from the beginning of the received byte array.
But if the CString object has an internal pointer to another place in memory where the actual character string is stored, would that even be part of the object I'm sending? because whatever address the original string points to for a character string will be invalid on the receiving end. Am I making any sense?
My articles
www.stillwaterexpress.com
BlackDice
|
|
|
|
|
You can use CString::GetBuffer() to get at the contents of the string buffer you want to send. As you correctly guessed, sending the CString object thru the pipe won't cut it.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Yes, so just send the character data. Construct a separate CString on the receiving end.
|
|
|
|
|
|
I have the following problem.
I have a dialog based application which has nu controls on it.
In the WindowProc function of my dialog, I have the following code:
if (message==WM_KEYDOWN && wParam==68 && (GetKeyState(VK_CONTROL)))<br />
AfxMessageBox("You've pressed CONTROL+D")
..and this works perfectly.
But when I add a single editbox on my dialog, it doesn't work. I think this is because the editbox captures the pressed key events so they are not passed to the WindowProc function.
What I really want to do is that when I am focused on an editbox and I press CONTROL+d, a string (for example "David") automaticaly appears in the editbox. How do I do that?
|
|
|
|
|
use these messages inside editbox (inherited from CEdit).
that is, hWnd is the editbos, not dialog.
includeh10
|
|
|
|
|
I don't get it. How can I treat the messages in the editbox? Should I use again the WindowProc funcion? I'am asking because it doesn't have a HWnd parameter.
LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
|
|
|
|
Instead of GetKeyState(VK_CONTROL) try GetAsyncKeyState(VK_CONTROL)& 0x8000
Also, the other message is correct. The dialog gets keystrokes unless another control which ACCEPTS keystrokes has focus. So, you can derive from the CEdit and place special CEdit controls on your window that watch for CTRL+D
|
|
|
|
|
I am Using a singleton server(ATL Simple Object as an .exe, with Connection Point Support and dual interfaces ) with one custom interface and an external Dispatch events to return data to clients who Implement IDispEventImpl
Where in my server code can i know
1) The number of active clients
2) The event when the server has a new client
Thank you
Engineering is the effort !
|
|
|
|
|
Hi,
I would search a library / activex o SDK tools for developer a program in Visual C++ that permit cut and paste and write of result of mp3 audio file.
For example. i take a song and extract from 10th second to 30th second and write a new file in specific format.
Who i can make ?
Thanks
Hi.
I'm new developers
|
|
|
|
|
|
I'me very new in c++ and I've downloaded the CxImage library. Is there anything I can read that will tell me step by step how to use it?
|
|
|
|
|
Just pointing out the obvious, but the only guide you'll get is the CxImage article itself.
I use CxImage in my applications(s), and its pretty simple. Just pay attention to the Load
and Draw methods.
Iain.
|
|
|
|
|
take a look in the cximage documentation, and watch the guy's source code of his demo projects.
i think its site is www.xdp.it/cximage or something (search on google if this is wrong), you find the documentation and help forum somewhere on the site.
success (it's not so hard, trust me )
|
|
|
|
|
How can I write a function i a .dll that returns a value(sends value to application in VB) when its called inside the .dll?
example - a parameter(in the .ddl) changes value and we want to notify the application right away!
|
|
|
|
|
Pass application window handle to a dll and when value changes send a message to this window, passing value that has changed.
Is it a primitive type?
JohnCz
|
|
|
|
|
Hello gurus,
I would like to know how I can create and use a timer object in a CObject derived class? My class is not derived from CWnd , so I don't know how I can use a timer inside a CObject derived class. Does any body knows how to do it?
Thanks for the help.
Best regards.
There is no spoon.
|
|
|
|