|
when you create your worker thread, you can pass an argument to it. So if the worker thread is invoked from your mainframe, you can pass "this" to it. And in your worker thread, do a type cast of the LOVOID pParam with (CMainFrame *)pParam.
|
|
|
|
|
Yes you got the hint. A worker thread does not have a window so AfxGetMainWnd will most likely return NULL. Even if you created a user interface thread and that one had a window AfxGetMainWnd will return a pointer to that window not the CMainFrame class.
Read this great article by Joseph M. Newcommer
Using Worker Threads
Best regards,
Alexandru Savescu
|
|
|
|
|
I have a program running on Win2k that uses the MSFlexGrid control on one its screens. When it comes time to render and communicate with this control the whole program crashes.
Does this mean the control is not registered? How would I register the control programmically or through installshield? If I'm way off on this one, anyone have any ideas what the problem might be?
Thanks!
"Why are we hiding from the police, Daddy?"
"We use VI, son. They use Emacs."
|
|
|
|
|
Hi
I want to write a thread which queries database and gets the data for each timespan say for each 3 minuts.I sreated one event for executing this functionality.Now how can I set that event to call that procedure for each time?
Please help me?
Thank you
Pathi
|
|
|
|
|
If your app is Windows-based (i.e. it has a message pump and all that) you can set a Windows timer and call SetEvent(hQueryEvent) in the handler. Check Nemanja Trifunovic's Timers tutorial for further info on Windows timers.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Thank you Munoz
I did it but I want to know is there any other better option without using timer.Can I put WaitforMultipleObject()
method in while loop and call the procedure multipletimes?Then How can I break that loop?
Pathi
|
|
|
|
|
If you want it to wakeup every N minutes why don't you just put it to sleep().
Neville Franks, Author of ED for Windows. www.getsoft.com
|
|
|
|
|
I don't quite get what you're after, but maybe this approach is of some help: do it the other way around, omitting the "trigger" event and using just some cancelling event, like this:
switch(WaitForSingleObject(hCancelEvent,3000)){
case WAIT_OBJECT_0:
return 0;
break;
case WAIT_TIMEOUT:
break;
default:
...
break;
} Is this closer to what you're looking for?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Hi, everyone.
Sure, this is a dummy question, but I'm newbie with STL, so please, don't be angry.
The problem (or maybe feature) is in stl::map<int, myclass="">.insert(stl::map<int, myclass="">::value_type(int, myClassObj1)).
In this procedure I can see:
1. myClassObj2 is created by copy constructor from myClassObj1
2. myClassObj3 is created by copy constructor from myClassObj2
3. myClassObj2 is destroyed.
I guess, myClassObj2 is created in pair(const _T1& _V1, const _T2& _V2) and myClassObj3 is created in map::insert itself. I don't get it.
Could you please explain to me, why temporary object created? And is it possible to get rid of it?
Thank you in advance,
va'Lery
|
|
|
|
|
You need to pass it a pair.
e.g.
map<long, CString> mapNames;
mapNames.insert(make_pair(5, "Hello"))
Maps are a bit like Hashes, so the first value is the key, and the second is the value to be returned.
You may need to define a copy constructor for you class in the pair, depending on what it contains. e.g. pointers and the like.
hope this helps,
Giles
|
|
|
|
|
The temporary object myClassObj2 is created as part of the pair passed to map::insert , as you correctly guessed. This pair is used then internally to recreate the object to be inserted. Unfortunately, the value passed to map::insert cannot be used directly for two reasons:- What is passed is a
const reference, with which little can be done except replicate it. - The object actually inserted into the map is allocated by special means (namely resorting to an STL allocator), so the
pair you just passed simply does not fit. I hope this helped you understand the problem. In short, you can't get rid of the temporary object in any easy way. If it is very important not to do excessive copying you should go to some approach using ref-counted pointers or something like that.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
You can insert into a map using map[key] = value. Check out my STL article series, part D for an article on the workings of set and map.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm somewhat suspicious of STL though. My (test,experimental) program worked first time. Whats that all about??!?!
- Jon Hulatt, 22/3/2002
|
|
|
|
|
If I use map[key] = myClassObj1 then result is even more weird.
1. myClassObj2 is created by default constructor (constructor without arguments)
2. myClassObj3 is created by copy constructor from myClassObj2
3. myClassObj4 is created by copy constructor from myClassObj3
4. myClassObj3 is destroyed
5. myClassObj2 is destroyed
6. myClassObj4 call operator= myClassObj1
Hmmm... It's too much for me...
As Joaquín mentioned, there isn't simple way to prevent temporary object. But I have to, because I have collection of collections, so duplication of object will cost me too much. I think there is only one way to do it and it is creation of my own container.
Anyway, thanks a lot for all your answers, gents.
Life is good but it's better to live good.
|
|
|
|
|
think there is only one way to do it and it is creation of my own container.
I'd think twice before going into writing your home made container. Why not have containers of smart pointers to containers? Check Boost shared_ptr class template, which automagically gives you ref-counted access to dynamically allocated objects. The hassle of inserting this into your current code should be minimal.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
hi,
the subject says all, i have a TCHAR, and i need convert it to managed string, i am using string.Copy(), but it does not works.
Any body knows any way?
Thanks in Advance
Salamanca 2002 Capital Cultural Europea, Visitala
|
|
|
|
|
I didn't understand your question completely.
why don't you use CString in MFC.
Thanks
--Maya
|
|
|
|
|
He probably wants to use the string in a managed environment, like .NET.
Michel
If I am wrong or said something stupid, I apologize in advance
|
|
|
|
|
I thought the "to Managed String" part was a dead giveaway.
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
Hi,
I have an SDI project, My View is derived from CFormView which contain a list box and some other controls.
I would like to maximize (and not only to center) the list box and the other controls when the user maximize the application windows .
How can i do it ?
Thanks.
|
|
|
|
|
Add a handler for WM_SIZE in your CFormView derived class. Then use SetWindowPos(...) on your different controls. (You'll have to assure the controls have been created, cause this function will be called once before the controls have been attached to any window handles.)
|
|
|
|
|
Hi everybody,
I want to get the documents´ icon in a MDI application. When I try to use GetIcon() from CMDIChildWnd HICON is a null pointer. Also when I try to use GetIcon() from CMDIFrameWnd it returns NULL.
By the way I use this in my windows-recorder...
Any ideas?
Amar
|
|
|
|
|
Hi!
Maybe try to get CDocTemplate from CDocument, then access m_nIDResource attribute: LoadIcon(nIDResource). This attribute is not accessible, so You may need to derrive class from CDocTemplate (CMultiDocTemplate to be exact) in order to access this attribute.
Hope this helps
Mukkie
|
|
|
|
|
I want to make an ActiveX control with VC++ (MFC). This control should have a toolbar.
How can I do that ? I tried to create the toolbar like this:
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
This is how it is createed in an standard MFC (.exe) SDI project. This doesn't work. (no error, but the toolbar doesn't appear).
Tzoockee
|
|
|
|
|
|