|
I want to use Domodal() function call child windows, and also want parent windows can click during child windows appear.
How I write the code.
|
|
|
|
|
You can't. Either you show a non modal dialog, or it's modal ( which means that the parent windows don't respond while the window is up.
To make a non modal dialog, it needs to be a member variable.
Christian Graus - Microsoft MVP - C++
Metal Musings - Rex and my new metal blog
|
|
|
|
|
You'll need to create a modeless dialog for this.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi all,
Ok so I know this is a VC++/MFC forum, but I was wondering if someone could please help me in linking / using a dll in Borland C++ 6.
Thank you in advance
The only programmers that are better than C programmers are those who code in 1's and 0's.....
Programm3r
|
|
|
|
|
I haven't used borland in a while, but if memory serves me correct, it spits out a .lib file when you build the dll. You just need to add that file to the link line in the project properties.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
If you don't have the lib file as Zac suggested, check out the IMPLIB.exe and IMPDEF.exe utilities.
They can generate the files you need to link.
Mark
|
|
|
|
|
dear sir;
I am using visual c++.
When I print on laserjet, papers skip well but on dot matrix even if I setup well the lengh of paper; papers are not skipped well. What to do
|
|
|
|
|
what exactly do you mean by "skipped papers"?
|
|
|
|
|
paper cannot jump from one to another page of the continous paper
|
|
|
|
|
I am getting this error message when I am trying to create a Dialog Procedure and make it member of a class so I can use ‘this’ pointer of that class.
“error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'DLGPROC'”
Please help me to solve this problem. Thanks in advance.
Priyank
|
|
|
|
|
Are you using MFC?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
|
Normally you cannot do this. The easiest way is to declare the DlgProc as a static member, but that will give you problems accessing other class members. You can also store the this pointer in a static member, and again add a static DlgProc then cast the pointer to access the class members, but this method causes problems when using more than one instance of the class. By far, the best method is to use a thunk.
|
|
|
|
|
I believe you are trying to make a wrapper class for handling dialog without using MFC ? If this is the case, there is a trick to do that. If not, then ignore my post
Ok, so member functions and global functions don't have the same parameters (the this parameter is passed to a member function). That's why you are getting this error. However there is a trick to do what you are looking for. I'm a little bit lazy to explain all in detail so I made a search on google, and I found this[^] piece of code that solve your problem. If you don't understand some parts, just ask.
Basically the idea is that you save the pointer to your class instance with SetWindowLong as user data and you get it back in your dialog procedure, so that you can cast it back to your class (and so, call a member function that will manage the messages).
Hope this helps
|
|
|
|
|
Thanks for your reply,
I tried that code. But now I get another error. "error C3861: 'Dialog': identifier not found, even with argument-dependent lookup" at at line "Dialog* pthis = (Dialog *)GetWindowLong( hWnd, GWL_USERDATA );"
maybe because that code is in MFC while I am using win32. Can I know how can I use the same with win32?
Priyank
|
|
|
|
|
Of course, I gave you the link so you have an example to understand how it work. If you copy paste it, it's normal that it won't work .
Dialog is the name of the class they use. Replace it by the name of your class (and isntead of copy/pasting the code, try to understand it, it is much more useful).
priyank_ldce wrote: maybe because that code is in MFC while I am using win32
Not at all, this code is pure Win32.
|
|
|
|
|
Oh sorry, Dialog is looking more like windows class or variable type not user class and I didn't check it. But it is working now . Thanks again.
Priyank
|
|
|
|
|
When using that method make sure that you only create one instance of the class. Because the this pointer is stored in a static member, all class instances will share the same value of that pointer. When dereferencing that pointer in your DlgProc, it will always be the same. I'm guessing that your code only needs one instance, but keep this in mind next time you try using this method (ie for a TimerProc).
|
|
|
|
|
Did you look at the link ??
It has nothing to do with storing the pointer as a static member. It stores the pointer using SetWindowLong and associate it with a windows handle. Thus, each time you have a new instance of your dialog, you also have another windows handle. So, you can perfectly have several instances of this class without any problem.
|
|
|
|
|
I do appologise, I had a quick glance at the article, perhaps a little too quick, and incorrectly thought it was an implementation of another method.
|
|
|
|
|
I know I should know the answer to this...
I want to round a number *down* to an integer multiple of another number.
% doesn't work on doubles / floats.
fmod does, but it has the same problem.
Using % or fmod, I can round a number towards 0. I want to round it towards negative infinity.
So,
rounddown(82,40) becomes 80.
rounddown(0,40) becomes 0;
rounddown(-39,40) becomes 0 as well, but I want -40!
I hope that explains things well enough.
Yours in need-of-more-caffeine-or-the-weekend,
Iain.
|
|
|
|
|
Mmmhh, maybe using floor()[^] ? You could divide the first number by the second (82/40=2.05 and -39/40=-0.975), then use floor, that will give you 2 and -1 (respectively) and finally multiply back by your second number: 2*40=80 and -1*40=40.
Hope this helps
|
|
|
|
|
#define ROUNDDOWN(number,base) ( base * floor (double(number) / double(base)) )
does the job perfectly, thanks Cedric. I didn't have the double()s in to start with, and I did get odd results when using integers....
Iain.
|
|
|
|
|
If you know that your first number was negative, and you actually rounded up, then just substract the second number from the result and you have rounded down.
Hope that helps.
|
|
|
|
|
My initial version did have (number < ) ? (....) : (...), but my adding / subtracting numbers messed it up further when I was on a number "boundary".
Cedric (38mins ago) gave me the clue (ie 99% of the work) I needed.
Thanks,
Iain.
|
|
|
|