|
If u want to draw a icon,
use the following WM_PAINT of any control which is using as place holder (static text/picture box etc
ImageList_Create
LoadIcon
ImageList_AddIcon
ImageList_Draw
|
|
|
|
|
|
ppatel567 wrote: Here why not only header files for CMyApp and CMySpec are not added.
Why such kind of syntax?
They are called Forward Declarations. The header files for these classes will be included in the CPP file.
Nibu thomas
Software Developer
Faqs by Michael dunn
|
|
|
|
|
It is not always possible to include header with desired declaration, in some cases you just don't want class CPatel to heaviliy depend on CMyApp. In such cases (and if CMyApp only encounters in CMyApp* form) it is easier to make such preliminary declaration.
Igor Green
http://www.grigsoft.com/ - files and folders comparison tools
|
|
|
|
|
This is called a Forward Declaration. The class CPpatel no doubt uses the services of the classes CMyApp and CMySpec and as such will have members that refer to them. If CPpatel has a member variable of, for example, the CMySpec class then you need to #include its header as the compiler needs to know its size to define CPpatel . For example:
class CPpatel
{
..
..
..
CMySpec m_TheSpec;
};
If, on the other hand, the CPpatel class contains a pointer or reference to the CMySpec class then the compiler doesn't need to know the object's size as all pointers/references to a class are the same size. In this case you can use a Forward Declaration and you don't need to #include its header. For example:
class CPpatel
{
..
..
..
CMySpec *m_pTheSpec;
};
This is a good thing as it minimises the dependencies of the header file and thus increases the stability of the project (in terms of maintenance) and decreases compile times.
Sometimes Forward Declarations are used to break cyclic dependencies but I'll not go into that at this stage.
Steve
|
|
|
|
|
|
Well, you don't have to use it anyway In most cases it can be avoided.
Igor Green
http://www.grigsoft.com/ - files and folders comparison tools
|
|
|
|
|
Why would you want to avoid it? Minimizing dependencies in a header files is a good thing.
Steve
|
|
|
|
|
Stephen Hewitt wrote: Minimizing dependencies in a header files is a good thing.
I second Steve's opinion!
Maxwell Chen
|
|
|
|
|
It takes years of experience for you to understand what grigsoft said. You will learn it from coding larger-scaled programs.
Maxwell Chen
|
|
|
|
|
ppatel567 wrote: I sometimes noticed that in the header file its only written asanyheader.h=======class CMyApp;class CMySpec;
thats we call forward decalaration of class
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
This kind of declaration is used to help the compiler to understand what string used into the code are sintax errors or objects that are somewhere defined.
I'll try to find a way to explain this to you with two examples,... and remember that the compiler will read the code in the same way of you, i.e. from top to bottom:
First case: the error!
class classA{<br />
classB b;
}<br />
class classB{
...<br />
}
Second case: OK
class classB;
class classA{<br />
classB b;
}<br />
<br />
class classB{<br />
...<br />
}
Hope be clear
|
|
|
|
|
Sir,
I want to display ikon in only 2 columns in a grid control. can u help me in this issue.
Regards JOhn
-- modified at 0:50 Wednesday 17th May, 2006
|
|
|
|
|
are u askin this question in reference to the programmin or windows appearance.
|
|
|
|
|
In my application, I dynamically set the parent of my custom child control to Desktop Window. Now I don't get the keyboard messages in PreTranslateMessage of my control, because the keyboard focus is still in the main application...
BOOL CMyCtrl::PreTranslateMessage( MSG* pMsg_i )
{
if(( pMsg_i->message >= WM_KEYFIRST ) && ( pMsg_i->message <= WM_KEYLAST ))
{
ProcessKeyStroke();
}
return CWnd::PreTranslateMessage( pMsg_i );
}
I cannot change the focus from application to the control because it's a must. Is there anyway to watch the key strokes in this condition?
( Please don't tell me about hook )
Thank you.
- NS -
|
|
|
|
|
Did you try sending a copy of the message to the control from your dialog or frame which houses the control (SendMessage , PostMessage ).
Nibu thomas
Software Developer
Faqs by Michael dunn
|
|
|
|
|
I think that is a last resort... !
As this control is supposed to be a common, I need to avoid such dependencies.
- NS -
|
|
|
|
|
NS17 wrote: I think that is a last resort... !
As this control is supposed to be a common, I need to avoid such dependencies.
Well that is how keyboard messages are set to function. If a control is to receive input from keyboard it should have the Input Focus. This the rule. You cannot break that.
Nibu thomas
Software Developer
Faqs by Michael dunn
|
|
|
|
|
mmm....
So now I am planning to expose a function to allow the app to call in its PreTranslateMessage, like the RelayEvent() of ToolTip Ctrl. What's your opinion?
- NS -
|
|
|
|
|
NS17 wrote: So now I am planning to expose a function to allow the app to call in its PreTranslateMessage, like the RelayEvent() of ToolTip Ctrl. What's your opinion?
Well if you want such functionality that's an option. You can also take look at the FORWARD_WM_********* group of macros which could also help you.
Nibu thomas
Software Developer
Faqs by Michael dunn
|
|
|
|
|
Ok, thank you... Let me try
- NS -
|
|
|
|
|
Hey guys,
I would like to know what happends with memory in this code,
CArray<int,int> myArray;
//my array could be 0 or can grow upto 1000
myArray.SetSize(0,1000);
for (int j = 0; j < 900; j++)
{
myArray.Add(j);
}
//what is below line going to do?
myArray.FreeExtra();
Is SetSize & FreeExtra functions anyway improves anything here or it would be better of without these lines.
Thanks
Mohan
|
|
|
|
|
|
CArray<CPoint,CPoint> myArray;<br />
int i;<br />
<br />
myArray.SetSize(32, 128);<br />
<br />
CPoint* pPt = (CPoint*) myArray.GetData();<br />
for (i=0;i < 32;i++,pPt++)<br />
*pPt = CPoint(i, 2*i);<br />
<br />
<br />
myArray.SetSize(5, 128);<br />
myArray.FreeExtra();
Look at the above code .
Hope now u can understand the use of FreeExtra.
Appu..
"If you judge people, you have no time to love them."
|
|
|
|
|
HI Mohan,
function FreeExtra():
Frees any extra memory that was allocated while the array was grown. This function has no effect on the size or upper bound of the array
function SetSize():
Use this function to set the size of your array before you begin using the array. If you do not use SetSize, adding elements to your array causes it to be frequently reallocated and copied. Frequent reallocation and copying are inefficient and can fragment memory
...referenced from MSDN oct 2001
Knock out 'T' from CAN'T ,
You 'CAN' if you think you 'CAN'
|
|
|
|