|
mercenary01 wrote: Just like to state, that I don't go around telling people how hard I worked or tired my hand on something. So I did not see the need to tell everyone this in the beginning so I am not sure maybe it should be protocol?
See the Content section here.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
mercenary01 wrote: well its not like I just jumped onto this forum to ask for help, I did spend time on studying he example code and got the drawline working for GDI by modifying the sample codes. I spent more than the better half of 2 days
Maybe an hint for a major career change...
Just kidding
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
mercenary01 wrote: If you don't want to give any positive input why bother giving any input?
I already gave you a "positive input" in the first message. And, in the second one, I didn't want to say you that you are "XXX" or "YYY", I just told you that the code we have given you DO work. This is the correct way to do it, and if it is not working for you, there should be an issue on your tests. And, as David Crow said, the second part of the answer was just a guess of what many people makes. Just copy paste. And even that... I was giving you a possible solution to correct your code IF you had made copy-paste. But I didn't gave you directly the text to a new copy paste (it would be...):
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
As I have already said in other messages, here there are programmers, wether telepats nor mediums. If you don't say something concrete, we have to guess. If we have to guess, maybe we are guessing a false scenario. If we are guessing a false scenario... and you get angry with any answer... It is your problem, not ours.
mercenary01 wrote: Just like to state, that I don't go around telling people how hard I worked or tired my hand on something.
And you don't need to make it, but at least say what have you tried out, and what you not. So e can adapt our answers to your case. Or just put a piece of code where you are trying something, and if there is an error you will get a correction.
But just asking...
mercenary01 wrote: What is the simplest method I can use to get lines drawn on dialog boxes?
Is not a descriptive message to get the best of the answers.
mercenary01 wrote: But seriously I don't want anyone to get me wrong
Neither do I, because of that I want to tell you that I am not angry, I am not mad... I am just trying to explain you the why of my "rude" answer, and some points of view of the people "on the other side". And I am making it to try avoiding future misunderstoods in possible new questions from you or other people that read this message.
And BTW...
mercenary01 wrote: ya I got it to work got a piece of code from another forum and modified it to fit the project. Thanks for asking.
If our answers were not usefull for you, if yoou don't mind, you can make a little description of what was the problem and the solution you found for other users that maybe will have the same problem in the future. (and... why not? To show us where we were wrong).
Have a nice day
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
modified on Monday, December 17, 2007 4:01:40 AM
|
|
|
|
|
While it is possible, you typically don't draw directly on dialog boxes. What exactly are you trying to do?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
So....did you ever get this working?
Are you using MFC or straight Win32 APIs?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
ya I got it to work got a piece of code from another forum and modified it to fit the project. Thanks for asking.
|
|
|
|
|
Hi all,
How to set MPEG Encoder Filter Properties (DirectShow Filter) using VC++ like,
Audio Bitrate, Video Bitrate, MPEG Type & Field Encoding
How to use Encoder API?
Thanks & Regards,
Aniket Salunkhe
|
|
|
|
|
How do I change the directory beforehand in a File Open dialog? It always goes to My Documents on runtime.
|
|
|
|
|
check out lpstrInitialDir member of the OPENFILENAME structure. See documentation http://msdn2.microsoft.com/en-us/library/ms646839.aspx[^]
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
CFileDialog dlg(TRUE,NULL,NULL, OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, NULL, NULL );
dlg.m_ofn.lpstrInitialDir = Folder_path; //Give the Folder Path here
//Then give DoModal()
dlg.DoModal();
Thanks and Regards.
SANTHOSH V
|
|
|
|
|
|
Hi Friends,
I want to know, What is the Disadvantage of Multiple Inheritance.
Thanks and Regards.
SANTHOSH V
|
|
|
|
|
That some languges, like Java, hasn't.
Seriously there are gotchas in multiple inheritance, for instance, name clashes and the dreaded diamond. See , for instance http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.8[^]
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
With MFC, there's the problem of having more than one CObject -derived parent.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hello all
I am using _beginthread for creating multithreading application.
i want to know that how to pass argument list to hour thread calling function.
i am able to pass one value in this list but now i want to pass multiple arguments to the Thread calling function.
Anybody know this?
Thanks in advance.
Manish Patel.
B.E. - Information Technology.
|
|
|
|
|
You can't do that directly. But one indirect way to do it is to create a structure that contains all your data and pass the pointer to this structure to the function.
A better way to deal with it in OOP is to start the thread from within a class and pass the this pointer to the thread function. Then in your function, you can cast it back to a class pointer and call some public method of your class.
|
|
|
|
|
I want to pass this as well as author local variables of function also.
I am giving below a code sample.
void threadFunction(void *argList)<br />
{<br />
_endthread();<br />
}<br />
void className::methodName()<br />
{<br />
int x = 100;<br />
_beginthread(&threadFunction, 0, )<br />
}
Manish Patel.
B.E. - Information Technology.
|
|
|
|
|
if the thread nees to access className data, then pass this pointer inside the method.
void className::methodName()
{
int x = 100;
_beginthread(threadFunction, 0, this)
}
then you have to cast the pointer inside the thread function, i.e.
void threadFunction( void *p )
{
if ( ! p ) return;
className * pClass = (className *) p;
pClass->m_count++;
...
}
please note: this way you can access all of the (public) class data member, but you cannot access method local data.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
But i want to access local variable of function itself also.
in code x as well as class pointer also.
How can i do it?
Any idea?
Manish Patel.
B.E. - Information Technology.
|
|
|
|
|
Well, as it stands you cannot.
But what about changing a bit you design?
I mean do you really need x as local variable? Cannot it be a class one?.
Or, from an opposite point of view, do you really need to access the entire class? If you need to access a subset of class data, plus some local vars, then you may package that all inside a struct and pass the struct pointer to the thread function.
BTW In fact there is a direct solution of your problem, and it is so ugly that I cannot resist the temptation to post it :
[modified afterwards Cedric Moonen reply :-O ].
class className;
struct MyUglyThreadArg
{
className * pClass;
int * px;
};
class className
{
...
MyUglyThreadArg muta;
void methodName()
{
static int x = 100;
muta.pClass = this;
muta.px = &x;
_beginthread(&threadFunction, 0, &muta);
}
...
};
void threadFunction( void *p )
{
if ( ! p ) return;
MyUglyThreadArg *pMuta = (MyUglyThreadArg *) p;
className * pClass = (className *) p->pClass;
pClass->m_count++;
*(pMuta->px) = 200;
...
}
Please, please, don't do that!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
modified on Friday, December 14, 2007 6:59:21 AM
|
|
|
|
|
Not only is it ugly but it is also buggy: there is a big race condition there. When your function that spawns the thread exit, the muta structure will be destroyed. So, in your thread function you will access memory that has been freed. This will not occur all the time, only if the methodName function exit before the thread function access the variable. This is of course totally unpredictable.
|
|
|
|
|
You're perfectly right.
I've fixed it, to same extent (hazard now applies to further call to methodName , i.e. not thread-safe).
Interesting enough, your suggestion:
Cedric Moonen wrote: A better way to deal with it in OOP is to start the thread from within a class and pass the this pointer to the thread function. Then in your function, you can cast it back to a class pointer and call some public method of your class.
is hazardous too: the bug coming out if the class instance goes out-of-scope while thread function is running.
I've used a lot such (your) scheme with the implicit precondition that class instance remaining alive while thread is running.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
CPallini wrote: is hazardous too: the bug coming out if the class instance goes out-of-scope while thread function is running.
Not if you take care of that in the destructor . You 'end' the thread in the class destructor (signal an event or a flag) and wait (with WaitForSingleObject) until the thread terminates nicely and then you exit the class destructor. In that way, you will never access an invalid object in your thread method.
|
|
|
|
|
Good point, indeed.
Anyway, there's a caveat: if you use the scenario that breaks my modified ugly code
Cedric Moonen wrote: That's not very usefull: it is kind of a snake that bites its own tail. You pass in a structure which contains a pointer to the class which itself contains the structure. So, what's the point ? So, you still can't pass different 'x' values to different threads (here again, potential race condition). Because I suppose if the OP wanted to do something like that was because he plans to start several threads and pass some specific information to each of them along the this pointer.
it breaks your code too (unless he starts one thread per class instance).
BTW I think he wants to start a single thread hence your solution is good (I think also he probably needs read-only access to local variables).
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
A reply to your modifications
That's not very usefull: it is kind of a snake that bites its own tail. You pass in a structure which contains a pointer to the class which itself contains the structure. So, what's the point ? So, you still can't pass different 'x' values to different threads (here again, potential race condition). Because I suppose if the OP wanted to do something like that was because he plans to start several threads and pass some specific information to each of them along the this pointer.
There is a workaround that but which is ugly too: create the structure on the heap and delete it inside the thread function.
|
|
|
|