|
How do you display a menu for a CPropertySheet?
|
|
|
|
|
In my dialog-based application I use some other (modeless) dialogs-boxes
that have the same size than my parent and aligning exactly centered in
my frame-dialog when appearing. ( created with MyDialog->Create() ).
For this behavior I had to use the style 'Child' in the dialog-editor.
For some reason I need one dialog to appear MODAL and so I created the dialog with
MyDialog->DoModal(). If I leave the style 'Child' the dialog totally locks the application
when appearing. So I changed the style to 'Popup'... Now it worked ALMOST like a charm.
One problem left:
When I open the modal dialog it is exactly aligned relative to its parent window.
When I move the parent dialog but still visible on the screen and then open the
modal dialog it also aligns correctly.
But from the moment I move my parent out of the screen so that e.g. only a part of
my parent is visible the modal dialog appears fully visible docked to the edge of
the screen but not aligned to the parent anymore.
Is there any workaround or setting that the modal dialog appears aligned to my parent
even if I move my parent out of the visible part of the screen.
As I created all my dialogs in the application with thin borders and no title-bar
you do never realize that with every view-change a new dialog is created.
Only in the above mentioned situation the thin boarderd-modal-dialog stands alone on
the screen - looking ugly...
Any Ideas on that ?
Manfred
---
'Programming is knowing...'
|
|
|
|
|
> Is there any workaround or setting that the modal dialog appears aligned to my parent
> even if I move my parent out of the visible part of the screen.
How about obtaining the geometry of your parent window when processing WM_INITDIALOG, and use SetWindowPos() or similar on the modal dialog to the coreect location?
Peace!
-=- James.
|
|
|
|
|
> Is there any workaround or setting that the modal dialog appears aligned to my parent
> even if I move my parent out of the visible part of the screen.
How about obtaining the geometry of your parent window when processing WM_INITDIALOG, and use SetWindowPos() or similar on the modal dialog to the coreect location?
Peace!
-=- James.
|
|
|
|
|
> Is there any workaround or setting that the modal dialog appears aligned to my parent
> even if I move my parent out of the visible part of the screen.
How about obtaining the geometry of your parent window when processing WM_INITDIALOG, and use SetWindowPos() or similar on the modal dialog to the coreect location?
Peace!
-=- James.
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
I want to buy 8 MB graphic card.
Please write your comment about it ...
Trident, ATI, ASOOZ, ... ?!!!
Hadi Rezaie
|
|
|
|
|
AAAARRRRGGGHHHH !!!! All those cards suck. 8 MB cards suck. You need minimum 16 MB if you want to do anything 3D, try brands like nVidia, Voodoo3, Matrox.
Of course, if you have a 386 or something, buy an S3 by all means. I guess you need to also say what you want to do with it...
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
Please write example about using operator in class.
for example: operator = or operator <= or ...
Hadi Rezaie
|
|
|
|
|
An example snippet from my CString replacement
class CGString
{
public:
CGString();
CGString(const char * pChar);
CGString(const CGString& str);
CGString(const double);
virtual ~CGString();
// Operators
operator const char*();
CGString& operator=(const char*);
CGString& operator=(CGString);
CGString& operator=(const double);
etc, etc.
CGString::operator const char* ()
{
return m_string.c_str();
}
CGString& CGString::operator=(const char *s)
{
m_string.assign(s);
return *this;
}
CGString& CGString::operator+=(const char*c)
{
m_string.append(c);
return *this;
}
m_string is a string from the standard library - the idea was to write a class that didn't need MFC but would use the CString syntax so that changing code from MFC to Win32 would be less painful.
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
On thing to watch out for in your string replacement class is variadic parameters.
There is no type to a variadic parameter (...), so it doesn't cause the conversion operator to be called (operator const char*()), so if you pass your CString replacement to a function like printf, it will instead blindly try to treat your class like whatever type you specified.
This isn't a problem for CString, because CString's first data member is the actual internal char *, but for you, the first member will actually be the vtable of your virtual destructor, causing the printf to produce garbage.
|
|
|
|
|
Thanks for telling me this - although it is unlikely I would have passed a string as a parameter to printf, I am interested from the POV of good design. I initially wanted to derive from the standard string, but found out it does not have a virtual destructor. Looking through Stroustrup I found that this was intentional and the idea was to make a string class ( for example ) by having a string as a member variable and accessing it that way. The question is, given that this was an intentional design decision on the part of the language architects, what options would I have to work around this ?
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
Yes, you're correct that the standard committe deliberately chose to exclude a virtual destructor, as did the MFC development team.
The MFC team did it spcifically to allow CStrings to be passed as parameters to functions like printf. They also do some nasty behind the scenes memory allocation. They actually store the length of the string and reference count information as a negative offset of the string data pointer. All this just to make variadic and similar functions work correctly with CString.
Your choices are pretty limited. You could inherit from std::string privately, or you could just use it as a member like you are. However, I would suggest against using a virtual destructor unless you plan on letting people derive from it. Likewise, I would advise against virtual functions, since virtuals add a vtable pointer.
To be honest, I'd rather just rewrite the code to use std::string natively rather than make it pretend to be a CString.
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
What is different between CFile and CArchive for write and read from file ?
Hadi Rezaie
|
|
|
|
|
CFile just provides basic read and write operations. CArchive uses a CFile to add serialization capaibility to MFC and to use the inserter/extractor operators (<< and >>)
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
Please explain to me rules about put names for variables.
Understand ?!!!
Hadi Rezaie
|
|
|
|
|
You mean Hungarian notation ? Basically the standard way of doing things is to preface a member variable with m_, a global ( globals are evil though, so you have none, right ??? ) with g_ and then the first letter or two tell you the type of the variable.
i.e.
int m_iMyInteger;
CString m_szMyString;
But ultimately, these rules only benefit if a team all follow them - in other words, if you work alone, what convention you use is up to you.
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
Please write example with full explain about HGLOBAL For allocate memory.
Does HGLOBAL == malloc ?
Hadi Rezaie
|
|
|
|
|
From MSDN
HGLOBAL – a special case but still (mostly) transparent
HGLOBAL is different from GDI and USER handles discussed above in that it can either be a 32b handle or an actual pointer (32b or 64b depending on the platform). An HGLOBAL is created as a handle when GMEM_MOVEABLE flag is used in GlobalAlloc API, otherwise it is created as a pointer.
Accordingly, the application writer may have the following situations:
The HGLOBAL in question comes as a handle – in this case the choices are the same as for the GDI and USER handles described above.
The HGLOBAL in question comes as a pointer and …
it was sent over the wire as an HGLOBAL - do nothing, ole32.dll code handles situation transparently
it was sent over the wire as a DWORD – you do have a problem, you need to solve it as discussed for pointers
you are designing a new interface, in order of preference: use HGLOBAL as the types of argument, use context handles or use a LONG64 argument to hack through.
To recap, if your app sends HGLOBAL as an HGLOBAL, you don’t need to do anything as ole32.dll code marshals and unmarshals it transparently.
Also note that HLOCAL is a typedef on HGLOBAL.
A personal note - DON'T USE MALLOC. Use new/delete to allocate memory, that is what they are for. malloc/calloc/realloc are left over from C. If I had my Stroustrup handy I'd give eloquent reasons not to use them, but I do not.
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
Thanks a loooot.
It was FULL reply.
Now i have two questions.
Q1. What is your MSDN version ?
Q2. I think that new/delete is for allocate memory from stack memory.
So, malloc ? stack memory or ... ?
Hadi Rezaie
|
|
|
|
|
<<< In the name of GOD >>>
Hi.
I want to change text color with CColorDialog.
I have little problem, becuase for changing color, i must
click on edit box and then color will change ...
It mean when i click on OK button,
text color won't change, and i must click on the edit box
to change color.
void CTestglobalDlg::OnOK()
{
CColorDialog m_ColorDlg;
if(m_ColorDlg.DoModal() == IDOK)
{
Ced = m_ColorDlg.GetColor();
}
}
HBRUSH CTestglobalDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_EDIT)
{
pDC->SetTextColor(Ced);
}
return hbr;
}
Ced is member variable:
COLORREF Ced = RGB(0,0,0);
You can test it.
I want to change color with out click on edit box.
Please help me ...
Hadi Rezaie
|
|
|
|
|
The problem you have is that the window has changed it's property, but has not been redrawn. Any CWnd derived class has a function called Invalidate which tells the window it needs to be redrawn. It takes a BOOL, and if it is true, the control calls OnEraseWnd first, i.e. it will go blank then redraw, causing flicker. So to fix your problem, once you set the colour, go
Invalidate(false);
Christian
The content of this post is not necessarily the opinion of my yadda yadda yadda.
To understand recursion, we must first understand recursion.
|
|
|
|
|
<<< In the name of GOD >>>
Hi all.
Q1.
Does for use of STL have any header file in VC++ ?
Or we can use of STL with out any header ?
Q2.
Which is true, for use of below function ?
template <class t="">
T Add(T a, T b){return(a + b);}
1.
int result = Add<int>(10,10);
2.
int result = Add(10,10);
Which is true ???
Q3.
if i have two template: template <class t,="" class="" a="">
How can use of two template T,A for write function ?
Please write example with full explain.
Q4.
What mean template <int i=""> ?
Q5.
Please explain to me about CArray.
What mean second parameter of CArray ?
For example:
What is different between:
1.
CArray<int, int=""> my_integer;
2.
CArray<int, int&=""> my_integer;
Best Regards.
Hadi Rezaie
|
|
|
|
|
STL uses many headers, depending on what you need. There is no "stl.h"
for instance, to use strings, you use #include <string>, to use algorithsm, you use #include <algoritm>
The rest of your questions don't make a lot of sense, and based on your other questions, it seems like you need to pick up a good book on C++ and read it before going any further.
|
|
|
|
|
I'm just starting to get into database programming, so bear with me as I stumble through my questions.
I can update and insert and delete records from a database. That I understand pretty easily, what I don't know is how to get the information from the database so that I can display/write to a file/ect the data. How can I pull some information from a database cell so I can look at it with my program?
I'm using VC++ 6.0 and am testing these things with a console app and using a Access database.
What I am looking to do at the moment is to pull the data from a single cell (hard coded which one) and use it in a cout statement. Any help with this would be much appreciated. I would like the command(s) that can do it but a push/shove/kick in the @$$ in the right direction will work just as well. Thanks much.
Quinn
The sun is evil, it denies me Pepsi.
|
|
|
|
|
The only way that I know of to do this is with the use of CDaoRecordset::GetFieldValue, this function will expect a COleVariant as second parameter (first is used to identify the column).
So, for example if you want to read a value found in the first column on the first record in your recordset your code will look like:
CVariant var;
m_recSet.MoveFirst();
m_recSet.GetFieldValue( 0, &var );
Pz
|
|
|
|